如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
由于init=/linuxrc,因此,在文件系统挂载后,运行的第一个程序就是根目录下的linuxrc,而这是一个指向/bin/busybox的链接,也就是说,系统起来后运行的第一个程序就是busybox本身。busybox首先将试图解析/etc/inittab来获取进一步的初始化配置信息(参考busybox源代码init/init.c中的parse_inittab()函数)。而事实上,root_qtopia中并没有/etc/inittab这个配置文件,根据busybox的裸机,它将生成默认的配置。其中最重要的一个,就是new_init_action(SYSINIT,INIT_SCRIPT,""),也就决定了接下来初始化的脚本是INIT_SCRIPT所定义的值,这个宏的默认值是"etc/init.d/rcS"。下面是文件系统中/etc/init.d/rcS的内容,也是我们要分析的重点1.PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:2.runlevel=S3.prevlevel=N4.umask0225.exportPATHrunlevelprevlevel##为启动环境设置必要的环境变量;1./bin/hostnameFriendlyARM##设置机器名字;1./bin/mount-n-tprocnone/proc2./bin/mount-n-tsysfsnone/sys3./bin/mount-n-tusbfsnone/proc/bus/usb4./bin/mount-tramfsnone/dev##挂载"虚拟"文件系统"/proc"和"/sys",并且在/dev目录下挂载一个ramfs,相当于把原本nandflash上的只读的/dev目录"覆盖"上一块可写的空的SDRAM。##这里要注意的是,/sys和挂载了ramfs的/dev是正确创建设备节点的关键。对于2.6.29内核来说,已经没有devfs的支持,创建设备节点只有通过两种办法由文件系统完成:1)制作文件系统镜像前用mknod手动创建好系统所有的(包括可能有的)设备节点,并把这些节点文件一起做进文件系统镜像中;2)在文件系统初始化过程中,通过/sys目录所输出的信息,在/dev目录下动态的创建系统中当前实际有的设备节点。显然,方法1)有很大的局限性,仅限于没有设备动态增加或减少的情况,不适用于很多设备热插拔的情况,比如U盘,SD卡等等。方法2)是目前大多数PC上的linux的做法(基于udev实现)。这种方法有2个前提:/sys目录挂载和一个可写的/dev目录。这也就是为什么我们这里需要挂载/sys和ramfs在/dev目录上,事实上,这种方法最早就是为热插拔设计的,你可以理解为当系统启动时,所有设备一下子全部"插入"了进来。这里有一点要说明的是,在文件系统初始化跑到这里之前,原来的/dev目录下必须有一个设备节点:/dev/console。其实,要搞清楚"程序"这种东西,没有什么好的办法,无非2个东西,源码和脚本1.echo/sbin/mdev>/proc/sys/kernel/hotplug2./sbin/mdev-s3./bin/hotplug##这几个就是用来完成上面所说的两个东西:1)通过mdev-s在/dev目录下创建必要的设备节点;2)设置内核的hotplughandler为mdev,即当设备热插拔时,由mdev接受来自内核的消息并作出相应的回应,比如挂载U盘。对于mdev,需要注意的是,文件系统里存在/etc/mdev.conf文件,它包含了medv的配置信息。通过这个文件,我们可以自定义一些设备节点的名称或链接来满足特定的需要。这是rootqtopia中mdev.conf的内容:1.#systemall-writabledevices2.full0:006663.null0:006664.ptmx0:006665.random0:006666.tty0:006667.zero0:006668.9.#consoledevices10.tty[0-9]*0:5066011vc/[0-9]*0:5066012.13.#serialportdevices14.s3c2410_serial00:50666=ttySAC015.s3c2410_serial10:50666=ttySAC116.s3c2410_serial20:50666=ttySAC217.s3c2410_serial30:50666=tty