news 2026/4/28 20:31:23

BusyBox构建Linux根文件系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
BusyBox构建Linux根文件系统

1、准备BusyBox源码

2、在先前搭建好的nfs文件系统目录下新建rootfs文件

目的 是为了装载待会编译生成的根文件系统,后续方便Linux目标板挂载使用.

3、移植操作

3.1 解压

tar -vxjf busybox-1.29.0.tar.bz2
3.2 修改Makefile
3.3 修改中文字符支持
3.4 配置BusyBox
3.5 编译BusyBox
make
make install CONFIG_PREFIX=/home/zipeng/linux/nfs/rootfs
编译成功画面
4、向rootfs里面添加文件
4.1 向rootfs/lib里面添加文件
进入如下系统路径
/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux
gnueabihf/libc/lib
使用如下命令拷贝:
cp *so* *.a /home/zipeng/linux/nfs/rootfs/lib/ -d
进入/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm
linux-gnueabihf/libc/lib
cp ld-linux-armhf.so.3 /home/zipeng/linux/nfs/rootfs/lib/
进入如下目录 :
/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib
cp *so* *.a /home/zuozhongkai/linux/nfs/rootfs/lib/ -d
4.2rootfs的“usr/lib”目录添加库文件
rootfsusr目录下创建一个名为lib的目录,将如下目录中的库文件拷贝到rootfs/usr/lib
目录下:
/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/
usr/lib
将此目录下的so.a库文件都拷贝到rootfs/usr/lib目录中,命令如下:
cp *so* *.a /home/zipeng/linux/nfs/rootfs/usr/lib/ -d
4.3 继续创建其他文件
devprocmntsystmproot
du ./lib ./usr/lib -sh
5、测试根文件系统
重启开发板,进入uboot模式,修改bootargs变量:
setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.2.4:
/home/zipeng/linux/nfs/rootfs,proto=tcp rw ip=192.168.2.7:192.168.2.4:192.168.2.1:
255.255.255.0::eth0:off'
系统启动会报错:
5.1、创建/etc/init.d/rcS文件
rootfs中创建/etc/init.d/rcS文件
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
export PATH LD_LIBRARY_PATH
mount-a
mkdir/dev/pts
mount-t devpts devpts/dev/pts
echo/sbin/mdev> /proc/sys/kernel/hotplug
mdev-s
1行,表示这是一个shell脚本。
3行,PATH环境变量保存着可执行文件可能存在的目录,这样我们在执行一些命令或
者可执行文件的时候就不会提示找不到文件这样的错误。
4行,LD_LIBRARY_PATH环境变量保存着库文件所在的目录。
5行,使用export来导出上面这些环境变量,相当于声明一些“全局变量”。
7行,使用mount命令来挂载所有的文件系统,这些文件系统由文件/etc/fstab来指定,
所以我们一会还要创建/etc/fstab文件。
89行,创建目录/dev/pts,然后将devpts挂载到/dev/pts目录中。
1112行,使用mdev来管理热插拔设备,通过这两行,Linux内核就可以在/dev目录
给予可执行权限
chmod 777 rcS
5.2、创建/etc/fstab文件
rootfs中创建/etc/fstab文件,fstabLinux开机以后自动配置哪些需要自动挂载的分区
5.3、创建/etc/init
6、测试应用程序
编写hello.c并且编译
1#include<stdio.h>
2
3intmain(void)
4{
5while(1) {
6printf("hello world!\r\n");
7sleep(2);
8}
9return0;
10}
编译:arm-linux-gnueabihf-gcc hello.c -o hello
将hello可执行文件拷贝到drivers目录下,
cd /drivers
//进入drivers目录
./hello
//执行hello
7、开机自运行程序测试
修改开机之后运行的脚本/etc/init.d/rcS
1#!/bin/sh
2PATH=/sbin:/bin:/usr/sbin:/usr/bin
3LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
4runlevel=S
5umask022
6export PATH LD_LIBRARY_PATH runlevel
7
8mount-a
9mkdir/dev/pts
10mount-t devpts devpts/dev/pts
11
12echo/sbin/mdev> /proc/sys/kernel/hotplug
13mdev-s
14
15#开机自启动
16cd/drivers
17./hello&
18cd/
8、域名解析
rootfs中新建文件/etc/resolv.conf,然后在里面输入如下内容:​​​​​​​
1nameserver114.114.114.114
2nameserver192.168.1.1
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/28 20:26:25

Fluent蒸发冷凝模型实战:手把手教你用VOF模拟水沸腾(附避坑指南)

Fluent蒸发冷凝模型实战&#xff1a;从零开始模拟水沸腾过程 最近在实验室遇到一个有趣的现象——烧水时气泡的形成和运动。作为一名CFD初学者&#xff0c;我原本以为用Fluent模拟这个过程会很简单&#xff0c;结果却踩了不少坑。本文将分享如何从零开始搭建一个水沸腾模拟&am…

作者头像 李华
网站建设 2026/4/28 20:23:22

FoxAI浏览器扩展开发全解析:AI助手集成与定制指南

1. 项目概述与核心价值 最近在折腾浏览器扩展开发&#xff0c;发现一个挺有意思的开源项目叫 FoxAI.me&#xff0c;它本质上是一个基于 AI 的浏览器助手扩展。简单来说&#xff0c;就是你在浏览网页时&#xff0c;选中任何文本&#xff0c;都能快速调用 Gemini 或 ChatGPT 这类…

作者头像 李华
网站建设 2026/4/28 20:21:28

AI辅助全栈开发实战:构建Node.js天气与植物数据聚合API

1. 项目概述&#xff1a;一个由AI驱动的天气与植物API项目 最近在折腾一个挺有意思的Side Project&#xff0c;起因是想做一个能展示不同地方天气&#xff0c;并且还能顺便告诉你当地有什么特色植物的网页。这想法听起来简单&#xff0c;但真做起来&#xff0c;涉及到调用外部天…

作者头像 李华
网站建设 2026/4/28 20:16:48

C++ 继承的范例讲解

1.继承的概念继承&#xff0c;是面向对象的三大特性之一。继承可以理解成是类级别的一个复用&#xff0c;它允许我们在原有类的基础上进行扩展&#xff0c;增加新的功能。当创建一个类时&#xff0c;我们可以继承一个已有类的成员和方法&#xff0c;并且在原有的基础上进行提升…

作者头像 李华
网站建设 2026/4/28 20:16:44

详解C++的反调试技术与绕过手法

反调试技术的实现方式有很多&#xff0c;最简单的一种实现方式莫过于直接调用Windows系统提供给我们的API函数&#xff0c;这些API函数中有些专门用来检测调试器的&#xff0c;有些则是可被改造为用于探测调试器是否存在的工具&#xff0c;多数情况下&#xff0c;调用系统API函…

作者头像 李华