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 官方网站下载。

在这里插入图片描述

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

在这里插入图片描述


2、修改Makefile

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

在这里插入图片描述


3、make menuconfig 进行配置

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

在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述


4、make 然后 make install

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

编译错误:

在这里插入图片描述


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

在这里插入图片描述


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

在这里插入图片描述


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

在这里插入图片描述


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


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

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

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

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


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

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

在这里插入图片描述


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

在这里插入图片描述


再次 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》.

在这里插入图片描述

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 看效果。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


(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 什么意思。


源自朱有鹏老师.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将Linux系统移植ARM架构上,需要执行以下步骤: 1. 确定ARM处理器型号:首先要确定目标ARM处理器的具体型号,因为不同的处理器可能需要不同的内核和驱动支持。 2. 获取Linux内核源代码:从Linux官方网站或其他可靠的源获取适用于目标ARM处理器的Linux内核源代码。 3. 配置内核:根据目标ARM处理器的需求,对内核进行适当配置。这包括选择适当的内核选项、驱动程序和文件系统。 4. 交叉编译工具链:获取适用于ARM架构的交叉编译工具链,并进行安装和配置。这个工具链将用于在x86或其他架构主机上生成ARM平台所需的二进制文件。 5. 编译内核:使用交叉编译工具链编译内核源代码。这将生成适用于ARM平台的内核映像文件。 6. 制作根文件系统:创建适用于ARM平台的根文件系统。可以使用BusyBox等工具来构建一个精简的根文件系统,或者使用已有的根文件系统。 7. 引导加载程序:获取适用于目标ARM处理器的引导加载程序(bootloader),并将其配置为引导Linux内核。 8. 烧录映像文件:将编译好的内核映像文件和根文件系统映像文件烧录到目标ARM设备的存储介质上。 以上是Linux系统移植ARM架构上的基本步骤,具体的操作步骤可能因为不同的ARM平台和Linux发行版而有所差异。在进行移植过程中,可能需要编写或调整设备驱动程序以确保系统的完整功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值