2022年miniroot_qtopia文件系统启动过程分析 .pdf
《2022年miniroot_qtopia文件系统启动过程分析 .pdf》由会员分享,可在线阅读,更多相关《2022年miniroot_qtopia文件系统启动过程分析 .pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、mini2440 root_qtopia 文件系统启动过程分析2010-03-29 15:24 对于 mini2440 最新的 root_qtopia文件系统启动过程,我在这里做了一些简单的分析,和大家分享一下经验,不足之处也请大家及时指出。其实, 虽然 root_qtopia 这个文件系统的GUI 是基于 Qtopia 的,但其初始化启动过程却是由大部分由 busybox 完成, Qtopia (qpe)只是在启动的最后阶段被开启。由于默认的内核命令行上有init=/linuxrc,因此,在文件系统被挂载后,运行的第一个程序是根目录下的linuxrc 。 这是一个指向 /bin/busybo
2、x 的链接,也就是说,系统起来后运行的第一个程序也就是busybox 本身。这种情况下, busybox 首先将试图解析/etc/inittab 来获取进一步的初始化配置信息(参考 busybox源代码 init/init.c 中的 parse_inittab() 函数)。而事实上, root_qtopia 中并没有 /etc/inittab 这个配置文件,根据busybox 的逻辑,它将生成默认的配置复制代码static void parse_inittab(void)#if ENABLE_FEATURE_USE_INITTABchar *token4;parser_t *parser =
3、config_open2(/etc/inittab,fopen_for_read);if (parser = NULL)#endif/* No inittab file - set up some default behavior */* Reboot on Ctrl-Alt-Del*/new_init_action(CTRLALTDEL,reboot, );/* Umount all filesystems on halt/reboot */new_init_action(SHUTDOWN,umount -a -r, );/* Swapoff on halt/reboot */if (ENA
4、BLE_SWAPONOFF)new_init_action(SHUTDOWN,swapoff -a, );/* Prepareto restart init when a QUIT is received */new_init_action(RESTART,init, );/* Askfirst shell on tty1-4 */new_init_action(ASKFIRST,bb_default_login_shell, );/TODO: VC_1 insteadof ? is console - ctty problems - angry usersnew_init_action(AS
5、KFIRST,bb_default_login_shell, VC_2);new_init_action(ASKFIRST,bb_default_login_shell, VC_3);new_init_action(ASKFIRST,bb_default_login_shell, VC_4);/* sysinit */new_init_action(SYSINIT,INIT_SCRIPT, );return;其中,最重要的一个,就是new_init_action(SYSINIT,INIT_SCRIPT, ) , 也就决定了接下去初始化的脚本是INIT_SCRIPT 所定义的值。这个宏的默认值是
6、/etc/init.d/rcS.下面是文件系统中/etc/init.d/rcS 的内容 , 也是我们要分析的重点复制代码#! /bin/sh名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:runlevel=Sprevlevel=Numask 022export PATH runlevel prevlevel# Trap CTRL-
7、C &c only in this shell so wecan interrupt subprocesses.#trap : INT QUIT TSTP/bin/hostname FriendlyARM/bin/mount -n -t proc none/proc/bin/mount -n -t sysfsnone /sys/bin/mount -n -t usbfs none /proc/bus/usb/bin/mount -t ramfs none /devecho /sbin/mdev /proc/sys/kernel/hotplug/sbin/mdev -s/bin/hotplug#
8、 mounting file system specified in /etc/fstabmkdir -p /dev/ptsmkdir -p /dev/shm/bin/mount -n -t devpts none /dev/pts -o mode=0622/bin/mount -n -t tmpfs tmpfs /dev/shm/bin/mount -n -t ramfs none/tmp/bin/mount -n -t ramfs none/varmkdir -p /var/emptymkdir -p /var/logmkdir -p /var/lockmkdir -p /var/runm
9、kdir -p /var/tmp/sbin/hwclock -ssyslogd/etc/rc.d/init.d/netd startecho /dev/tty1echo Starting networking. /dev/tty1sleep 1/etc/rc.d/init.d/httpdstartecho /dev/tty1echo Starting web server. /dev/tty1sleep 1/etc/rc.d/init.d/leds startecho /dev/tty1echo Starting leds service. /dev/tty1echo sleep 1/sbin
10、/ifconfig lo 127.0.0.1/etc/init.d/ifconfig-eth0名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - /bin/qtopia &echo /dev/tty1echo Starting Qtopia, pleasewaiting. /dev/tty1下面就逐个来分析:复制代码PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:runlevel=
11、Sprevlevel=Numask 022export PATH runlevel prevlevel为启动环境设置必要的环境变量;复制代码/bin/hostname FriendlyARM设置机器名字;复制代码/bin/mount -n -t proc none /proc/bin/mount -n -t sysfsnone /sys/bin/mount -n -t usbfs none /proc/bus/usb/bin/mount -t ramfs none /dev挂载 “ 虚拟 ” 文件系统, /proc, /sys,并且在/dev 目录上挂载一个ramfs,相当于把原本NAND F
12、lash上的只读的 /dev 目录 “ 覆盖 ” 上一块可写的空的SDRAM 。这里要注意的是, /sys 和挂载了 ramfs 的/dev 是正确创建设备节点的关键。对于 2.6.29 内核来说 ,已经没有了devfs 的支持,创建设备节点只有通过两种办法由文件系统完成:1) 制作文件系统镜像前用mknod 手动创建好系统中所有的(包括可能有的 )设备节点,并把这些节点文件一起做进文件系统镜像中;2)在文件系统初始化过程中,通过/sys 目录所输出的信息,在/dev 目录下动态的创建系统中当前实际有的设备节点。显然,方法1)有很大的局限性,仅限于没有设备动态增加或减少的情况,不适用于很多设备
13、热插拔的情况,比如U 盘, SD 卡等等。方法2)是目前大多数PC 上 Linux 的做法(基于udev实现)。这种方法有两个前提:/sys 目录挂载和一个可写的/dev 目录。这也就是为什么我们在这里需要挂载 /sys 和 ramfs 在/dev 目录上。事实上,这种方法最早就是为热插拔设计的,你可以理解为当系统启动是,所有设备一下子全部“ 插入 ” 了进来。这里有一点要说明的是,在文件系统初始化跑到这里之前,原本的/dev 目录下必须有一个的设备节点: /dev/console。好了,今天先写到这里,明天继续:)复制代码echo /sbin/mdev /proc/sys/kernel/ho
14、tplug/sbin/mdev -s名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - /bin/hotplug这几个就是用来完成我上面所说的两个东西:1)通过 mdev -s 在/dev 目录下建立必要的设备节点;2)设置内核的hotplug handler 为 mdev, 即当设备热插拔时,由mdev 接收来自内核的消息并作出相应的回应, 比如挂载U 盘。对于 mdev,需要注意的是,文件系统里存在/etc/mdev.conf
15、文件,它包含了mdev 的配置信息。通过这个文件, 我们可以自定义一些设备节点的名称或链接来满足特定的需要。这是 root qtopia中 mdev.conf 的内容:复制代码# system all-writable devicesfull0:00666null0:00666ptmx0:00666random0:00666tty0:00666zero0:00666# console devicestty0-9*0:50660vc/0-9*0:50660# serial port devicess3c2410_serial00:50666=ttySAC0s3c2410_serial10:506
16、66=ttySAC1s3c2410_serial20:50666=ttySAC2s3c2410_serial30:50666=ttySAC3# loop devicesloop0-9*0:00660=loop/# i2c devicesi2c-00:00666=i2c/0i2c-10:00666=i2c/1# frame buffer devicesfb0-90:00666# input devicesmice0:00660=input/mouse.*0:00660=input/event.*0:00660=input/ts.*0:00660=input/# rtc devicesrtc00:
17、00644rtcrtc1-90:00644# misc devicesmmcblk0p10:00600=sdcard */bin/hotplugsda10:00600=udisk * /bin/hotplug名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - 可以看到,原本串口驱动注册的设备名是s3c2410_serial0, s3c2410_serial1 和 s3c2410_serial2,而 mdev 则会在 /dev 目录下
18、对应生成ttySAC0, ttySAC1 和 ttySAC2 以符合应用程序对于串口设备名称的习惯。 同样的,/dev/sdcard 和/dev/udisk 永远分别指向SD 卡和 U 盘的第一个分区。( 所以,用那些没有分区表的SD 卡或 U 盘的兄弟知道原因了吧.)复制代码# mounting file system specified in /etc/fstabmkdir -p /dev/ptsmkdir -p /dev/shm/bin/mount -n -t devpts none /dev/pts -o mode=0622/bin/mount -n -t tmpfs tmpfs /d
19、ev/shm/bin/mount -n -t ramfs none/tmp/bin/mount -n -t ramfs none/varmkdir -p /var/emptymkdir -p /var/logmkdir -p /var/lockmkdir -p /var/runmkdir -p /var/tmp就像注释中所说的,这是用来挂载其他一些常用的文件系统,并在/var 目录下 (同样是ramfs,可写的 )新建必要的目录。复制代码/sbin/hwclock -s用来设定系统时间的,从硬件RTC 中获取,不过似乎有问题接下来就是启动系统服务了,包括log 记录,网络,http serve
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年miniroot_qtopia文件系统启动过程分析 2022 miniroot_qtopia 文件系统 启动 过程 分析
限制150内