dd if=/dev/zero of=ramdisk_ext2 bs=1k count=11000
sudo losetup /dev/loop2 ramdisk_ext2
sudo mke2fs -m 0 /dev/loop2
mkdir tempdir -p
sudo mount -t ext2 /dev/loop2 tempdir/
sudo cp initramfs/* tempdir/ -rf
sudo umount tempdir
sudo losetup -d /dev/loop2
rm ramdisk_ext2.gz
rm tempdir -rf
gzip -9 ramdisk_ext2
说明:如果大家通过 make menuconfig 配置内核启动参数CONFIG_CMDLINE的时候,对具体参数不知道什么含义,
可以在内核源代码目录里面找到详细的说明,文档路径如下:
Documentation\kernel-parameters.txt
内核是如何挂载root文件系统的?
简单说,linux内核运行的最后阶段会执行mount_root() 函数,挂在root文件系统。
但是,整个过程,基于以下几点内容:
1. 内核只有支持了相应的root文件系统的驱动,才能挂载相应root文件系统。
-- CONFIG_BLK_DEV_RAM=y,使内核支持 root ramdisk 驱动
-- CONFIG_ROOT_NFS=y,使内核支持 root nfs 驱动
2. 通过内核启动参数CONFIG_CMDLINE的root选项可以让kernel运行到最后阶段决定加载何种文件系统的驱动
-- root=/dev/ram0 加载ramdisk root文件系统的驱动
-- root=/dev/nfs加载nfs root文件系统的驱动
3. 内核加载相应的 root文件系统驱动后,这些驱动程序就会让内核正常的挂载相应的root文件系统
root文件系统常用的格式有,ramfs、nfs、ramdisk、yaffs等
在调试阶段常使用的 root 文件系统有如下几个:
1. ramfs文件系统
ramfs文件系统比较简单,只需将制作好的busybox目录在内核config文件中指定一下就可以了。
主要关注下面两个配置:
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE="/home/lidongliang/root_fs"
CONFIG_CMDLINE="console=ttyS0,115200 mem=900M root=/dev/ram0 rootfstype=ramfs noinitrd init=/init"
- mem =512M 表示内核管理的物理内存大小
(进入shell后,可以通过 cat /proc/meminfo 查看内核管理的物理内存的情况)
- initrd 表示将ramdisk文件系统放到物理内存中的起始地址
- root=/dev/ram0 表示采用了哪种Root filesystem,ram0表示内存硬盘(ramdisk)
- init=/init 表示制定init进程,比如init=/sbin/init
2. nfs文件系统
前提1:网卡驱动工作正常
前提2:建立 nfs server (10.0.13.198:/opt/share/fs/nfs_rootfs)
只需在nfs 服务器上添加你的制作好的busybox目录,格式如下:
vi /etc/exports 添加如下内容:
/opt/share/fs/nfs_rootfs *(rw,sync,no_root_squash)
然后重启nfs:/etc/init.d/nfs-kernel-server restart
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
CONFIG_ROOT_NFS=y
- 使内核支持 root nfs
CONFIG_NFS_COMMON=y
CONFIG_CMDLINE="console=ttyS0,115200 mem=512M root=/dev/nfs rw nfsroot=10.0.13.198:/opt/share/fs/nfs_rootfs noinitrd init=/init ip=10.0.13.244:10.0.13.198:10.0.12.1:255.255.254.0:target:eth0:none"
- root=/dev/nfs 表示采用