linux 根文件系统 什么时候使用ramdisk

linux 根文件系统 什么时候使用ramdisk,第1张

开发环境:Fedora 9

交叉编译工具链:arm-linux-gcc 4.3.2 with EABI

嵌入式Linux内核版本:2.6.29.4-FriendlyARM。昨天写贴子的时候具体记不清了,今天起来启动开发板用uname -r查一下,就是叫做2.6.29.4-FriendlyARM,帖子已经改好了。本文就是友善之臂的2.6.29.4-FriendlyARM的那个版本的内核的基础上改的。其它版本的应该也类似,仅供参考。

开发板:mini2440-128M Nand Flash

Bootloader:u-boot-2009.11

具体步骤如下:

1.解压内核源码树

解压linux-2.6.29-mini2440-20090708.tgz到自己的工作目录,会生成一个友善之臂修改过的并且有几个mini2440默认配置文件的内核源码目录linux-2.6.29。具体步骤参照友善之臂mini2440开发板用户手册,具体不详述了。

2.修改内核配置选项

进入内核源码目录linux-2.6.29目录

#cp config_mini2440_t35 .config

#make menuconfig ARCH=arm

打开配置菜单,修改两个配置项,分别是:

a):General setup-->选择 Initial RAM filesystem and RAM disk...... 项

b):Device Drivers-->Block devices-->选择 RAM block device support 项

并检查Optimize for size是否被选中,如果没有则选中,此项优化内核大小,根据需要进行配置。

修改(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。

然后特别要注意的一点是,ramdisk是一种内存虚拟磁盘技术,实质上并不是一种文件系统,它使用的文件系统时ext2文件系统。所以一定要在make menuconfig ARCH=arm的时候进入File systems菜单,选上<*>Second extended fs support。以提供内核对ext2文件系统的支持。我以前添加过了ext2文件系统了,所以开始的时候在此没有说明,在此为了说明为什么有的人照着我的方法做了,但是仍然kernel panic,特别把这一步也加上。

然后保存配置退出。

这样就为内核添加好了ramdisk启动功能和ramdisk的驱动支持了。

3.修改内核启动参数

方法有二:

a):修改.config的第310行,修改CONFIG_CMDLINE=""的定义

修改为CONFIG_CMDLINE="initrd=0x31000000,0x200000 root=/dev/ram rw init=/linuxrc console=ttySAC0 mem=64M"

保存。

意思为从ramdisk启动,ramdisk压缩文件起始地址在内存地址0x31000000处,文件大小为0x200000。

此参数也可以在make menuconfig ARCH=arm时进入Boot options菜单,然后在Default kernel command string里修改。效果是一样的。

b):或者不修改.config的的第310行CMDLINE定义,而是用u-boot的bootargs环境变量来传递启动参数。

同样也是修改该环境变量为bootargs=initrd=0x31000000,0x200000 root=/dev/ram rw init=/linuxrc console=ttySAC0 mem=64M

并saveenv保存u-boot环境变量

以上a),b)的效果是一样的。

4.编译内核

#make zImage ARCH=arm CROSS_COMPILE=arm-linux-

然后是二十分钟左右的等待。

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

好像友善之臂把内核源码目录里的uImage目标给注释了,以前在论坛里看到过有人说,直接make uImage好像提示没有uImage的目标。所以我就先制作zImage,然后再用u-boot的mkimage工具转化为uImage。其实uImage就是在zImage的开头部分增加了一个64字节的内核映像说明。

5.制作uImage内核映像

由于我使用的Bootloader是u-boot,所以要将zImage转化为uImage,方法如下:

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

说明:mkimage工具是u-boot格式uImage内核映像制作工具。如果成功编译u-boot之后,它会在u-boot源码树下的tools目录之下。建议将其拷贝到宿主机的/sbin/目录下,以方便使用。mkimage使用时的具体参数不再详述,不清楚的请自己查阅。

6.制作ramdisk根文件系统

该过程是制作ramdisk根文件系统的核心步骤,方法如下:

a)创建根文件系统目录:

#cd转入到你的工作目录。

#mkdir rootfs

#cd rootfs

#mkdir bin dev etc lib proc sbin sys usr mnt tmp var

#mkdir usr/bin usr/lib usr/sbin lib/modules

b)创建最基本的设备文件:

#cd dev

#mknod -m 666 console c 5 1

#mknod -m 666 null c 1 3

#cd ..

c)安装/etc配置文件:

这里可以直接把友善之臂的root_qtopia里的几个基本的配置文件拷贝过来,只拷贝必要的即可,并对其内容进行删减,因为我做的ramdisk并不包含Qtopia等,全拷贝过来也没有用。

我是从网上找的最小系统的etc配置文件直接解压到我制作的根文件系统里了,并做参照友善之臂的root_qtopia添加了一些内容,见最后的说明。

*** 作如下:

#tar etc.tar.gz -C /xxx/rootfs

xxx表示你要制作的rootfs所在的目录。

d)编译内核模块:

方法是如下:

进入Linux内核源码目录(linux-2.6.29)

#make modules ARCH=arm CROSS_COMPILE=arm-linux-

e)安装内核模块:

#make modules_install ARCH=arm INSTALL_MOD_PATH=/xxx/rootfs

xxx表示你要制作的rootfs所在的目录。

f)配置busybox

进入busybox目录执行#make menuconfig

进入Busybox Settings ->build Options ->选中"Build busybox as a static binary“,即静态链接,免去拷贝大量的库文件。

Installation Options ->选中"Don't use /usr",以免busybox不慎被安装到宿主机系统的相应目录下,破坏宿主机系统。

Busybox Installation Prefix (/xxx/rootfs),修改该选项表明编译后的busybox将安装到该位置。

g)编译、安装busybox

#make ARCH=arm CROSS_COMPILE=arm-linux-

几分钟编译完成后

#make install

安装到Busybox Installation Prefix (/xxx/rootfs)设定的目录里。当前为我要制作的根文件系统目录(/xxx/rootfs)。

简单的说:先配置文件系统的基本目录,包含/bin /sbin /etc /usr /tmp /root 等基本目录,把应用程序放到这些目录中,再用mkcamfs等工具来打包文件系统即可。细节上的话要说的就多了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11846342.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存