搭建根文件系统需要准备哪些东西?
一、根文件系统需要第一个应用程序
busybox集成了init,为了得到这个busybox程序作为根文件系统的init,所以我们需要对busybox进行编译安装
二、内核启动第一个应用程序的过程
1、确定标准输入、标准输出、标准错误设备
- 内核的init/main.c的756行,打开了dev/console 作为标准输入、标准输出、标准错误设备。
所以我们需要在根文件系统创建dev/console作为标准输入、标准输出、标准错误设备
2、寻找init程序(busybox的init)
- 内核首先根据ramdisk_execute_command变量来寻找指定的init程序,
- 如果没有指定,那么会尝试依次执行sbin/init,etc/init,bin/init,bin/sh。如果都不存在则启动失败。
3、busybox init启动流程
- 首先会检查dev/console是否可以作为标准输入、标准输出、标准错误设备,如果不能,就会使用dev/null作为标准输入、标准输出、标准错误设备。
所以我们需要在根文件系统创建dev/null
-
然后会读取etc/inittab文件,读取其中的命令来执行
所以我们需要在根文件系统创建etc/inittab,并在里面创建需要初始化的进程 -
ps:如果没有etc/inittab文件,系统就会执行默认的inittab条目
-
我们在etc/inittab输入console
三、根文件系统会用到C函数库
所以我们需要在根文件系统创建lib目录,并在里面复制一份C函数库
开始搭建根文件系统
一、总结,搭建根文件系统需要些什么?
1、我们需要编译安装busybox
2、需要dev/console与dev/null作为标准输入、标准输出。标准错误设备
3、需要etc/inittab来指定初始化进程
4、需要建立lib
二、编译安装busybox步骤
1、make menuconfig
-
找到busybox源码,复制到交叉编译环境下的linux系统 解压后执行make menuconfig
-
期间可能会因为make版本的问题导致一些错误,可以通过百度搜索自行解决,一般只要稍微修改busybox主makefile就可以解决。
扫描二维码关注公众号,回复: 11472951 查看本文章 -
在make menuconfig中,对busybox的编译选项进行配置
-
tab completion,这个默认不选取,但是很有用
- 配置cross compiler(交叉编译器 )为arm-linux- ,低版本的busybox的menuconfig可能没有这个选项,可以通过修改主makefile 来指定交叉编译器。
2、执行make与make CONFIG_PREFIX=安装目录 install
执行make,
然后执行make CONFIG_PREFIX=安装目录 install
ps :千万不能直接执行make install,否则会破坏原有linux系统
ps:后面添加的dev、etc、lib文件夹都在dir_path下
三、创建设备console和null
- mkdir dev创建dev目录
- cd dev 进入dev目录
- 查看一下console和null的主次设备号:ls /dev/console /dev/null -l
得知console的主设备号为5,次设备号为1;null的主设备号为1,次设备号为3。 - 然后执行
-mknod console c 5 1
mknod null c 1 3 - 创建设备console和null完成,但还需inittab配置文件来让console生效
四、创建inittab配置文件
- mkdir etc
cd etc - vi inittab
- 加入console::askfirst:-/bin/sh
使这个shell的标准输入,标准输出,标准错误都指向这个console - 加入::sysinit:/etc/init.d/rcS
这是一个脚本文件,可以在里面配置加入想要开机自动执行的命令 - 创建/init.d/rcS文件
给rcS添加可执行权限:chmod +x /init.d/rcS
五、配置glibc库
- 使用,cp .so /lib -d ,复制库到自己的lib目录下
使根文件系统成为可烧写的映像文件
一、根据开发板来选择系统映像文件格式
falsh页地址小于2k的选择yaffs格式,falsh页地址大于等于2k的选择yaffs2格式。
我们选择yaffs2格式。
二、获取到mkyaffs2image工具
1、下载安装包yaffs_source_util_larger_small_page_nand.tar.bz2
- 下载地址:
链接:https://pan.baidu.com/s/1MluqjVEUCEbW6yYfD5j0hw
提取码:j69l
2、解压、编译、烧录
-
tar xjf yaffs_source_util_larger_small_page_nand.tar.bz2
cd Development_util_ok
cd yaffs2/
cd utils/ -
进入工具目录后:make 。生成我们需要的mkyaffs2image。
-
将它复制:cp mkyaffs2image /usr/local/bin/。
-
并给它可执行权限:chmod +x /usr/local/bin/mkyaffs2image。
-
再次进入我们创建的根文件目录,利用mkyaffs2image生成可烧写的根文件系统:mkyaffs2image 目录地址 xxx.yaffs2
-
这样就得到了可烧写的映像文件:xxx.yaffs2
-
在uboot中,,就可以使用xxx.yaffs2这个来烧写新的文件系统了