1.由前面内核启动流程可知,内核启动的最后一步就是启动init进程,代码在init/main.c中,如下:
(1)打开标准输入、标准输出、标准错误设备。
第756行尝试打开/dev/console设备文件,如果成功,它就是init进程标准输入设备。
第759、760将文件描述符0复制给文件描述符1、2,所以标准输入、标准输出、标准错误都对应一个文件。
Busybox init进程的启动过程
。。。
编译/安装Busybox
从网上下载busybox-1.7.0.tar.bz2。
使用命令tar xjf busybox-1.7.0.tar.bz2解压
Busybox集合了几百个命令,在一般系统中并不需要全部使用。可以通过配置Busybox来选择这个命令、定制某些命令的功能、指定Busybox的连接方法、指定Busybox的安装路径。
2.配置Busybox
在busybox目录下执行”make menuconfig”命令即可进入配置界面。如下:
此处使用默认配置,直接退出即可。
下面讲一些选项,供参考。Busybox的配置过程大多是选择、去除各种命令。
1)设置“TAB”键补全功能。
2)连接/编译选项
3)选择tar命令
4)Linux Module Utilities选项
5)Linux System Utilities选项
5)Networking Utilities选项
设置完成后,就可以编译和安装Busybox了。
2.编译和安装Busybox
接下来先安装glibc库,再继续构建根文件系统
Glibc库的位置是/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib
库里面的目录、文件可以分为8类:
接下来安装glibc库,假设要构建的根文件系统目录为/work/nfs_roo/fs_mini。执行下面:
把库文件拷贝到/work/nfs_roo/fs_mini里,完成。
上面介绍了如何安装Busybox、glibc库,建立了bin/、sbin/、usr/bin/、usr/sbin、lib/等目录,最小根文件系统的大部分目录、文件已经建好。下面介绍剩下的部分,假设开发板的根文件系统在主机上的目录为/work/nfs_root/fs_mini。
1.构建etc目录
init进程根据/etc/inittab文件来创建其他子进程,比如调用脚本文件配置IP地址、挂接其他文件系统,最后启动shell等。
etc目录下的内容取决于要运行的程序,本节只需要创建3个文件:etc/inittab、etc/init.d/rcS、etc/fstab。
1)创建etc/inittab文件
2)创建etc/init.d/rcS文件
3)创建etc/fstab文件
2.构建dev目录
1)静态创建设备文件(由开发者事先创建好,不是内核自动创建的)
2)使用mdev创建设备文件
3.创建其他目录
现在,/work/nfs_root/fs_mini目录下就是一个非常小的根文件系统。开发板可以将它作为网络文件系统直接启动。
如果要烧入开发板,还需要将它制作为一个映像文件。