linux内核启动后,它接下来要做的事就是启动应用程序,而应用程序在哪里呢,类比windows,启动时要读取c盘,所以linux的文件系统就类似于c盘,并且我们使用的ls、cp等一些类命令(本质是应用程序),也都在根文件系统上,这些程序都来源于busybox,所以根文件系统制作需要busybox。
制作步骤:
1.首先下载busybox,我用的1.36版本([https://busybox.net/downloads/]
2.解压后进入目录,修改Makefile的交叉工具编译链为自己pc的,我的交叉工具编译链如下
3.在目录下执行make menuconfig,进入菜单后直接退出,使用默认配置即可。
4.在目录下执行make
5.编译后报错
5.使用make编译,报错如下
6.解决方法是进入菜单项把Miscellaneous Utilities 下的 seedrng 取消掉,不让该模块编译。
7.再重新make就可以编译成功
8.使用make CONFIG_PREFIX=安装目录 install命令安装,注意这里一定要指定安装目录,否则会安装到当前,破坏系统。
9.进入安装目录查看,安装成功
10.接下来创建第一个init程序的设备文件(/dev/console),这个设备文件主要和应用程序绑定,输入和输出等打印和它有关,还要创建个/dev/null,没有设置id的程序会和它绑定。
先查看本机这两个文件信息
11.然后在安装目录下创建dev文件夹,并在dev下创建这两个设备文件。
12.在创建etc目录,并在该目录下创建inittab配置文件,文件内容为console::askfirst:-/bin/sh
console表示设备文件id,和上一步的设备文件名对应,askfirst表示执行时机,-/bin/sh是应用名
13,由于应用程序需要c库,所以文件系统也需要安装这个库,这个库就用交叉编译链lib目录下的动态文件,在文件系统根目录下创建lib目录,然后把编译链lib目录下的动态文件拷贝过去就行。
创建lib目录
进入到交叉编译链lib目录,这里以so结尾的就是动态库文件
拷贝文件
cp .so /home/book/work/busybox/nfs_root/second_fs/lib -d
注意这里拷贝命令一定要加-d,表示只拷贝链接,否则会拷贝真实文件,会很大
14.在linux系统下,使用ps命令可以查看当前有哪些应用程序,当然我们制作的文件系统也可以提供该命令,内核提供了一个虚拟目录/proc,我们只需要在根文件系统下创建一个proc目录,然后挂载到这虚拟目录下就可以使用ps命令了。
现在根目录创建proc文件夹
然后在etc/inittab这个文件里加入::sysinit:/etc/init.d/rcS,表示要去读取/etc/init.d/rcS这个文件
然后创建/etc/init.d/rcS,文件内容为 mount -a
授权
再在etc目录下创建fstab文件,这里面才是真正挂载操作
文件内容
这里挂载内核寻/proc就完成了,ps命令就可使用。
15.还有一个问题,应用程序可能有多个,不可能每一个都去手动创建设备文件,因此需要配置为自动创建(udev机制),具体操作如下
首先在根文件目录下创建sys目录
然后修改rcS文件,框起来的是新加的
再修改fstab文件,框起来的是新加的
ok,至此,文件系统全部配置完成
16.到根文件目录上层目录使用yaffs文件制作工具制作yaffs文件