(一) 根文件系统启动过程
由于默认的内核命令行上有init=/linuxrc, 因此,在文件系统被挂载后,运行的第一个程序是根目录下的linuxrc。 这是一个指向/bin/busybox的链接,也就是说,系统起来后运行的第一个程序也就是busybox本身。
这种情况下,busybox首先将试图解析/etc/inittab来获取进一步的初始化配置信息(参考busybox源代码init/init.c中的parse_inittab()函数)。如果根文件目录中并没有/etc/inittab这个配置文件,根据busybox的逻辑,它将生成默认的配置"/etc/init.d/rcS"这个开机脚本.
rcS这个脚本要完成一些必要目录的挂载:
/bin/mount -n -t proc none /proc
/bin/mount -n -t sysfs none /sys
/bin/mount -t ramfs none /dev
挂载“虚拟”文件系统,/proc, /sys,并且在/dev目录上挂载一个ramfs,相当于把原本NAND Flash上的只读的/dev目录“覆盖”上一块可写的空的SDRAM。
/sys和挂载了ramfs的/dev是正确创建设备节点的关键。对于2.6.29内核来说,已经没有了devfs的支持,创建设备节点只有通过两种办法由文件系统完成:
1) 制作文件系统镜像前用mknod手动创建好系统中所有的(包括可能有的)设备节点,并把这些节点文件一起做进文件系统镜像中;
2)在文件系统初始化过程中,通过/sys目录所输出的信息,在/dev目录下动态的创建系统中当前实际有的设备节点。
echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s
/bin/hotplug
通过mdev -s 在/dev目录下建立必要的设备节点;
设置内核的hotplug handler为mdev, 即当设备热插拔时,由mdev接收来自内核的消息并作出相应的回应, 比如挂载U盘。对于mdev,需要注意的是,文件系统里存在/etc/mdev.conf文件,它包含了mdev的配置信息。以下是mdev.conf的中的一部分,
# serial port devices
s3c2410_serial0 0:5 0666 =ttySAC0
s3c2410_serial1 0:5 0666 =ttySAC1
s3c2410_serial2 0:5 0666 =ttySAC2
s3c2410_serial3 0:5 0666 =ttySAC3
原本串口驱动注册的设备名是s3c2410_serial0, s3c2410_serial1和s3c2410_serial2,而mdev则会在/dev目录下对应生成ttySAC0, ttySAC1和ttySAC2以符合应用程序对于串口设备名称的习惯
/sbin/ifconfig lo 127.0.0.1
/etc/init.d/ifconfig-eth0
设定本机回环地址为127.0.0.1 ,运行网卡设置脚本/etc/init.d/ifconfig-eth0, 其中ifconfig-eth0中先判断, 如果根文件系统为nfs,则说明网卡已经配置OK,这里什么都不需要重新ifconfig配置了,