一步步完善rootfs:1.移植busybox生成最小的rootfs

本文详细介绍了BusyBox 1.29.2版本的下载、配置、编译及安装过程,特别关注于解决编译错误和正确配置交叉编译工具链。通过nfs方式成功挂载并运行最小根文件系统,展示了如何在嵌入式系统中使用BusyBox。

一、下载

https://busybox.net/downloads/
我下载的版本为1.29.2。


二、配置

在busybox的根目录下修改Makefile文件,将ARCH修改为arm,CROSS_COMPILE修改为/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-(对应我的交叉编译工具链所在位置)。
这里写图片描述
执行make menuconfig命令进行配置,1.29.2为目前最新版本,(NEW)代表默认值,并不需要再去更改;老版本busybox的参数需要自己更改。

Settings  ---> 
	[*] Build static binary (no shared libs) 	
	[*] Command line editing
		[*]   vi-style line editing commands
		
Linux Module Utilities  --->
	[ ] Simplified modutils
	[*]depmod (NEW)
	[*]insmod (NEW)
	[*]lsmod (NEW)
	[*]modprobe (NEW)
	[*]rmmod (NEW)
	
Linux System Utilities  --->
	[*] mdev (16 kb) (NEW)
	[*]   Support /etc/mdev.conf (NEW)
	[*]     Support subdirs/symlinks (NEW)
	[*]       Support regular expressions substitutions when renaming device (NEW)
	[*]     Support command execution at device addition/removal (NEW)
	[*]   Support loading of firmware (NEW)

三、编译安装

这时make进行编译链接,我这里提示了几个错误,主要信息是下图中圈起来的内容,提示没有定义’setns’和’syncfs’。解决办法有两个,一种是更换编译工具;另外一种是menuconfig屏蔽掉相关配置,不进行编译链接。
这里写图片描述
第二种方法相对简单一点,menuconfig中屏蔽相关配置的步骤是:

Coreutils  --->
	[ ] sync (769 bytes)
Linux System Utilities  ---> 
	[ ] nsenter (8.6 kb)

这样make后就不会报错了,接下来进行安装。make install这种方式是源码安装,需要指定安装路径,不指定的话会有一个默认路径,如果默认路径在ubuntu根目录下,这时候安装会把ubuntu的系统文件覆盖,那就完啦!不过默认路径并不在ubuntu根目录,查看并修改安装路径的的方法是进入menuconfig,找到Settings —> (/root/rootfs_zht/rootfs) Destination path for 'make install',当前显示的路径为默认路径,修改为自己的就行了。

make install安装完成后即可看到指定目录下面生成了几个文件夹,即最小的根文件系统。

①linuxrc是一个可执行的应用程序。属于应用层,和内核源码没关系;在开发板内核系统下可执行;linuxrc只能静态编译,属于内核态过渡到用户态的第一个程序;②linuxrc负责执行时引出用户界面;③负责系统启动后的配置;④linuxrc在嵌入式系统中一般是busybox。


四、挂载运行

采用了nfs方式挂载rootfs,可以看到成功挂载并且成功运行。

在这里插入图片描述


参考资料: 朱老师嵌入式linux

### 问题分析与解决方案 在使用 `tar -xf rootfs.tar.gz` 命令解压文件时,出现 `Cannot open: No such file or directory` 错误的原因通常与以下因素有关:文件路径错误、文件不存在或权限不足。以下是针对该问题的详细分析和解决方案。 #### 1. 文件路径错误 确保当前目录下确实存在 `rootfs.tar.gz` 文件。可以通过以下命令检查: ```bash ls -l rootfs.tar.gz ``` 如果文件不存在,则需要确认文件的实际位置,并切换到正确的目录或指定完整路径[^1]。 #### 2. 文件名拼写错误 检查文件名是否正确。例如,文件可能是 `rootfs.tar` 而非 `rootfs.tar.gz`。可以使用以下命令列出所有 `.tar` 或 `.gz` 文件: ```bash ls *.tar *.gz ``` #### 3. 权限不足 即使文件存在,也可能由于权限不足导致无法访问。可以通过以下命令检查文件权限: ```bash ls -l rootfs.tar.gz ``` 如果权限不足,可以使用 `chmod` 命令更改文件权限: ```bash chmod 644 rootfs.tar.gz ``` #### 4. 文件损坏 如果文件已损坏,`tar` 命令可能无法打开它。可以尝试验证文件完整性: ```bash gzip -t rootfs.tar.gz ``` 如果文件损坏,需重新下载或获取正确的压缩包[^2]。 #### 5. 使用绝对路径 如果不确定当前目录是否正确,可以使用文件的绝对路径执行解压命令。例如: ```bash tar -xf /path/to/rootfs.tar.gz ``` #### 6. 检查 tar 工具版本 某些旧版本的 `tar` 工具可能不支持特定的压缩格式。可以通过以下命令检查 `tar` 版本: ```bash tar --version ``` 如果版本过旧,建议更新 `tar` 工具[^3]。 --- ### 示例代码 以下是一个完整的解压操作示例,包含权限检查和路径验证: ```bash # 检查文件是否存在 if [ ! -f "rootfs.tar.gz" ]; then echo "Error: File 'rootfs.tar.gz' not found." exit 1 fi # 检查文件权限 if [ ! -r "rootfs.tar.gz" ]; then echo "Error: File 'rootfs.tar.gz' is not readable." chmod 644 rootfs.tar.gz fi # 解压文件 tar -xf rootfs.tar.gz ``` --- ### 总结 通过以上方法,可以有效解决 `tar -xf rootfs.tar.gz Cannot open No such file or directory` 的问题。确保文件路径正确、文件存在、权限充足且工具版本兼容是关键步骤[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值