ARM busybox 的移植实战1


前言

先逐步构建 “文件夹形式”的根文件系统,然后制作烧录镜像。

(1) rootfs 有 2 种格式:nfs 方式启动的 “文件夹形式” 的 rootfs,和用来烧录的镜像形式的 rootfs。


(2) 我们先从空文件夹开始,逐步向其中添加一些 rootfs 中必备的东西,然后做一步就用 nfs 方式去挂载启动,观察启动后的现象,并且理论上去分析原因。


一、busybox 的移植实战

1、busybox源码下载

(1) busybox 是一个开源项目,所以源代码可以直接从网上下载。

(2) busybox 的版本差异不大,版本新旧无所谓。

(3) 下载 busybox 可以去 linuxidc 等镜像网站,也可以去 www.busybox.net 官方网站下载。

ARM busybox 的移植实战1_第1张图片

https://www.windowszj.net/pcsoft/youxi/25291.html

在这里插入图片描述


2、修改Makefile

(1) ARCH = arm
(2) CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin//arm-linux-

ARM busybox 的移植实战1_第2张图片


3、make menuconfig 进行配置

(1) 参照网盘中章节目录下的《busybox menuconfig配置.txt》文件中的记录进行配置。

ARM busybox 的移植实战1_第3张图片

ARM busybox 的移植实战1_第4张图片


ARM busybox 的移植实战1_第5张图片

ARM busybox 的移植实战1_第6张图片


ARM busybox 的移植实战1_第7张图片

ARM busybox 的移植实战1_第8张图片


ARM busybox 的移植实战1_第9张图片

ARM busybox 的移植实战1_第10张图片


4、make 然后 make install

(1) make 编译,如果有错误就去解决。

编译错误:

ARM busybox 的移植实战1_第11张图片


在 Kbuild 查看这个文件的编译配置:

ARM busybox 的移植实战1_第12张图片


在 make menuconfig 命令中,取消这个 sync 的选中。

ARM busybox 的移植实战1_第13张图片


最后重新编译,解决问题。

ARM busybox 的移植实战1_第14张图片


(2) 编译完成后,需要执行 make install 安装 busybox。make install 执行的时候,其实是在执行 busybox 顶层目录下的一个目标 install。


(3) make install 在所有的 linux 下的软件中,作用都是安装软件。

在传统的 linux 系统中安装软件时,都是选择源代码方式安装的。我们下载要安装的软件源代码,然后配置、编译、安装。make install 的目的就是,将编译生成的可执行程序及其依赖的库文件、配置文件、头文件安装到当前系统中指定(一般都可以自己指定安装到哪个目录下,如果不指定一般都有个默认目录)的目录下。

busybox 源代码指定的安装路径:

ARM busybox 的移植实战1_第15张图片


ARM busybox 的移植实战1_第16张图片


ARM busybox 的移植实战1_第17张图片

ARM busybox 的移植实战1_第18张图片

在这里插入图片描述


(4) 重新进行安装,安装到我们需要的 rootfs 根文件系统目录下。

首先,清空原始的 rootfs 根文件系统目录。

ARM busybox 的移植实战1_第19张图片


修改安装目录为我们指定的根文件系统路径:/home/aston/workspace/porting_x210/rootfs/rootfs

ARM busybox 的移植实战1_第20张图片


再次 make install,之后可以看到, busybox 安装到了我们指定的路径:/home/aston/workspace/porting_x210/rootfs/rootfs

在这里插入图片描述


5、设置 bootargs 挂载添加了 busybox 移植的 rootfs

(1) 之前建立了一个空的文件夹,然后自己 touch linuxrc 随便创建了一个不能用的 /linuxrc,然后去 nfs 挂载 rootfs,实验结果是:挂载成功,执行 /linuxrc 失败。


(2) 现在我们移植了 busybox 后,/linuxrc 就可以用了,然后再次去 nfs 挂载这个 rootfs。预计看到的效果是:挂载成功,执行 /linuxrc 也能成功。


(3) 注意 uboot 的 bootargs 设置成:

setenv bootargs root=/dev/nfs nfsroot=192.168.1.141:/home/aston/workspace/porting_x210/rootfs/rootfs ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off  init=/linuxrc console=ttySAC2,115200 

(4) 实验结果:挂载成功,执行 /linuxrc(也就是 busybox)成功,但是因为找不到 /etc/init.d/rcS 和 /dev/tty2 等文件,所以一直在打印错误提示信息,但是其实有进入命令行。


三、inittab 详解

1、添加一个典型的 inittab

(1) 将网盘提供的典型的 inittab 文件,复制到我们制作的 rootfs 的根目录下的 /etc/ 目录下。

网盘文件的位置:《课件&代码\课件\2.uboot和linux内核移植\2.19.根文件系统构建实验及过程详解\etc》.

ARM busybox 的移植实战1_第21张图片

root@ubuntu:/home/aston/workspace/porting_x210/rootfs/rootfs/etc# cat inittab 
#first:run the system script file
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:-/sbin/reboot
#umount all filesystem
::shutdown:/bin/umount -a -r
#restart init process
::restart:/sbin/init

root@ubuntu:/home/aston/workspace/porting_x210/rootfs/rootfs/etc# 


(2) 再次启动内核,挂载这个 rootfs 看效果。

ARM busybox 的移植实战1_第22张图片

ARM busybox 的移植实战1_第23张图片

ARM busybox 的移植实战1_第24张图片


(3) 实验现象是成功启动,并且挂载 rootfs 进入了控制台命令行。当前制作的最小 rootfs 成功了。


2、inittab 格式解析

(1) inittab 的工作原理就是,被 /linuxrc(也就是 busybox)执行时所调用 起作用。


(2) inittab 在 /etc 目录下,所以属于一个运行时配置文件,是文本格式的(内容是由一系列的遵照一个格式组织的字符组成的)。实际工作的时候,busybox 会(按照一定的格式)解析这个 inittab 文本文件,然后根据解析的内容来决定要怎么工作。

#first:run the system script file
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:-/sbin/reboot
#umount all filesystem
::shutdown:/bin/umount -a -r
#restart init process
::restart:/sbin/init

(3) busybox 究竟如何完成解析,并且解析结果如何去工作(busybox 中实现 /etc/inittab 的原理)并不是我们的目标,我们的重点是 inittab 的格式究竟怎样的?我们看到一个 inittab 后,怎么去分析这个 inittab 对启动的影响。


(4) inittab 的格式在 busybox 中定义的,网上可以搜索到详细的格式说明,具体去参考即可:

#first:run the system script file
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:-/sbin/reboot
#umount all filesystem
::shutdown:/bin/umount -a -r
#restart init process
::restart:/sbin/init

第一个:“#” 开始的行是注释。

第二个:冒号在里面的角色是 分隔符,分隔开各个部分。

第三个:inittab 内容是以行为单位的,行与行之间没有关联;每行都是一个独立的配置项,每一个配置项表示一个具体的含义。

第四个:每一行的配置项都是由 3 个冒号分隔开的 4 个配置值共同确定的。这 4 个配置值就是 “id:runlevels:action:process”。

值得注意的是,有些配置值可以空缺,空缺后冒号不能空缺,所以有时候会看到连续 2 个冒号。

第五个:每一行的配置项中,4 个配置值中最重要的是 action 和 process。action 是一个条件/状态,process 是一个可被执行的程序的 pathname。合起来的意思就是:当满足 action 的条件时,就会执行 process 这个程序。

注意:理解 inittab 的关键就是,明白 “当满足 action 的条件时,就会执行 process 这个程序。”

你去分析 busybox 的源代码就会发现,busybox 最终会进入一个死循环,在这个死循环中,去反复检查是否满足各个 action 的条件,如果某个 action 的条件满足,就会去执行对应的 process。

第六个:明白各个 action 什么意思。


源自朱有鹏老师.

你可能感兴趣的:(linux,内核驱动,ARM,S5PV210,朱有鹏,linux,ARM,s5pv210,busybox,kernel)