2021SC@SDUSC

BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Android 系统的自带的shell。

一、下载 busybox 源码

在 BusyBox 的官网下载到源码:
https://busybox.net/downloads

将下载的 busybox复制到任意目录下,并运行命令解压
tar -vxjf busybox-1.33.0.tar.bz2

二、编译 busybox

cd busybox-1.33.0           #进入 busybox-1.30.0/目录下
1. 修改顶层 Makefile(指定交叉编译工具链)
sudo gedit Makefile
一个是 164 行的`CROSS_COMPILE ?= `,用来指定交叉编译工具链,目录为自己之前解压
的目录

另一个地方是 190 行的`ARCH ?=$(SUBARCH)`,修改为`ARCH ?= arm`

保存退出。
2.配置 Busybox
在 busybox-1.33.0/目录下输入 `sudo make defconfig` 命令预配置 busybox,然后通过
`sudo make menuconfig`图形化界面配置
第一个地方,Settings->Build static binary (no shared libs),不要选中该项(方向键选择,
回车键进入下一级目录,空格是选中或不选中,双击 ESC 返回)。

第二个地方,Linux System Utilities—>nsenter,不要选中该项。

第三个地方,Coreutils—>sync,不要选中该项

3.编译 Busybox
在 busybox-1.33.0/目录下输入`sudo make install`,编译的结果在在 busybox-1.33.0/_install

三、制作最小根文件系统
进入到_install 目录下
mkdir dev etc lib mnt proc sys tmp var boot
/*
说明
* dev 目录主要共系统生成各类设备节点
* etc 系统的配置文件
* lib 系统需要的各类库文件
* mnt 一般用来挂载其他设备的的目录
* sys 系统文件
* tmp 临时文件
* var
* proc 内存虚拟文件系统节点
*/

2.创建设备文件
在_install 文件夹下面创建两个设备文件/dev/console 和 /dev/NULL
mkdir /dev/console
mkdir /dev/NULL

查询虚拟机

console : 主设备号为 5,次设备号为 1
null:主设备号为 1,次设备号为 3
所以,创建两个新的设备节点
raspi@ubuntu:~/busybox-1.33.0/_install/dev/console$ mknod -m 666 console c 5 1
raspi@ubuntu:~/busybox-1.33.0/_install/dev/NULL$ mknod -m 666 null c 1 3
(1)/dev/console
/dev/console 代表 bai 的系统控制台,错误信息和诊 du 断信息都会被到这个上。
(2)/dev/null
这个是一个空设备文件,所有写到这个文件中的数据都会被丢弃掉
3.构造 inittab
这里移植的是一个已经做好的典型的 inittab,所以操作如下
busybox-1.33.0/examples/bootfloppy#目录下有一个 etc 文件夹,

全部拷贝到你的_install 目录下的 etc 文件夹下

Fstab:当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中
指定的文件系统挂载到指定的目录(https://blog.csdn.net/kepa520/article/details/81315430)
修改为以下内容:
在/etc/init.d 目录下运行`chmod +x rcS`
这样我们这个文件系统启动就会执行 rcS,可以在 proc 目录看到所有运行的文件
inittab : Linux 在完成核内引导以后,就开始运行 init 程 序

linux中inittab文件详解linux中inittab文件详解_u014089899的博客-CSDN博客_inittab

(https://blog.csdn.net/u014089899/article/details/80622607)

/*init的进程号是1(ps -aux | less),从这一点就能看出,init进程是系统所有进程的起点,Linux在完成核内引导以后,就开始运行init程序。 
init程序需要读取配置文件/etc/inittab。inittab是一个不可执行的文本文件,它有若干行指令所组成。 
理解Runlevel: 
runlevel用来表示在init进程结束之后的系统状态,在系统的硬件中没有固定的信息来表示runlevel,它纯粹是一种软件结构。init和inittab是runlevel影响系统状态的唯一原因。在上述例子中inittab文件起始阶段的注释主要用来描述runlevel: 
  Runlevel=0 是让init关闭所有进程并终止系统。 
  Runlevel=1 是用来将系统转到单用户模式,单用户模式只能有系统管理员进入,在该模式下处理那些在有登录用户的情况下不能进行更改的文件,改runlevel的编号1也可以用S代替。 
  Runlevel=2 是允许系统进入多用户的模式,但并不支持文件共享,这种模式很少应用。 
  Runlevel=3 是最常用的运行模式,主要用来提供真正的多用户模式,也是多数服务器的缺省模式。 
  Runlevel=4 一般不被系统使用,用户可以设计自己的系统状态并将其应用到runlevel 4阶段,尽管很少使用,但使用该系统可以实现一些特定的登录请求。 
  Runlevel=5 是将系统初始化为专用的X Window终端。对功能强大的Linux系统来说,这并不是好的选择,但用户如果需要这样,也可以通过在runlevel启动来实现该方案。 
  Runlevel=6 是关闭所有运行的进程并重新启动系统。 */

init.d/rcS:rcS 是一个脚本文件,在 inittab 文件中本解析调用,用于配置 Linux 系统
(https://blog.csdn.net/u013686019/article/details/26846571、
https://blog.csdn.net/weixin_30839881/article/details/97608919?utm_medium=distribute.
pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight&depth_1-ut
m_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.ed
u_weight)
执行 mount –a 命令后,将挂接 proc、tmpfs 文件系统
写成 mount –a 它会依赖于 etc/fstab ,根据 fstab 的指示来挂载根文件系统
profile : /etc/profile 文 件 的 改 变 会 涉 及 到 系 统 的 环 境
Linux /etc/profile文件详解 - lh03061238 - 博客园
(https://www.cnblogs.com/lh03061238/p/9952659.html)
4.C 库 lib
进入到编译 busybox 的 C 库,路径是
/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/arm-linux-gnuea
bihf/libc/lib/arm-linux-gnueabihf

交叉编译工具链里面需要的文件动态链接到_install 的 lib 下

四、移植到 sd 卡

与内核移植一致,首先在/busybox-1.33.0 下创建 mnt/ext4 用来挂载的文件夹,
sudo mount /dev/sdb2 mnt/ext4
sudo cp -r _install/* mnt/ext4 -d
sudo umount /mnt/ext4
注意:这里必须将文件夹整体拷贝进 SD 卡,不能在拷贝之后在添加 boot 等文件夹,否
则会出现一些问题,可能的原因是,第一次启动时,已经将文件系统烧写进内存当中,再次修
改导致死机,文件系统做的任何修改都不行要整体拷贝

树莓派4b制作加载的FLASH文件系统并移植busybox相关推荐

  1. 怎么解决浏览器提示无法加载shockwave flash?

    最近,有用户向小编反映:其电脑在用浏览器观看视频时,弹出"无法加载shockwave flash"的提示,导致无法继续观看视频.那你们知道"shockwave flash ...

  2. Xilinx远程更新之Flash加载时间/Flash区域划分技巧

    一  Flash加载时间 由于项目中需要一次性对多片不同的FPGA进行在线升级,在最初搭建底层时为了方便(偷懒)统一将FLASH SPI时钟约束成50MHz的时钟,这也为后期调试埋了一颗定时炸弹. 这 ...

  3. 【AIX 命令学习】加载与卸载文件系统!

    ufserver[/]#mount  --查看系统中已安装的文件系统   node       mounted        mounted over    vfs       date        ...

  4. 嵌入式Uboot,通过tftp进行内核镜像的加载及flash写入

    概述 今天主要完成的是利用uboot下tftp进行内核镜像的加载及写入flash中.算是学习笔记,也是自己第一次玩这个,记录一下. 系统环境 pc端:linux : ubuntu14.04 嵌入式端: ...

  5. CSS3制作加载中loading动画效果

    常见的loading加载中通常是使用一个gif来实现动画效果,实际上我们可以使用css3的特性来制作,本文介绍了一种线性加载效果的css3制作方法. 在web开发中经常遇到ajax的加载,那个加载中的 ...

  6. elasticsearch预加载数据到文件系统缓存

    默认情况下,Elasticsearch搜索完全依赖于操作系统文件系统缓存来缓存I / O操作.可以设置index.store.preload,以便通知操作系统启动时将索引文件的内容预加载到内存中.此设 ...

  7. 使用树莓派4B制作NAS(不推荐重度用户使用)基于samba

    注:树莓派4B的速度并不快,使用固态硬盘的话会快一点,普通机械硬盘的话在100MB每秒左右,推荐写论文或者轻度办公使用,不推荐重度用户使用 *** 使用samba制作的NAS其实功能上与共享文件夹几乎 ...

  8. 使用HTML+CSS制作加载动画

    简单的页面加载动画 html部分 <!DOCTYPE html> <html><head><meta charset="utf-8" /& ...

  9. android加载.swf flash文件

    项目结构: 一.SwfTest.java package com.example.helloworld; import android.app.Activity; import android.os. ...

最新文章

  1. net start mysql 无法启动mysql解决方案之一【NET HELPMSG 3534】
  2. iOS:(接口适配器3)--iPhone适应不同型号 6/6plus 前
  3. rust电器元件需要什么材料_云南自考大专报考需要什么材料?
  4. 蓝桥杯基础模块4_3:矩阵按键
  5. java组合框的事件有哪些_博为峰Java技术文章 ——JavaSE Swing列表框选取事件的处理...
  6. pb9 调用系统语音_成都电销系统一个月多少钱_选择灵狐传媒_收费透明
  7. C/C++库函数math用法案例篇二
  8. epoll, NIO,AIO
  9. eclipse创建springBoot工程
  10. Linux - Unbuntu管理员密码 初次登录 验证错误
  11. .chm 文档打不开
  12. MariaDB安装配置
  13. EXCEL斜线表头三种画法
  14. DNS --域名系统
  15. arctanx麦克劳林公式推导过程_考研高数公式知识点整理
  16. java家庭记账代码_Java的家庭记账本程序(B)
  17. 国际公认反洗钱师协会(ACAMS)最权威的反洗钱定义、方式、措施、监管机构和政策汇总
  18. .Net Core 图片合成、证书生成
  19. JAVA:01大学四年到毕业工作5年的学习路线资源汇总(转)
  20. 常用指标MAE/MAPE/RMSE

热门文章

  1. 网评100首最好听的歌
  2. 计算机辅助设计在环境工程中的应用,试论计算机辅助设计在环境工程中的应用原稿(全文完整版)...
  3. ps纯色、渐变填充图层只能是灰色
  4. bzoj4605 崂山白花蛇草水
  5. Windows 纤程详解
  6. linux版retroarch游戏,RetroArch下载
  7. php 炒粉,一碗粉定终身?黄屋屯炒粉还有着这样的浪漫故事,钦州人口口相传...
  8. MindMapper屏幕捕获功能该如何使用
  9. 计算机应用基础第四版答案周南岳,计算机应用基础第周南岳win+office期末复习及答案.docx...
  10. 京东超级秒杀时间html,京东418超级秒杀节LOGO及使用规范