快速业务通道

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

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

三十二、编译klibc

  (1)在linux/libs/klibc/">http://www.kernel.org/pub/linux/libs/klibc/下载klibc的源码,目前最新版本是1.5.

  (2)解开源码,并在顶层目录建立一个符号链接linux,指向linux的内核源码.注意,内核源码已通过make menuconfig等命令配置好.

  (3)执行

  make命令,编译klibc.编译完成后,在klibc源码目录树中的usr/dash 和 usr/utils 目录中有shell和一些常用的命令, 它们分成静态链接和动态链接的2种版本,分别在static和shared目录下.为了简单,我们的init ramfs就使用静态编译的版本.动态链接的程序需要使用klibc的动态库文件,位于 usr/klibc/目录下.

  三十三、run-init命令

  与busybox类似,klibc中也有一个切换到真实根文件系统的命令,它就是run-init命令.run-init命令的使用格式与busybox中的switch_root 命令一样,它有2个参数:第一个是已挂载了真实根文件系统的目录;第二个是真实根文件系统中的init程序路径名,一般是 /sbin/init .即

  run-init /newroot /sbin/init

  语句即可从init ramfs切换到挂载在/newroot目录下的真实根文件系统,并执行其中的 /sbin/init 初始化程序.

  三十四、试一试

  现在我们已经有了编译好的klibc,也了解了关键的run-init命令,那么就可以试试用klibc来构建init ramfs.我们用QEMU作为试验环境,并假设在/dev/hda8上有linux系统,根文件系统是ext3.

  (1) 拷贝所需的命令到image构建目录

  把klibc中的usr/dash/sh、usr/utils/static目录下的mount、mknod命令拷贝到image/bin目录下.把usr/kinit/run-init/static/run-init命令拷贝到image/sbin目录下.

  klibc的静态编译版本命令不需要库文件,不需要拷贝.

  (2)创建硬盘的设备文件

  为了简单,我们不使用udev的方式创建设备文件,而是直接用mknod命令创建硬盘的设备文件.对于IDE硬盘/dev/hda,它的主设备号是3,次设备号是0,是块设备类型,用下面的命令在image/dev目录下创建它对应的设备文件

  mknod dev/hda b 3 0

  /dev/hda上的分区的主设备号也是3,次设备号与分区号相同,据此可以创建/dev/hda1 ~ /dev/hda8的设备文件.

  (3)创建/init脚本

  #!/bin/sh

  /bin/mount -t sysfs sysfs /sys

  /bin/mount -t proc proc /proc

  /bin/mount -t ext3 /dev/hda6 /mnt

  exec /sbin/run-init /mnt /sbin/init

  (4)用cpio命令构建init ramfs,然后在QEMU环境下进行试验.如果不出意外,试验系统可以正确地从init ramfs切换到真实的linux系统上.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号