通过busybox制作根文件系统详细过程
我在之前的uboot通过NFS挂载ubuntu根文件系统中也有实现过根文件系统的制作,那只是在ubuntu官网已经做好的根文件基础上安装一些自己所需的软解而已。而使用busybox制作根文件系统可以自定义选项,加深自己对linux的系统理解,方便后期学习根文件系统的裁剪。
一、下载busybox制作制作工具
官网下载地址https://busybox.net/,进入“Download Source”下载连接

根据自己的需要下载相应的版本,我下载的是“busybox-1.33.1.tar.bz2 ”。
二、编译链配置
将下载的文件放入linux开发环境中进行解压,目录如下图所示

为了以后使用方便,修改交叉工具链,进入“Makefile”文件
sudo vim Makefile
进入文件后修改“ARCH”和“CROSS_COMPILE”变量,如下图所示:

注意:交叉编译链一定要是自己安装的全路径
三、busybox中文支持
1.修改“printable_string.c”文件
sudo vim libbb/printable_string.c
进入文件后修改内容如下图所示:

2.修改“unicode.c”文件
sudo vim libbb/unicode.c
进入文件后修改内容如下图所示:

四、配置busybox
1.设置配置项
defconfig:缺项配置,也就是默认配置选项。
allyesconfig:全选配置,也就是说选中busybox的所有功能。
allnoconfig:最小配置。
可以根据自己需要选择配置命令,这里我选用的是最下配置命令如下
sudo make defconfig
配置完成后可通过查看是否有.config文件,如果存在则说明配置成功,如下图所示:

2.进入图形配置
sudo make menuconfig
进入图形配置界面后,配置库文件来源,配置路径如下所示
-> Settings
-> Build static binary
使用静态库时,编译出来的文件很大,然后编译出来的DNS会出问题,所以我这里选用的是动态库,配置如下图所示:

勾选“vi-style line editing commands”,配置路径如下
-> Settings
-> vi-style line editing commands
取消“Simplified modutils”的勾选,配置路径如下
-> Linux Module Utilities
-> Simplified modutils
勾选“mdev”,配置路径如下
-> Linux System Utilities
-> mdev
如下图所示:

勾选“Support Unicode”及其子选项“Check $LC_ALL, $LC_CTYPE and $LANG environment variables”
-> Settings
-> Support Unicode
-> Check $LC_ALL, $LC_CTYPE and $LANG environment variables
到此busybox的配置基本完成,如果需要其他配置项的内容可根据自己的需求选择。
五、编译busybox
编译时指定生成的根文件系统的存放路径
make install CONFIG_PREFIX=/home/nfs/rootfs
编译完成后会出下图中的结果说明编译成功,如果所示:

此时,进入生成的根文件路径下可以看到相应的目录生成,如下图所示:

此时看到的根文件系统是不完全的,因为我选择的库文件是动态库,所以还需要将库文件加入系统中。
六、添加动态库文件
1.在生成的根文件目录下创建lib文件夹
mkdir lib
将交叉编译链arm-linux-gnueabihe/libc/lib下的所有so和.a文件拷贝到刚才创建的lib文件下
cp *so* *.a /home/nfs/rootfs/lib -d
将刚拷贝过来放在lib目录下的ld-linux-armhf.so.3的软链接改为源文件,首先删除文件
rm ld-linux-armhf.so.3
然后重新在交叉编译链arm-linux-gnueabihe/libc/lib下将文件拷贝过来
cp ld-linux-armhf.so.3 /home/nfs/rootfs/lib
将交叉编译链arm-linux-gnueabihe/lib下的所有so和.a文件拷贝到刚才创建的lib文件下
cp *so* *.a /home/nfs/rootfs/lib -d
2.在生成的根文件目录下创建usr/lib文件夹
cd ../
mkdir usr/lib
cd usr/lib
ls
将交叉编译链arm-linux-gnueabihe/libc/usr/lib下的所有so和.a文件拷贝到刚才创建的lib文件下
cp *so* *.a /home/nfs/rootfs/usr/lib -d
到此动态库文件已经拷贝完成,可以通过du命令查看刚才拷贝文件的大小
cd ../../
du ./lib ./usr/lib
如下图所示:

3.创建其他文件夹
mkdir dev proc mnt sys tmp root
目录如下图所示:

现在我们的根文件系统就基本制作完成了,接下来测试我们制作的根文件是否能用。
七、测试
测试方式推荐使用NFS的形式挂载根文件系统,由于之间我有写过一篇文章,这里就不过多介绍了,具体流程见uboot通过NFS挂载ubuntu根文件系统
挂载根文件系统启动后,见如下图信息,则说明成功:

启动后虽然能正常使用,但是会提示缺少'rcS'文件,需要在/etc/init.d/路径下创建rcS文件,如果路径不存在,创建相应的文件即可
1.rvS文件
#! /bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/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
完成后重启开发版,又会出现缺少fstab文件,同样的方式在/etc路径下创建fstab文件
2.fstab文件
# <file system> <dir> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
完成后在此重启,这次虽然没错误提示,还需要在/etc路径下创建inittab文件
3.inittab文件
#etc/inittab
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swqpoff -a
到此简单的根文件系统已经制作完成,可以进行系统的烧写。
八、问题与处理
1.打开图形配置界面时,可能出现的问题如下图所示:

解决办法,错误主要是没有安装ncurses导致的,只需要进行安装即可
sudo apt-get install libncurses5-dev
九、参考连接
原子哥视频教程https://www.bilibili.com/video/BV12E411h71h?p=44&spm_id_from=pageDriver
通过busybox制作根文件系统详细过程的更多相关文章
- 通过busybox制作根文件系统
通过busybox制作根文件系统可以自定义选项,在制作的根文件系统中添加需要的命令,指定生成的根文件系统到相应的目录下. 一. 根文件系统的获取方式--->官网: https://busybox ...
- zju(4)使用busybox制作根文件系统
1.实验目的 1.学习和掌握busybox相关知识及应用: 2.学会使用交叉编译器定制一个busybox: 3.利用该busybox制作一个文件系统: 4.熟悉根文件系统组织结构: 5.定制.编译ra ...
- 利用busybox制作根文件系统
实际项目中可以使用Buildroot制作根文件系统 1.busybox源码下载及配置 https://busybox.net/downloads/ 1.1.修改Makefile (1) ARCH = ...
- 使用BusyBox制作根文件系统【转】
本文转载自:http://www.cnblogs.com/lidabo/p/5300180.html 1.BusyBox简介 BusyBox 是很多标准 Linux 工具的一个单个可执行实现.Busy ...
- 使用BusyBox制作根文件系统
1.BusyBox简介 BusyBox 是很多标准 Linux 工具的一个单个可执行实现.BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大.更复杂的工具,例如 gre ...
- tiny4412 busybox制作根文件系统rootfs nfs 挂载 ubuntu 14.04
http://blog.csdn.net/liudijiang/article/details/50555429(转) 首先得要有制作好的uboot和linux内核镜像zImage,先烧录到sd卡里, ...
- Linux 利用busybox制作根文件系统
busybox版本:1.17.3 官网下载路径:https://busybox.net/downloads/ 网盘下载路径:https://pan.baidu.com/s/1nvrEa73 密码:7y ...
- 第4阶段——制作根文件系统之分析init进程(2)
本节目标: (1) 了解busybox(init进程和命令都放在busybox中) (2) 创建SI工程,分析busybox源码来知道init进程做了哪些事情 (3) 分析busybox中init进 ...
- Busybox构建根文件系统和制作Ramdisk
定制根文件系统的方法很多,最常用的是使用BusyBox来构建定制根文件系统.它集成压缩了Linux的许多工具和命令,可以使用户迅速方便地建立一套相对完整.功能丰富的文件系统,其中包括大量常用的应用 ...
随机推荐
- [bug] IDEA springboot项目 访问静态资源 html页面 报404
原因 复制的静态资源目录没有编译 解决 检查target目录中,是否有static目录,若没有,重新右键项目install即可 若还不能解决,尝试浏览器缓存和IDEA编译设置,详见参考链接 参考 ht ...
- [bug] springboot 静态资源 layui.css 404
目录结构 引用路径 <link rel="stylesheet" href="../static/layui/css/layui.css" type=&q ...
- [bug] IDEA 右侧模块灰色
参考 https://blog.csdn.net/weixin_44188501/article/details/104717177
- [刷题] PTA 6-11 求自定类型元素序列的中位数 (25分)
采用希尔排序 1 #include <stdio.h> 2 3 #define MAXN 10 4 typedef float ElementType; 5 6 ElementType M ...
- Linux进阶之日志管理
一.何为日志 1.在程序执行时,可以通过标准输出以及错误输出,让我们知道程序的执行情况,而系统不可能将所有程序的输出信息一起显示,要知道后台执行的程序非常之多,如果一起显示,那我们不用操作了,整天只看 ...
- SPI认识
SPI分为好几种模式 不同模式下 读取数据时 SCK线的状态不一样 STM32硬件SPI 有16BIT 8BIT的两种模式 既 收发都是8或16bit SPI缺少响应反馈机制 无法知道 ...
- C语言关于指针函数与函数指针个人理解
1,函数指针 顾名思义,即指向函数的指针,功能与其他指针相同,该指针变量保存的是所指向函数的地址. 假如是void类型函数指针定义方式可以是 void (*f)(参数列表);亦可以先用 typedef ...
- 程序"三高"解决方案
0. 程序三高 1. 缓存 2. 预处理和延后处理 3. 池化 3.1 内存池 3.2 线程池 3.3 连接池 4. 异步(回调) 5. 消息队列 5.1 服务解耦 5.2 异步处理 5.3 流量削峰 ...
- CAP理论之思考
分布式系统的最大难点就是各个节点如何保持一致.最近我在工作中就遇到这样的问题,不同节点之间,彼此通过API,进行通信,交互数据,但有些服务节点存在延迟等问题,导致我看到的并不是实时的数据,以及系统更新 ...
- MCU,硅片,BOM
MCU,硅片,BOM BOM(Bill of Material,物料清单),就是指一个东西的各个材料的的成本价格 BOM成本要控制,有三点要注意的. 一,是否有芯片替代料,在性能不降低的情况下,替代料 ...