Professional Documents
Culture Documents
系统 启动
第 1 页:系统启动
第 2 页:编译内核
第 3 页:busybox
第 4 页:从启动到进入 shell
第 5 页:安排文件系统
第 6 页:X Window
编译 内核
在编译内核的时候,由于我们的内核是只有一台机器使用的,所以我们应该对它的情况了如指掌;另
外一方面,为了减低不必要的复杂性,我们决定不用 kernel module 的支持,而把所有需要的东西直接
编译到内核的里面。这样编译出来的内核,在一台普通的 586 主板上,把所有必要的功能都加进去,一
般也不到 800K 字节。所以,这个办法是可行的。而且减低了 init scripts 的复杂程度。从运行方面来考虑,
由于需要的 kernel 代码反正是要装载到内存中的,所以并不会引起内存的浪费。
busybox
从启 动到 进入 shell
用 ldd 命令,后面跟要分析的二进制程序的路径名,就可以知道一个二进制程序,或者是一个
library 文件之间的互相依赖关系,比如 busybox 就依赖于 libc.so 和 ld-linux.so ,我们有了这些知
识,就可把动手把所有需要的 library 拷贝到 flash 盘上。由于我们的 flash 盘说大不大,说小倒也不小,
有 16M 字节之多。我们直接就用 Glibc 的文件也没有太多问题。如果读者朋友们有特殊的需要,觉得
Glibc 太庞大了的话,可以考虑用 uClibc,这是一个非常小巧的 libc 库,功能当然没有 Glibc 全,但
是足够一个嵌入式系统使用了。本文就不再介绍 uClibc 了。
库程序拷贝过来以后,我们就可以考虑系统启动的步骤了。启动的时候,先是 lilo,接下来就是
kernel,kernel 初始化之后,就调用 /sbin/init,然后由 init 解释 /etc/inittab 运行各种各样的东西。
inittab 会指导 init 去调用一个最重要的系统初始化程序 /etc/init.d/rcS,我们将要在 rcS 中完成各个
文件系统的 mount,此外,还有在 rcS 中调用 dhcp 程序,把网络架起来。rcS 执行完了以后,init 就
会在一个 console 上,按照 inittab 的指示开一个 shell,或者是开 getty + login,这样用户就会看
到提示输入用户名的提示符。我们这里为了简单起见,先直接进入 shell,然后等到调试成功以后,再改
成直接进入 X Window。
安排 文件 系统
上面考虑了压缩问题,下面还要考虑到,Flash 盘毕竟不像普通硬盘,多次的擦写毕竟不太好,所
以我们考虑,在需要多次擦写的地方,使用内存来做。这个任务,我们考虑用 tmpfs 来完成。至于 tmpfs
和经典的 ramdisk 的比较,我们这里就不多说了。一般说来,tmpfs 更加灵活一些,tmpfs 的大小不像
ramdisk,可以顺着用户的需要增长或者缩小。我们选择把 /tmp、/var 等几个目录做成 tmpfs。这只需要
我们在 /etc/fstab 里面加上两行类似下面的文字就可以了:
X Window
其它 技巧
如果你的工作系统式在另外一台机器上,通过局域网和本机互联的话,ssh 是一个不错的工具。此
外,ssh 中带的 scp 用起来和普通的 cp 拷贝程序差不多,非常方便。用 ssh 和 scp 来共享文件,远程
试验,你就可以不需要在办公室里跑来跑去的了。