Chinaunix首页 | 论坛 | 博客
  • 博客访问: 304075
  • 博文数量: 111
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 672
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-05 23:41
文章分类

全部博文(111)

文章存档

2017年(111)

我的朋友

分类: LINUX

2017-06-23 19:24:37

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 表示采用


了哪种Root filesystem,nfs表示网络文件系统

- ip=10.0.13.244:10.0.13.198:10.0.12.1:255.255.254.0:target:eth0:none

ip=::::::

详细信息请看 Documentation/filesystems/nfs/nfsroot.txt

- nfsroot=10.0.13.198:/opt/share/fs/nfs_rootfs 表示 nfs server 的路径



3. ramdisk文件系统


前提:制作ext2文件系统,并将busybox拷贝到制作的文件系统中去,然后压缩。

dd if=/dev/zero of=ramdisktao bs=1k count=8000 //建立一块虚拟的磁盘文件

losetup /dev/loop0 ramdisktao //虚拟成循环设备

mke2fs -m 0 /dev/loop0 //格式化虚拟的磁盘文件

mount -t ext2 /dev/loop0 abc/ //将虚拟的磁盘文件mount到abc目录下

cp rootfs/* abc/ -rf //将busybox拷贝到虚拟的磁盘中

umount abc //卸载虚拟的磁盘文件

gzip -9 ramdisktao ramdisktao.gz //压缩成gz格式


如果要往文件系统里面添加文件

gunzip -d ramdisktao.gz //解压压缩过的磁盘文件

mount ramdisktao abc/ //将磁盘文件挂载到abc目录

拷贝文件到abc目录

umount abc //卸载虚拟的磁盘文件

gzip -9 ramdisktao //压缩成gz格式


然后将 ramdisktao.gz 下载到 0x81000000 地址


CONFIG_BLK_DEV_RAM=y

- 使内核支持root ramdisk

CONFIG_BLK_DEV_RAM_COUNT=16

CONFIG_=8192

- 配置内核支持的ramdisk的大小(KB)

CONFIG_CMDLINE="console=ttyS0,115200 mem=512M root=/dev/ram0 initrd=0x81000000,0x00800000 rootfstype=ext2"

- initrd (含义同ramfs文件系统)

- root=/dev/ram0 (含义同ramfs文件系统)

- rootfstype=ext2 表示文件系统的类型是ext2


4. ae使用的gzip格式的ramdisk文件系统

ramdisk.img 是android使用 ./mkbootfs /opt/share/fs/root_fs | ./minigzip > ramdisk.img 得到的

内核支持gzip格式的ramdisk文件

[*]Initial RAM filesystem and RAM disk (initramfs/initrd) support x x

()Initramfs source file(s) x x

[*]Support initial ramdisks compressed using gzip

CONFIG_CMDLINE="console=ttyS0,115200 mem=128M init=/init)

//CONFIG_CMDLINE="console=ttyS0,115200 mem=128M initrd=0x82000000,0x00800000 init=/init)


以后再补充

阅读(1793) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~