使用Busybox制作根文件系统

简介: 使用Busybox制作根文件系统

使用Busybox手工制作

Busybox本身包含了很了Linux命令,但是要编译其他程序的话需要手工下载、编译,如果它需要某些依赖库,你还需要手工下载、编译这些依赖库。

如果想做一个极简的文件系统,可以使用Busybox手工制作。

制作步骤

一、下载

busybox官方:https://busybox.net/

下载地址:

https://busybox.net/downloads/

可以下载一个最新的版本,下载好之后,放到Linux中

二、配置环境&生成命令

解压出来

zh@zh-lpc:~/soft$ cd software/
zh@zh-lpc:~/soft/software$ ls
busybox-1.34.0.tar.bz2  
zh@zh-lpc:~/soft/software$
zh@zh-lpc:~/soft/software$ tar xvf busybox-1.34.0.tar.bz2

解压之后进入到解压后的目录中:

zh@zh-lpc:~/soft/software$
zh@zh-lpc:~/soft/software$ cd busybox-1.34.0/
zh@zh-lpc:~/soft/software/busybox-1.34.0$ pwd
/home/zh/soft/software/busybox-1.34.0
zh@zh-lpc:~/soft/software/busybox-1.34.0$

修改Makefile

先留一手,修改之前,先备份一下

cp -p Makefile Makefile_bak

找到ARCH变量,修改如下:


         

修改后的:

修改CROSS_COMPILE变量

可以看到我的交叉编译工具的前缀是arm-linux-gnueabi-

修改如下:

配置busybox

make defconfig

在配置busybox-1.34.0版本的时候,出现:

我的交叉编译工具是4.9的,所以是没有这一条命令的,

此时你可以下载更高版本的交叉编译工具,或者更低版本的busybox,据我所知,这个版本是的交叉编译工具的命令是没有变化的。

下载一个更高版本的交叉编译工具

配置一下环境变量

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
export PATH=$PATH:/home/zh/soft/linux_tools/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin

快速生效

source ~/.bashrc

重新执行make defconfig即可。

也可以使用图形化配置make menuconfig

报错了

zh@zh-lpc:~/soft/software/busybox-1.34.0$ make menuconfig
  HOSTCC  scripts/kconfig/lxdialog/checklist.o
<command-line>: fatal error: curses.h: 没有那个文件或目录
compilation terminated.
make[2]: *** [scripts/Makefile.host:120:scripts/kconfig/lxdialog/checklist.o] 错误 1
make[1]: *** [/home/zh/soft/software/busybox-1.34.0/scripts/kconfig/Makefile:14:menuconfig] 错误 2
make: *** [Makefile:448:menuconfig] 错误 2
zh@zh-lpc:~/soft/software/busybox-1.34.0$
zh@zh-lpc:~/soft/software/busybox-1.34.0$

解决办法:

这时因为系统中缺少一个套件 ncurses devel ,把此套件安装下即可

Ubuntu中使用如下命令安装即可,其他系统可以参考。

sudo apt-get install ncurses-dev -y

安装之后再次执行即可看到图形化的配置界面

1、Settings

按回车即可进入

2、选择Build Options选择编译成静态库

3、然后按esc即可退出,退出时提示保存,确定即可

4、编译

如果觉得自己电脑线程数够用的话,可以适当调大或减小

make -j12

编译完成:

5、安装

make install

可以看到都放到了_install目录下

可以看到里面的bin目录下生成了一些常见的linux shell命令。

zh@zh-lpc:~/soft/software/busybox-1.34.0$ cd _install/
zh@zh-lpc:~/soft/software/busybox-1.34.0/_install$ ls
bin  linuxrc  sbin  usr
zh@zh-lpc:~/soft/software/busybox-1.34.0/_install$
zh@zh-lpc:~/soft/software/busybox-1.34.0/_install$ ls bin/
arch     chmod     df             fatattr  hostname  linux32   mkdir       mv             ps         run-parts     stat    uname
ash      chown     dmesg          fdflush  hush      linux64   mknod       netstat        pwd        scriptreplay  stty    usleep
base32   conspy    dnsdomainname  fgrep    ionice    ln        mktemp      nice           reformime  sed           su      vi
base64   cp        dumpkmap       fsync    iostat    login     more        pidof          resume     setarch       sync    watch
busybox  cpio      echo           getopt   ipcalc    ls        mount       ping           rev        setpriv       tar     zcat
cat      cttyhack  ed             grep     kbd_mode  lsattr    mountpoint  ping6          rm         setserial     touch
chattr   date      egrep          gunzip   kill      lzop      mpstat      pipe_progress  rmdir      sh            true
chgrp    dd        false          gzip     link      makemime  mt          printenv       rpm        sleep         umount
zh@zh-lpc:~/soft/software/busybox-1.34.0/_install$
zh@zh-lpc:~/soft/software/busybox-1.34.0/_install$

现在命令已经生成了

三、拷贝必要的库文件

1、首先在自己习惯的位置,创建一个rootfs目录

zh@zh-lpc:~$ cd soft/linux_tools/
zh@zh-lpc:~/soft/linux_tools$
zh@zh-lpc:~/soft/linux_tools$ mkdir rootfs

2、把生成的所有文件都拷贝到创建好的rootfs目录下

zh@zh-lpc:~/soft/linux_tools/rootfs$
zh@zh-lpc:~/soft/linux_tools/rootfs$ cp -arf ~/soft/software/busybox-1.34.0/_install/* ./
zh@zh-lpc:~/soft/linux_tools/rootfs$
zh@zh-lpc:~/soft/linux_tools/rootfs$ pwd
/home/zh/soft/linux_tools/rootfs
zh@zh-lpc:~/soft/linux_tools/rootfs$ ls
bin  linuxrc  sbin  usr
zh@zh-lpc:~/soft/linux_tools/rootfs$
zh@zh-lpc:~/soft/linux_tools/rootfs$

3、把Linux中用到的一些库文件拷贝到rootfs/lib目录下

3-1:创建lib目录

zh@zh-lpc:~/soft/linux_tools/rootfs$ ls
bin  linuxrc  sbin  usr
zh@zh-lpc:~/soft/linux_tools/rootfs$
zh@zh-lpc:~/soft/linux_tools/rootfs$ mkdir lib
zh@zh-lpc:~/soft/linux_tools/rootfs$
zh@zh-lpc:~/soft/linux_tools/rootfs$ ls
bin  lib  linuxrc  sbin  usr
zh@zh-lpc:~/soft/linux_tools/rootfs$

可以先看一下自己库所在位置

可以看到有很多常用的库文件

3-2:拷贝过来

zh@zh-lpc:~/soft/linux_tools/rootfs$ cp -arf /home/zh/soft/linux_tools/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/lib/* ./lib/

四、创建字符设备

底层与用户交互的文件

先创建一个dev目录,用来存放各种节点

zh@zh-lpc:~/soft/linux_tools/rootfs$ mkdir dev
zh@zh-lpc:~/soft/linux_tools/rootfs$
zh@zh-lpc:~/soft/linux_tools/rootfs$ ls
bin  dev  lib  linuxrc  sbin  usr
zh@zh-lpc:~/soft/linux_tools/rootfs$
zh@zh-lpc:~/soft/linux_tools/rootfs$ cd dev/
zh@zh-lpc:~/soft/linux_tools/rootfs/dev$
zh@zh-lpc:~/soft/linux_tools/rootfs/dev$ sudo mknod -m 666 tty1 c 4 1
[sudo] zh 的密码:
zh@zh-lpc:~/soft/linux_tools/rootfs/dev$
zh@zh-lpc:~/soft/linux_tools/rootfs/dev$
zh@zh-lpc:~/soft/linux_tools/rootfs/dev$ sudo mknod -m 666 tty2 c 4 2
zh@zh-lpc:~/soft/linux_tools/rootfs/dev$
zh@zh-lpc:~/soft/linux_tools/rootfs/dev$ sudo mknod -m 666 tty3 c 4 3
zh@zh-lpc:~/soft/linux_tools/rootfs/dev$
zh@zh-lpc:~/soft/linux_tools/rootfs/dev$ sudo mknod -m 666 tty4 c 4 4
zh@zh-lpc:~/soft/linux_tools/rootfs/dev$
zh@zh-lpc:~/soft/linux_tools/rootfs/dev$
zh@zh-lpc:~/soft/linux_tools/rootfs/dev$ sudo mknod -m 666 console c 5 1
zh@zh-lpc:~/soft/linux_tools/rootfs/dev$
zh@zh-lpc:~/soft/linux_tools/rootfs/dev$ sudo mknod -m 666 null c 1 3
zh@zh-lpc:~/soft/linux_tools/rootfs/dev$
zh@zh-lpc:~/soft/linux_tools/rootfs/dev$ ls
console  null  tty1  tty2  tty3  tty4
zh@zh-lpc:~/soft/linux_tools/rootfs/dev$

五、启动测试

在开发板上指定rootfs的目录,即可启动成功,有一些错误不必担心

can’t run ‘/etc/init.d/rcS’: No such file or directory

这个错误可以直接创建一个即可

zh@zh-lpc:~/soft/linux_tools/rootfs$ mkdir init.d
zh@zh-lpc:~/soft/linux_tools/rootfs$ cd init.d/
zh@zh-lpc:~/soft/linux_tools/rootfs/init.d$
zh@zh-lpc:~/soft/linux_tools/rootfs/init.d$ touch rcS
zh@zh-lpc:~/soft/linux_tools/rootfs/init.d$
zh@zh-lpc:~/soft/linux_tools/rootfs/init.d$ chmod 777 rcS
zh@zh-lpc:~/soft/linux_tools/rootfs/init.d$
zh@zh-lpc:~/soft/linux_tools/rootfs/init.d$ vim rcS
zh@zh-lpc:~/soft/linux_tools/rootfs/init.d$
zh@zh-lpc:~/soft/linux_tools/rootfs/init.d$ cat rcS
echo "Hello zheng hui"
zh@zh-lpc:~/soft/linux_tools/rootfs/init.d$
zh@zh-lpc:~/soft/linux_tools/rootfs/init.d$ ls -l
总用量 4
-rwxrwxrwx 1 zh zh 23 9月  25 20:16 rcS
zh@zh-lpc:~/soft/linux_tools/rootfs/init.d$
zh@zh-lpc:~/soft/linux_tools/rootfs/init.d$ cd ..
zh@zh-lpc:~/soft/linux_tools/rootfs$ ls
bin  dev  init.d  lib  linuxrc  sbin  usr
zh@zh-lpc:~/soft/linux_tools/rootfs$
zh@zh-lpc:~/soft/linux_tools/rootfs$ mkdir etc
zh@zh-lpc:~/soft/linux_tools/rootfs$
zh@zh-lpc:~/soft/linux_tools/rootfs$ mv init.d etc/
zh@zh-lpc:~/soft/linux_tools/rootfs$
zh@zh-lpc:~/soft/linux_tools/rootfs$ ls etc/
init.d
zh@zh-lpc:~/soft/linux_tools/rootfs$

再次启动后可以看到:

目录
相关文章
|
机器学习/深度学习 弹性计算 TensorFlow
阿里云GPU加速:大模型训练与推理的全流程指南
随着深度学习和大规模模型的普及,GPU成为训练和推理的关键加速器。本文将详细介绍如何利用阿里云GPU产品完成大模型的训练与推理。我们将使用Elastic GPU、阿里云深度学习镜像、ECS(云服务器)等阿里云产品,通过代码示例和详细说明,带你一步步完成整个流程。
3762 0
|
Java Unix Linux
【Netty技术专题】「原理分析系列」Netty强大特性之Native transports扩展开发实战
当涉及到网络通信和高性能的Java应用程序时,Netty是一个强大的框架。它提供了许多功能和组件,其中之一是JNI传输。JNI传输是Netty的一个特性,它为特定平台提供了高效的网络传输。 在本文中,我们将深入探讨Netty提供的特定平台的JNI传输功能,分析其优势和适用场景。我们将介绍每个特定平台的JNI传输,并讨论其性能、可靠性和可扩展性。通过了解这些特定平台的JNI传输,您将能够更好地选择和配置适合您应用程序需求的网络传输方式,以实现最佳的性能和可靠性。
360 7
【Netty技术专题】「原理分析系列」Netty强大特性之Native transports扩展开发实战
|
JavaScript 前端开发 安全
深入理解 JDK 1.8 新特性
深入理解 JDK 1.8 新特性
460 2
|
7月前
|
JSON API 数据安全/隐私保护
农业银行模拟器,工商建设邮政中国银行,虚拟余额生成模拟器
这个银行模拟系统包含三个主要模块:核心银行账户逻辑、图形用户界面和REST API接口
|
API 数据安全/隐私保护 开发者
京东商品评论数据接口(JD.item_review)丨京东API接口指南
京东商品评论数据接口(JD.item_review)让开发者获取京东商品的评论列表、内容、时间、买家昵称等详细信息,助力产品优化和市场研究。使用步骤包括注册京东开发者账号、创建应用并申请API权限、获取API密钥、阅读API文档,最后通过HTTP请求调用接口获取数据。示例代码展示了如何使用Python进行请求。
1149 9
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
386 1
抓取和分析JSON数据:使用Python构建数据处理管道
|
Web App开发 弹性计算 运维
快速部署1Panel运维面板
1Panel是一款Linux服务器管理面板,提供Web界面进行主机监控、文件、数据库和容器管理。本文介绍如何通过计算巢快速部署1Panel面板。
快速部署1Panel运维面板
|
监控 数据挖掘 数据安全/隐私保护
ERP系统中的员工薪酬与福利管理
【7月更文挑战第25天】 ERP系统中的员工薪酬与福利管理
552 2
|
存储 数据安全/隐私保护
Qt Installer Framework翻译(5-3)
Qt Installer Framework翻译(5-3)
|
监控 NoSQL 安全
Redis进阶-JedisPool参数优化 & 如何合理估算核心参数 & redis连接池预热
Redis进阶-JedisPool参数优化 & 如何合理估算核心参数 & redis连接池预热
704 0