首页 > 代码库 > 如何创建Linux Initrd
如何创建Linux Initrd
Linux初始RAM磁盘(initrd)是在系统引导过程中挂载的一个临时根文件系统,用来支持两阶段的引导过程。initrd文件中包含了各种可执行程序和驱动程序,它们可以用来挂载实际的根文件系统,然后再讲这个initrd RAM磁盘卸载,并释放内存。在很多嵌入式Linux系统中,initrd就是最终的根文件系统。
创建Linux initrd的 大致流程如下:
1、格式化一个Ramdisk;
2、加载文件系统内容到Ramdisk;
3、将Ramdisk作为根文件系统。
initrd主要由两个格式:传统的Ramdisk和cpio格式,cpio格式的好处是内核原生不需要额外的文件系统支持。创建initrd的方法有:软盘制作(过时)、Ramdisk和loop设备制作(/dev/loop)。
一、通过Ramdisk制作initrd。
$ dd if=/dev/ram0 of=/myfs/initrd $ mkfs.ext2 /dev/ram0 $ mount /dev/ram0 /mnt $ cp -rf /myfs/rootfs/* /mnt $ gzip -9 /myfs/initrd
注:/myfs/rootfs中包含的是定制的根文件系统的内容。
这个过程最能解释initrd的本质,对于Linux来说,Ramdisk的一个块设备,而initrd是这个块设备上所有内容的“克隆”而来的文件。内核中加载initrd的相关代码则将这个文件恢复到Ramdisk中去。
二、通过loop设备制作initrd。
$ dd if=/dev/zero of=/myfs/initrd bs=1024 count=122880 # 制作一个120M的空白文件 $ losetup /dev/loop0 /myfs/initrd # 映射到loop设备上; $ mkfs.ext2 /dev/loop0 # 创建文件系统; $ mount /dev/loop0 /mnt $ cp -rf /myfs/rootfs/* /mnt # 复制需要的文件; $ umount /mnt $ losetup -d /dev/loop0 $ gzip -9 /myfs/initrd三、通过cpio来制作initrd。
$ cd /myfs/rootfs # 到需要复制的文件的目录 $ find . |cpio -o -H newc |gzip -c > ../initrd.gz
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。