快速业务通道

精通init ramfs构建step by step (十二)

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-11

三十五、测试一下

  通过前十一节的内容,我们可以说已经完全掌握了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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号