您的位置:首页 > 运维架构 > Linux

请写出制作一个4M的ramdisk的步骤

2018-04-10 08:11 288 查看
博客内容来源:网络、书籍和本人整理总结

1、解压内核源码到自己设定的目标文件中

2、修改内核配置选项

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

#cp config_mini2451 .config      //config_mini2451是已经配置好的内核

#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是否被选中,如果没有则选中,此项优化内核大小,根据需要进行配置,此外,ramdisk是一种内存虚拟磁盘技术,实质上并不是一种文件系统,它使用的文件系统是ext2文件系统。所以一定要在make menuconfig ARCH=arm的时候进入File systems菜单,选上<*> Second extended fs support。以提供内核对ext2文件系统的支持

3、修改内核启动参数
方法有二:

a):修改.config的第310行,修改CONFIG_CMDLINE=""的定义修改为CONFIG_CMDLINE="initrd=0x31000000,0x400000 root=/dev/ram 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/ram rw init=/linuxrc console=ttySAC0 mem=64M,并saveenv保存u-boot环境变量

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

4、编译内核
#make zImage ARCH=arm CROSS_COMPILE=arm-linux-,编译完成后在当前目录下就出现了zImage内核映像了

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/目录下,以方便使用。

6、制作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配置文件:

#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)。

h)制作ramdisk根文件系统镜像

下载制作ramdisk文件系统的工具genext2fs,当前最新版本为genext2fs-1.4.1.tar.gz ,下载具体地址:http://sourceforge.net/projects/genext2fs/?source=dlp

编译生成该工具genext2fs,并将其放入宿主机的/sbin/目录下以方便使用

跳转到要制作的rootfs的上一级目录

#genext2fs -b 4096 -d rootfs ramdisk

-b是指制作的ramdisk大小为4096K字节

-d是指要制作成ramdisk的根文件系统目录

最后的ramdisk是制作出来的ramdisk的名字,当然可以改名了

#gzip -9 -f ramdisk

将该ramdisk以最优方式压缩为ramdisk.gz


希望能对大家有帮助!谢谢阅读!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息