1.修改内核配置选项
进入内核源码目录linux-2.6.32.2目录

cp config_mini2440_x35 .config

make menuconfig ARCH=arm

(1).打开配置菜单,修改两个配置项,分别是:
a):General setup-->选择 Initial RAM filesystem and RAM disk...... 项
b):Device Drivers-->Block devices-->选择 RAM block device support 项

c):并检查Optimize for size是否被选中,如果没有则选中,此项优化内核大小,根据需要进行配置。
d):device driver->block device里的一个选项,‍Default Ramdisk 设置ramdisk的大小.16384

Note:修改(8192)Default RAM disk size kbytes选项为(4096)Default RAM disk size kbytes, 之所以修改是因为我之后制作的ramdisk是4096KB大小的。当然如果你想制作8192KB大小的ramdisk,这里就要对应为8192了,以此 类推。但是最小系统嘛,是不用那么大的ramdisk的。此项的默认配置就是(4096),以前我改过这个配置,所以是(8192)了。如果这个大小和你 做的ramdisk不匹配,则启动时仍然会出现kernel panic内核恐慌,提示ramdisk格式不正确,挂载不上ramdisk。

(2).进入File systems菜单,选上<*> Second extended fs support
ramdisk是一种内存虚拟磁盘技术,实质上并不是一种文件系统,它使用的文件系统时ext2文件系统。
这样就为内核添加好了ramdisk启动功能和ramdisk的驱动支持了。

2.修改内核启动参数
方法有二:
a):修改.config的第310行,修改CONFIG_CMDLINE=""的定义
修改为CONFIG_CMDLINE="initrd=0x31000000,0x400000 root=/dev/ram0 rw init=/linuxrc console=ttySAC0 mem=64M"
保存。
意思为从ramdisk启动,ramdisk压缩文件起始地址在内存地址0x31000000处,文件大小为0x400000。
此参数也可以在make menuconfig ARCH=arm时进入Boot options菜单,然后在Default kernel command string里修改。效果是一样的

b):或者不修改.config的的第310行CMDLINE定义,而是用u-boot的bootargs环境变量来传递启动参数。
同样也是修改该环境变量为bootargs=initrd=0x31000000,0x400000 root=/dev/ram0 rw init=/linuxrc console=ttySAC0 mem=64M
并saveenv保存u-boot环境变量
以上a),b)的效果是一样的。

4.编译内核

make zImage ARCH=arm CROSS_COMPILE=arm-linux-

编译完成后在当前目录下就出现了zImage内核映像了。

5.其实 uImage就是在zImage的开头部分增加了一个64字节的内核映像说明。说明一下:zImage是ARM Linux常用的一种压缩映像文件,uImage是U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的“头”,说明这个映像文 件的类型、加载位置、生成时间、大小等信息。换句话说,如果直接从uImage的0x40位置开始执行,zImage和uImage没有任何区别。另 外,Linux2.4内核不支持uImage,Linux2.6内核加入了很多对嵌入式系统的支持,但是uImage的生成也需要设置。

5.制作uImage内核映像
由于使用的Bootloader是u-boot,所以要将zImage转化为uImage,方法如下:
1.把zImage 拷到uboot 的tools 目录下

  1. ./mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -n "Linux kernel Image" -d zImage uImage-ramdisk

说明:mkimage工具是u-boot格式uImage内核映像制作工具。如果成功编译u-boot之后,它会在u-boot源码树下的tools目录 之下。建议将其拷贝到宿主机的/sbin/目录下,以方便使用。

6.还有一个是启动到最后面,会提示

RAMDISK: Compressed image found at block 0
RAMDISK: incomplete write (2270 != 32768)

之类,这问题就是上面说的内核配置的ramdisk大小不对,要去修改一下内核配置
我将它修改成12288(1024的整数倍)

标签: none

添加新评论