接上两篇:
【飞腾派4G版免费试用】1.实战交叉编译环境搭建和手把手uboot编译
【飞腾派4G版免费试用】2.手把手实战编译Linux内核
嗨,亲爱的工程师、学生和爱好者们,我来啦!今天我要带你们一起玩转制作rootfs,也就是根文件系统。但是别紧张,这不是那种会让你头大的编程问题,而是像在家里做蛋糕一样的简单有趣!
非常感谢第一篇文章【飞腾派4G版免费试用】1.实战交叉编译环境搭建和手把手uboot编译下方的评论区网友:Jonny的赞赏和表扬,特此为热心网友再创作一篇,作为感谢!
首先,我们要准备环境和工具。这就好比做蛋糕之前,得先买好面粉、鸡蛋、糖和发酵粉一样。
-
安装相关工具:我们需要安装几个小软件才能开始。就像做蛋糕要用的烤箱一样。这些软件包括:
debootstrap
:这个就像一个魔法工具,能从零开始创建一个文件系统。
qemu-user-static
:它使得我们能在普通机器上运行模拟的Linux环境,就像一个小型的虚拟机。
binfmt-support
:让你能在不同的处理器架构之间切换。
安装命令如下:
sql
sudo apt-get install apt-transport-https qemu qemu-user-static binfmt-support debootstrap
把这些软件都安装好,就像把所有做蛋糕的材料都准备好一样。
- 准备切换脚本:在制作过程中,我们需要频繁地切换到目标根文件系统的环境中。这就好比做蛋糕时,一会儿要在面糊里加糖,一会儿要放进烤箱烤一下。这个脚本就是帮助我们快速切换环境的魔法“门”。可以带我们进入魔法世界。脚本内容如下:
#!/bin/bash
function mnt() {
echo "MOUNTING"
sudo mount -t proc /proc ${2}proc
sudo mount -t sysfs /sys ${2}sys
sudo mount -o bind /dev ${2}dev
sudo mount -o bind /dev/pts ${2}dev/pts
sudo chroot ${2}
}
function umnt(){
echo "UNMOUNTING"
sudo umount ${2}proc
sudo umount ${2}sys
sudo umount ${2}dev/pts
sudo umount ${2}dev
}
if [ "$1" == "-m" ] && [ -n "$2" ] ;
then
mnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
then
umnt $1 $2
else
echo ""
echo "Either 1'st, 2'nd or bothparameters were missing"
echo ""
echo "1'st parameter can be one ofthese: -m(mount) OR -u(umount)"
echo "2'nd parameter is the full pathof rootfs directory(with trailing '/')"
echo ""
echo "For example: ch-mount -m/media/sdcard/"
echo ""
echo 1st parameter : ${1}
echo 2nd parameter : ${2}
fi`
......(此处省略了脚本的其余部分) 这个脚本就像是一个魔法门,可以带我们进入一个全新的世界。它会帮助我们挂载文件系统并切换到目标环境中。当我们在完成后想要回家时,它会帮我们卸载并返回原来的世界。这是一个用于切换到目标根文件系统环境的脚本,名为
ch-mount.sh。这个脚本的功能是在指定的目录中创建一个新的环境,并切换到这个环境中。这个环境中的
/proc,
/sys,
/dev,
/dev/pts等特殊文件系统被挂载到新的环境中,并且
/proc,
/sys,
/dev/pts等文件系统的内容被映射到新的环境中。然后,使用
chroot` 命令切换到新的环境中。
这个脚本需要两个参数:
-m
或 --mount
:挂载根文件系统并切换到新环境。
-u
或 --umount
:卸载根文件系统并退出新环境。
第二个参数是目标根文件系统的完整路径(包括尾部的 /
)。
例如,你可以使用以下命令来挂载根文件系统并切换到新环境:
ch-mount -m /media/sdcard/
在这个例子中,根文件系统被挂载到 /media/sdcard/
目录中,并且你被切换到这个新环境中。
这个脚本需要用 root 权限来运行,因为它需要挂载和卸载文件系统。
如果你想使用这个脚本,你需要先保存它到一个文件中,比如 ch-mount.sh
,然后给它执行权限:
chmod +x ch-mount.sh
首先,你需要创建一个新的 rootfs 目录,这个目录将作为新的文件系统的挂载点。
mkdir /path/to/your/rootfs
然后,你可以使用 debootstrap
命令从这个目录中安装一个新的根文件系统。例如,如果你想安装一个 Ubuntu 的 rootfs,你可以这样做:
sudo debootstrap --arch=armhf --foreign stable /path/to/your/rootfs http://archive.ubuntu.com/ubuntu/
然后,你需要执行你的 ch-mount.sh
脚本以挂载新创建的 rootfs:
./ch-mount.sh -m /path/to/your/rootfs
这会挂载 /proc
, /sys
, /dev
, 和 /dev/pts
到新创建的 rootfs。然后,你可以在新的环境中进行操作。
当你完成对新环境的操作后,你可以使用以下命令来卸载并退出新的 rootfs:
./ch-mount.sh -u /path/to/your/rootfs
这样你就创建并挂载了一个新的 rootfs。
然后你可以使用下面的命令来切换到目标根文件系统环境:
sudo ./ch-mount.sh -m /path/to/rootfs/
在目标根文件系统环境中执行完操作后,你可以使用下面的命令退出:
sudo ./ch-mount.sh -u /path/to/rootfs/
上面是一个非常有趣的脚本,它可以帮助你轻松地在不同的环境之间切换。当你运行这个脚本并传入参数-m
和目标目录时,它会将目标目录挂载到各种必要的文件系统上,然后进入那个环境。如果你传入参数-u
和目标目录,它会卸载那些文件系统并退出那个环境。如果没有传入任何参数,它会告诉你如何使用这个脚本。就像你在厨房里快速地变换工作台一样。这样,我们就可以轻松愉快地制作我们的rootfs了!
我在本论坛内的试读经验 :
《电子工程师必备——九大系统电路识图宝典》+附录2化整为零和集零为整电路分析方法
《运算放大器参数解析与LTspice应用仿真》+学习心得4第三章专用放大器
《Android Runtime源码解析》+深入体会第六章ART的执行(4)
希望上面的心得能对您有所帮助!
谢谢!
还没吃饭
2024年1月9日