精通init ramfs构建step by step (十二)
三十五、测试一下 通过前十一节的内容,我们可以说已经完全掌握了init ramfs构建的方法,那么现在就测试一下,拿一个实际的init ramfs来分析,看我们是否能理解多少. 我们选择Debian 4.0 AMD64 版本的init ramfs作为目标进行分析,它的init ramfs文件是initrd.img-2.6.18-6-amd64.用cpio命令把init ramfs文件解开,然后打开其中的init脚本文件具体分析.好了,大家利用前面各节的知识开始吧. 作为提示,在这里转载一篇文章,来自http://blog.chinaunix.net/u/12679/showart_429816.html: initrd执行顺序 这是安装过程中的笔记,放这里希望对大家有用.错误之处请指正. (系统为debian etch, 以安装后默认的initrd.img-2.6.18-5为例) 解开initrd文件: 例如有initrd文件/boot/initrd.img, 用file命令看到这是个gzip压缩的文件,可以用下面的命令解开查看: 代码: mkdir /boot/myinit cd /boot/myinit zcat ../initrd.img | cpio -id(注:用mkinitrd命令默认产生的是cramfs格式的.如果文件格式是压缩的ramfs文件系统,可以直接mount之后查看:mount -t cramfs /boot/initrd.img /mnt/) 如果是2.6内核,采用的是cpio压缩,方法如下: cp /boot/initrd-***.img initrd.img.gz gunzip initrd.img.gz mkdir initrd mv initrd.img initrd cd initrd cpio -mdiv < initrd.img 在当前目录下就有一些目录和文件init,其中文件init是启动时加载initrd之后执行的脚本. 目录结构: /bin/: 文件有busybox, mknod, sh, uname, cat, mount, pivot_root等 --------/sbin/: 文件有modprobe, depmod, udevd, udevdtrigger --------/lib/: 文件有: ----------------(1) 可执行文件需要的动态库 ----------------(2) modules/: 内核模块 ----------------(3) udev/: udev需要的可执行文件 --------/lib64/: 文件有:x86_64程序装载器 --------/etc/: 与modprobe, udev相关的配置文件 --------/conf/: 有如下的文件 ----------------(1) modules: 列出了需要加载的模块 ----------------(2) arch.conf: 设置变量DPKG_ARCH=amd64 ----------------(3) initramfs.conf: 定义了一些变量 --------/scripts/: ----------------有如下的文件: ----------------functions: 定义了一些方便使用的函数 ----------------local和nfs: mount根目录时执行的脚本,一般mount本地系统,执行local ----------------有如下的目录,其中放置各阶段执行的脚本: ----------------init_top/ ----------------init_premount/ ----------------init_bottom/ ----------------local_top/ ----------------local_premount/ ----------------local_bottom/ --------/init: 启动时加载initrd之后执行的脚本 生成initrd文件: find . |cpio -o --dereference -H newc | gzip -9 > ../initrd.img init文件执行流程: --------1) 创建目录/dev, /root, /sys, /proc, /tmp, /var/lock,其中/root是下面根文件系统要mount的位置 --------2) mount系统proc和sys --------3) 执行脚本/etc/udev/udev.conf,仅定义变量 --------4) mount udev设备:mount -t tmpfs -o size= udev /dev --------5) 创建/dev/console, /dev/null, /dev/.initramfs --------6) 导入/conf目录下的initramfs.conf, /conf/conf.d/目录以及/scripts/functions定义的变量和函数, 并且根据传递的内核参数设置相应的变量,其中比较重要的变 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |