linux学习笔记:搭建第一个最简单的根文件系统

搭建根文件系统需要准备哪些东西?

一、根文件系统需要第一个应用程序

内核启动后的第一个程序负责配置其他的程序

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就可以解决。

  • 在make menuconfig中,对busybox的编译选项进行配置

  • tab completion,这个默认不选取,但是很有用

建议勾选tab

  • 配置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这个来烧写新的文件系统了

猜你喜欢

转载自blog.csdn.net/tiantangmoke/article/details/102909123