我在之前的uboot通过NFS挂载ubuntu根文件系统中也有实现过根文件系统的制作,那只是在ubuntu官网已经做好的根文件基础上安装一些自己所需的软解而已。而使用busybox制作根文件系统可以自定义选项,加深自己对linux的系统理解,方便后期学习根文件系统的裁剪。

一、下载busybox制作制作工具

官网下载地址https://busybox.net/,进入“Download Source”下载连接



根据自己的需要下载相应的版本,我下载的是“busybox-1.33.1.tar.bz2 ”。

二、编译链配置

将下载的文件放入linux开发环境中进行解压,目录如下图所示



为了以后使用方便,修改交叉工具链,进入“Makefile”文件

  1. sudo vim Makefile

进入文件后修改“ARCH”和“CROSS_COMPILE”变量,如下图所示:



注意:交叉编译链一定要是自己安装的全路径

三、busybox中文支持

1.修改“printable_string.c”文件

  1. sudo vim libbb/printable_string.c

进入文件后修改内容如下图所示:



2.修改“unicode.c”文件

  1. sudo vim libbb/unicode.c

进入文件后修改内容如下图所示:

四、配置busybox

1.设置配置项

defconfig:缺项配置,也就是默认配置选项。

allyesconfig:全选配置,也就是说选中busybox的所有功能。

allnoconfig:最小配置。

可以根据自己需要选择配置命令,这里我选用的是最下配置命令如下

  1. sudo make defconfig

配置完成后可通过查看是否有.config文件,如果存在则说明配置成功,如下图所示:



2.进入图形配置

  1. sudo make menuconfig

进入图形配置界面后,配置库文件来源,配置路径如下所示

  1. -> Settings
  2. -> Build static binary

使用静态库时,编译出来的文件很大,然后编译出来的DNS会出问题,所以我这里选用的是动态库,配置如下图所示:



勾选“vi-style line editing commands”,配置路径如下

  1. -> Settings
  2. -> vi-style line editing commands

取消“Simplified modutils”的勾选,配置路径如下

  1. -> Linux Module Utilities
  2. -> Simplified modutils

勾选“mdev”,配置路径如下

  1. -> Linux System Utilities
  2. -> mdev

如下图所示:



勾选“Support Unicode”及其子选项“Check $LC_ALL, $LC_CTYPE and $LANG environment variables”

  1. -> Settings
  2. -> Support Unicode
  3. -> Check $LC_ALL, $LC_CTYPE and $LANG environment variables

到此busybox的配置基本完成,如果需要其他配置项的内容可根据自己的需求选择。

五、编译busybox

编译时指定生成的根文件系统的存放路径

  1. make install CONFIG_PREFIX=/home/nfs/rootfs

编译完成后会出下图中的结果说明编译成功,如果所示:



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



此时看到的根文件系统是不完全的,因为我选择的库文件是动态库,所以还需要将库文件加入系统中。

六、添加动态库文件

1.在生成的根文件目录下创建lib文件夹

  1. mkdir lib

将交叉编译链arm-linux-gnueabihe/libc/lib下的所有so和.a文件拷贝到刚才创建的lib文件下

  1. cp *so* *.a /home/nfs/rootfs/lib -d

将刚拷贝过来放在lib目录下的ld-linux-armhf.so.3的软链接改为源文件,首先删除文件

  1. rm ld-linux-armhf.so.3

然后重新在交叉编译链arm-linux-gnueabihe/libc/lib下将文件拷贝过来

  1. cp ld-linux-armhf.so.3 /home/nfs/rootfs/lib

将交叉编译链arm-linux-gnueabihe/lib下的所有so和.a文件拷贝到刚才创建的lib文件下

  1. cp *so* *.a /home/nfs/rootfs/lib -d

2.在生成的根文件目录下创建usr/lib文件夹

  1. cd ../
  2. mkdir usr/lib
  3. cd usr/lib
  4. ls

将交叉编译链arm-linux-gnueabihe/libc/usr/lib下的所有so和.a文件拷贝到刚才创建的lib文件下

  1. cp *so* *.a /home/nfs/rootfs/usr/lib -d

到此动态库文件已经拷贝完成,可以通过du命令查看刚才拷贝文件的大小

  1. cd ../../
  2. du ./lib ./usr/lib

如下图所示:



3.创建其他文件夹

  1. mkdir dev proc mnt sys tmp root

目录如下图所示:



现在我们的根文件系统就基本制作完成了,接下来测试我们制作的根文件是否能用。

七、测试

测试方式推荐使用NFS的形式挂载根文件系统,由于之间我有写过一篇文章,这里就不过多介绍了,具体流程见uboot通过NFS挂载ubuntu根文件系统

挂载根文件系统启动后,见如下图信息,则说明成功:



启动后虽然能正常使用,但是会提示缺少'rcS'文件,需要在/etc/init.d/路径下创建rcS文件,如果路径不存在,创建相应的文件即可

1.rvS文件

  1. #! /bin/sh
  2. PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:$PATH
  3. LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
  4. export PATH LD_LIBRARY_PATH
  5. mount -a
  6. mkdir /dev/pts
  7. mount -t devpts devpts /dev/pts
  8. echo /sbin/mdev > /proc/sys/kernel/hotplug
  9. mdev -s

完成后重启开发版,又会出现缺少fstab文件,同样的方式在/etc路径下创建fstab文件

2.fstab文件

  1. # <file system> <dir> <type> <options> <dump> <pass>
  2. proc /proc proc defaults 0 0
  3. tmpfs /tmp tmpfs defaults 0 0
  4. sysfs /sys sysfs defaults 0 0

完成后在此重启,这次虽然没错误提示,还需要在/etc路径下创建inittab文件

3.inittab文件

  1. #etc/inittab
  2. ::sysinit:/etc/init.d/rcS
  3. console::askfirst:-/bin/sh
  4. ::restart:/sbin/init
  5. ::ctrlaltdel:/sbin/reboot
  6. ::shutdown:/bin/umount -a -r
  7. ::shutdown:/sbin/swqpoff -a

到此简单的根文件系统已经制作完成,可以进行系统的烧写。

八、问题与处理

1.打开图形配置界面时,可能出现的问题如下图所示:



解决办法,错误主要是没有安装ncurses导致的,只需要进行安装即可

  1. sudo apt-get install libncurses5-dev

九、参考连接

原子哥视频教程https://www.bilibili.com/video/BV12E411h71h?p=44&spm_id_from=pageDriver

通过busybox制作根文件系统详细过程的更多相关文章

  1. 通过busybox制作根文件系统

    通过busybox制作根文件系统可以自定义选项,在制作的根文件系统中添加需要的命令,指定生成的根文件系统到相应的目录下. 一. 根文件系统的获取方式--->官网: https://busybox ...

  2. zju(4)使用busybox制作根文件系统

    1.实验目的 1.学习和掌握busybox相关知识及应用: 2.学会使用交叉编译器定制一个busybox: 3.利用该busybox制作一个文件系统: 4.熟悉根文件系统组织结构: 5.定制.编译ra ...

  3. 利用busybox制作根文件系统

    实际项目中可以使用Buildroot制作根文件系统 1.busybox源码下载及配置 https://busybox.net/downloads/ 1.1.修改Makefile (1) ARCH = ...

  4. 使用BusyBox制作根文件系统【转】

    本文转载自:http://www.cnblogs.com/lidabo/p/5300180.html 1.BusyBox简介 BusyBox 是很多标准 Linux 工具的一个单个可执行实现.Busy ...

  5. 使用BusyBox制作根文件系统

    1.BusyBox简介 BusyBox 是很多标准 Linux 工具的一个单个可执行实现.BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大.更复杂的工具,例如 gre ...

  6. tiny4412 busybox制作根文件系统rootfs nfs 挂载 ubuntu 14.04

    http://blog.csdn.net/liudijiang/article/details/50555429(转) 首先得要有制作好的uboot和linux内核镜像zImage,先烧录到sd卡里, ...

  7. Linux 利用busybox制作根文件系统

    busybox版本:1.17.3 官网下载路径:https://busybox.net/downloads/ 网盘下载路径:https://pan.baidu.com/s/1nvrEa73 密码:7y ...

  8. 第4阶段——制作根文件系统之分析init进程(2)

    本节目标: (1) 了解busybox(init进程和命令都放在busybox中) (2) 创建SI工程,分析busybox源码来知道init进程做了哪些事情 (3)  分析busybox中init进 ...

  9. Busybox构建根文件系统和制作Ramdisk

      定制根文件系统的方法很多,最常用的是使用BusyBox来构建定制根文件系统.它集成压缩了Linux的许多工具和命令,可以使用户迅速方便地建立一套相对完整.功能丰富的文件系统,其中包括大量常用的应用 ...

随机推荐

  1. ocalhost kernel: [244840.301449] nf_conntrack: nf_conntrack: table full, dropping packet

    nf_conntrack: table full, dropping packet. 终结篇   "连接跟踪表已满,开始丢包"!相信不少用iptables的同学都会见过这个错误信息 ...

  2. 资源限制 ( resource limit 或 rlimit ),是 Linux 内核控制 用户 或 进程 资源占用的机制。

    ###### https://learn-linux.readthedocs.io/zh_CN/latest/administration/kernel/rlimit.html ########### ...

  3. Python菜鸟100例

    题目地址 #-*- codeing = utf-8 -*- #@Time : 2021/3/18 21:17 #@Author : HUGBOY #@File : 1.py #@Software: P ...

  4. 11.10 chkconfig:管理开机服务

    chkconfig 命令是Redhat系列的Linux系统中的系统服务管理工具,它可以用于查询和更新不同的运行等级下系统服务的启动状态. chkconfig命令的参数选项及说明 --list    显 ...

  5. vue项目使用百度地图API获取经纬度

    一.首先在百度api注册获得ak密钥 二.进行引入 (1).第一种方式: 直接在vue中index.html中用script标签引入. //你的ak密钥需要替换真实的你的ak码 <script ...

  6. 前端工具 | JS编译器Monaco使用教程

    前言 我的需求是可以语法高亮.函数提示功能.自动换行.代码折叠 Monaco Monaco是微软家的,支持的语言很多,还有缩略地图,有时候提示不好用然后包体很大. The Monaco Editor ...

  7. Action4D:人群和杂物中的在线动作识别:CVPR209论文阅读

    Action4D:人群和杂物中的在线动作识别:CVPR209论文阅读 Action4D: Online Action Recognition in the Crowd and Clutter 论文链接 ...

  8. [源码解析] 深度学习分布式训练框架 horovod (2) --- 从使用者角度切入

    [源码解析] 深度学习分布式训练框架 horovod (2) --- 从使用者角度切入 目录 [源码解析] 深度学习分布式训练框架 horovod (2) --- 从使用者角度切入 0x00 摘要 0 ...

  9. 剑指 Offer 04. 二维数组中的查找

    链接:https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/ 标签:数组.双指针.二分 题目 在一个 n * m ...

  10. 137. 只出现一次的数字 II

    2021-04-30 LeetCode每日一题 链接:https://leetcode-cn.com/problems/single-number-ii/ 方法1:使用map记录每个数出现的次数,再找 ...