linux系列目录:
linux基础篇(一)——GCC和Makefile编译过程
linux基础篇(二)——静态和动态链接
ARM裸机篇(一)——i.MX6ULL介绍
ARM裸机篇(二)——i.MX6ULL启动过程
ARM裸机篇(三)——i.MX6ULL第一个裸机程序
ARM裸机篇(四)——重定位和地址无关码
ARM裸机篇(五)——异常和中断
linux系统移植篇(一)—— linux系统组成
linux系统移植篇(二)—— Uboot使用介绍
linux系统移植篇(三)—— Linux 内核使用介绍
linux系统移植篇(四)—— 根文件系统使用介绍
linux驱动开发篇(一)—— Linux 内核模块介绍
linux驱动开发篇(二)—— 字符设备驱动框架
linux驱动开发篇(三)—— 总线设备驱动模型
linux驱动开发篇(四)—— platform平台设备驱动
根文件系统首先是内核启动时所 mount(挂载)的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。
在构建根文件系统之前,我们先来看一下根文件系统里面大概都有些什么内容,以 Ubuntu为例,根文件系统的目录名字为‘/’,所以输入如下命令就可以进入根目录中:
根文件系统本质都是一些文件和配置信息组成,之间的界限没有很明确的界定,以下大致列出一些根文件系统的特点:
BusyBox 是一个集成了三百多个最常用 Linux 命令和工具的软件。 BusyBox 包含了一些简单的工具,例如 ls、 cat 和 echo 等等,还包含了一些更大、更复杂的工具,例 grep、 find、 mount 以及 telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说 BusyBox 就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Linux 系统的自带的 shell。
BusyBox 可以在其官网下载到,官网地址为: https://busybox.net
下载当前最新版本 busybox-1.35.0.tar.bz2 也可以使用我们提供的文件。
将 busybox-1.29.0.tar.bz2 发送到 Ubuntu 中,存放位置大家随便选择。然后使用如下命令将其解压:
tar -vxjf busybox-1.35.0.tar.bz2
make menuconfig
编译 busybox:
make
一般在 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 的工作就完成了,但是此时的根文件系统还不能使用,还需要一些其他的文件。
在rootfs目录下新建以下目录:
mkdir dev etc lib var proc tmp home root mnt sys
新建以下文件
cd ./dev
sudo mknod console c 5 1
sudo mknod null c 1 3
在inittab中添加以下内容
cd ../etc
vim inittab
console::askfirst:-/bin/sh
保存后,在uboot中根据自己开发板的IP,设置网络:
setenv ipaddr 192.168.1.5
setenv ethaddr 32:34:46:78:9A:DC
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.7
saveenv
设置bootargs ,从nfs启动根文件系统:
setenv args_mmc_old 'setenv bootargs console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.7:/home/kk/imx6ull/nfs/rootfs,v3 rw ip=192.168.1.5:192.168.1.7:192.168.1.1:255.255.255.0::eth0:off'
saveenv
重启开发板等开发板启动成功后我们进入了我们编译好的 busybox 根文件系统我们看看根文件系统整体大小为 du -sh
可以看到使用Busybox编译的文件系统仅占 1.5M,虽然占用空间是小了,但是功能也非常少,若要编译其他程序的话需要手工下载、编译,如果它需要某些依赖库,你还需要手工下载、编译这些依赖库。如果想做一个极简的文件系统,可以使用Busybox手工制作。
至此,Linux“三巨头”Uboot、kernel、以及根文件系统已经全部介绍完了, U-Boot、 Linux kernel 和 rootfs 这三者一起构成了一个完整的 Linux 系统。看完前边的文章,应该大体了解linux系统的组成部分,以及每个部分所扮演的角色。本系列文章重在快速入门linux系统组成结构,更加详细的内容,将以专题的形式展现。
前边内容以快速了解为主,没有太多的代码讲解,后边将学习linux系统的驱动开发,会开始以大量的代码形式讲解。