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

制作树莓派最简单的rootfs


一、下载busybox源码

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

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

三、制作最小根文件系统

1.创建一些必备的文件

进入到_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程序(https://blog.csdn.net/u014089899/article/details/80622607)
    在这里插入图片描述
  • 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-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.edu_weight)
    执行mount –a 命令后,将挂接proc、tmpfs文件系统
    写成mount –a 它会依赖于etc/fstab ,根据fstab的指示来挂载根文件系统
    在这里插入图片描述
  • profile:/etc/profile文件的改变会涉及到系统的环境(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-gnueabihf/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等文件夹,否则会出现一些问题,可能的原因是,第一次启动时,已经将文件系统烧写进内存当中,再次修改导致死机,文件系统做的任何修改都不行要整体拷贝

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值