Abstract
Keywords 树莓派  技术笔记  树莓派 
Citation Yao Qing-sheng.初尝制作树莓派最简单的 Rootfs.FUTURE & CIVILIZATION Natural/Social Philosophy & Infomation Sciences,20220614. https://yaoqs.github.io/20220613/chu-chang-zhi-zuo-shu-mei-pai-zui-jian-dan-de-rootfs/

转载自初尝制作树莓派最简单的 rootfs

制作树莓派最简单的 rootfs

文章目录


一、下载 busybox 源码

在 BusyBox 的官网下载到源码:
https://busybox.net/downloads/
在这里插入图片描述
将下载的 busybox-XXXXXX.tar.bz2 复制到任意目录下,并运行命令解压

1
2
tar -vxjf busybox-1.33.0.tar.bz2

在这里插入图片描述

二、编译 busybox

1
2
cd busybox-1.33.0  #进入busybox-1.30.0/目录下

1. 修改顶层 Makefile (指定交叉编译工具链)

1
2
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
在这里插入图片描述

三、制作最小根文件系统

1. 创建一些必备的文件

进入到_install 目录下

1
2
mkdir dev etc lib mnt proc sys tmp var boot

/*
说明

  • dev 目录主要共系统生成各类设备节点
  • etc 系统的配置文件
  • lib 系统需要的各类库文件
  • mnt 一般用来挂载其他设备的的目录
  • sys 系统文件
  • tmp 临时文件
  • var
  • proc 内存虚拟文件系统节点

*/
在这里插入图片描述

2. 创建设备文件

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

1
2
3
mkdir /dev/console
mkdir /dev/NULL

在这里插入图片描述
查询虚拟机
在这里插入图片描述
console : 主设备号为 5,次设备号为 1
null:主设备号为 1,次设备号为 3
所以,创建两个新的设备节点

1
2
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 文件夹下
在这里插入图片描述

4.C 库 lib
----------------------------------------------------------------------

进入到编译busybox的C库,路径是/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/arm-linux-gnueabihf/libc/lib/arm-linux-gnueabihf  
![在这里插入图片描述](20210505124020177.png)  
交叉编译工具链里面需要的文件动态链接到\_install的lib下  
![在这里插入图片描述](20210505124341931.png)  
![在这里插入图片描述](20210505124449130.png)

四、移植到 sd 卡

与内核移植一致,首先在 /busybox-1.33.0 下创建 mnt/ext4 用来挂载的文件夹,

1
2
3
4
sudo mount /dev/sdb2 mnt/ext4
sudo cp -r _install/* mnt/ext4 -d
sudo umount /mnt/ext4

注意:这里必须将文件夹整体拷贝进 SD 卡,不能在拷贝之后在添加 boot 等文件夹,否则会出现一些问题,可能的原因是,第一次启动时,已经将文件系统烧写进内存当中,再次修改导致死机,文件系统做的任何修改都不行要整体拷贝

本文转自 https://blog.csdn.net/qq_19606023/article/details/116423827,如有侵权,请联系删除。

References