快速业务通道

精通init ramfs构建step by step (四)

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

十一、自动生成/dev下的设备文件

  上节用chroot方法试验busybox时,为了简单,是用“绑定”的方式把主机的/dev中的设备文件映射到image目录下的dev目录.在init ramfs上,这种方法显然不能使用.

  生成系统的设备文件,现在通常都是用udev动态生成,而init ramfs为了做到通用,动态生成的要求是的.在busybox中有一个mdev命令,就是用来动态生成设备文件,填充到/dev目录的.

  在系统启动时,用

  mdev -s

  命令可以根据内核的sysfs文件系统在/dev目录中自动生成相应的设备文件.命令执行前,需要先挂载内核的proc和sysfs虚拟文件系统.

  十二、初始身手

  解决了自动生成设备文件的问题后,我们可以试着做一个最简单的可运行的linux系统了:

  (1)在image目录下写一个最简单的init脚本.

  #!/bin/sh

  mount -t proc proc /proc

  mount -t sysfs sysfs /sys

  mdev -s

  /bin/sh

  (2)为init脚本设置可执行权限,否则内核不会去执行它.

  chmod x init

  (3)有些busybox配置中,mdev命令需要读取/etc/mdev.conf文件,为了避免出错信息,我们创建一个空文件.mdev.conf文件是用来控制mdev生成的设备文件的读写权限的,在这里我们不需要对设备文件设置特别的权限,就使用mdev缺省的660的权限设置.有关mdev的设备文件权限的控制详细信息,可参考busybox源码树docs目录下的mdev.txt文件.

  touch etc/mdev.conf

  (4)在内核源码目录下,执行

  make

  命令,重新编译内核,生成新的init ramfs.

  好了,在QEMU模拟环境下启动这个新的内核,系统初始化后,会进入SHELL环境.在这个SHELL环境下,试验一些常用命令,看看是否可以正常运行.

  十三、can''t access tty

  上一步创建的简单linux系统在进入SHELL环境时,会打出下面这一句出错信息:

  /bin/sh: can''t access tty; job controll off

  虽然不影响使用,但终究不够完美.

  产生这个错误的原因是我们的SHELL是直接运行在内核的console上的,而console是不能提供控制终端(terminal)功能的,把SHELL运行在tty设备上,才能消除这个错误.解决问题的办法是使用正规init机制,在执行SHELL前打开tty设备. 拥有帝国一切,皆有可能。欢迎访问phome.net

  另外,这个简单系统的reboot、halt等命令是不起作用的,也通过init方式解决.


十四、busybox的缺省init模式

  busybox支持init功能,当系统没有/etc/inittab文件时,它有一套缺省的模式,按下面配置执行:

  ::sysinit:/etc/init.d/rcS

  ::askfirst:/bin/sh

  ::ctrlaltdel:/sbin/reboot

  ::shutdown:/sbin/swapoff -a

  ::shutdown:/bin/umount -a -r

  ::restart:/sbin/init

  如果busybox检测到/dev/console不是串口控制台,init还要执行下面的动作:

  tty2::askfirst:/bin/sh

  tty3::askfirst:/bin/sh

  tty4::askfirst:/bin/sh

  我们试试这种模式是否可以解决我们的问题.

  (1)写/etc/init.d/rcS脚本

  这个脚本实际是要执行系统的初始化操作.我们把前面的init脚本改造一下,将的/bin/sh命令删除,然后移到 etc/init.d目录下,改名为rcS.

  (2)init ramfs不需要linuxrc,如果没有init文件,内核就不认为它是一个有效的init ramfs,因而不安装它,导致内核panic.于是,我们在image目录下,把busybox安装的linuxrc改名为init:

  mv linuxrc init

  (3)重新编译内核,生成新的init ramfs

  (4)用QEMU试验一下新编译的内核.系统启动后,会打出一句话“please press Enter to active this console”——感觉还不错.但是按下回车键后,系统依然会打出错误信息“-/bin/sh:

  can''t access tty; job controll off ”.用t

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