linux系列目录: linux基础篇(一)——GCC和Makefile编译过程 linux基础篇(二)——静态和动态链接 ARM裸机篇(一)——i.MX6ULL介绍 ARM裸机篇(二)——i.MX6ULL启动过程 ARM裸机篇(三)——i.MX6ULL第一个裸机程序 ARM裸机篇(四)——重定位和地址无关码 ARM裸机篇(五)——异常和中断 linux系统移植篇(一)—— linux系统组成 linux系统移植篇(二)—— Uboot使用介绍 linux系统移植篇(三)—— Linux 内核使用介绍 linux系统移植篇(四)—— 根文件系统使用介绍
一、根文件系统的介绍
根文件系统首先是内核启动时所 mount(挂载)的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。
二、常见的根文件系统
根文件系统本质都是一些文件和配置信息组成,之间的界限没有很明确的界定,以下大致列出一些根文件系统的特点:
三、BusyBox 构建根文件系统
1、BusyBox 简介
BusyBox 是一个集成了三百多个最常用 Linux 命令和工具的软件。 BusyBox 包含了一些简单的工具,例如 ls、 cat 和 echo 等等,还包含了一些更大、更复杂的工具,例 grep、 find、 mount 以及 telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说 BusyBox 就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Linux 系统的自带的 shell。
2、获取BusyBox
BusyBox 可以在其官网下载到,官网地址为: https://busybox.net 下载当前最新版本 busybox-1.35.0.tar.bz2 也可以使用我们提供的文件。
3、编译 BusyBox 构建根文件系统
将 busybox-1.29.0.tar.bz2 发送到 Ubuntu 中,存放位置大家随便选择。然后使用如下命令将其解压:
tar -vxjf busybox-1.35.0.tar.bz2
解压后目录如下: 配置 busybox:
make menuconfig
编译 busybox:
make
4、安装busybox
一般在 Linux 驱动开发的时候通过 nfs 挂载根文件系统会更加方便,首先在nfs 服务器目录中新建一个安装目录 rootfs 用于安装busybox,然后使用 CONFIG_PREFIX 环境变量指定该目录进行安装:
make install CONFIG_PREFIX=/home/kk/imx6ull/nfs/rootfs
安装完成以后,busybox的所有工具和文件就会被安装到目录rootfs中: rootfs 目录下有 bin、 sbin 和 usr 这三个目录,以及 linuxrc 这个文件。Linux内核init进程最后会查找用户空间的init程序,找到以后就会运行这个用户空间的init程序,从而切换到用户态,而linuxrc就是可以作为用户空间的init程序。如果 bootargs 设置 init=/linuxrc,那么 linuxrc 就是可以作为用户空间的 init 程序,所以用户态空间的 init 程序是 busybox 来生成的。 busybox 的工作就完成了,但是此时的根文件系统还不能使用,还需要一些其他的文件。
5、完善根文件系统
5.1、向 rootfs 的“/lib”目录添加库文件
Linux 中的应用程序一般都是需要动态库的, 在 rootfs 中创建一个名为“lib”的文件夹,然后进入交叉编译器的目录,将库文件拷贝到 lib文件夹下:
cp /usr/arm-linux-gnueabihf/lib/*so* *.a /home/kk/imx6ull/linux_nfs/rootfs/lib/ -d
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.7:
/home/kk/imx6ull/nfs/rootfs,v3 rw ip=192.168.1.10:192.168.1.7:192.168.1.1:255.255.255.0::eth0:off'
|