飞腾派
直播中

jf_39110170

2年用户 344经验值
擅长:可编程逻辑 嵌入式技术 EDA/IC设计
私信 关注
[经验]

【飞腾派4G版免费试用】3.手把手玩转制作rootfs根文件系统

接上两篇:
【飞腾派4G版免费试用】1.实战交叉编译环境搭建和手把手uboot编译

【飞腾派4G版免费试用】2.手把手实战编译Linux内核

嗨,亲爱的工程师、学生和爱好者们,我来啦!今天我要带你们一起玩转制作rootfs,也就是根文件系统。但是别紧张,这不是那种会让你头大的编程问题,而是像在家里做蛋糕一样的简单有趣!

image.png

非常感谢第一篇文章【飞腾派4G版免费试用】1.实战交叉编译环境搭建和手把手uboot编译下方的评论区网友:Jonny的赞赏和表扬,特此为热心网友再创作一篇,作为感谢!

首先,我们要准备环境和工具。这就好比做蛋糕之前,得先买好面粉、鸡蛋、糖和发酵粉一样。
image.png

  1. 安装相关工具:我们需要安装几个小软件才能开始。就像做蛋糕要用的烤箱一样。这些软件包括:

    • debootstrap:这个就像一个魔法工具,能从零开始创建一个文件系统。
    • qemu-user-static:它使得我们能在普通机器上运行模拟的Linux环境,就像一个小型的虚拟机。
    • binfmt-support:让你能在不同的处理器架构之间切换。
      安装命令如下:

sql
sudo apt-get install apt-transport-https qemu qemu-user-static binfmt-support debootstrap
image.png

把这些软件都安装好,就像把所有做蛋糕的材料都准备好一样。

  1. 准备切换脚本:在制作过程中,我们需要频繁地切换到目标根文件系统的环境中。这就好比做蛋糕时,一会儿要在面糊里加糖,一会儿要放进烤箱烤一下。这个脚本就是帮助我们快速切换环境的魔法“门”。可以带我们进入魔法世界。脚本内容如下:
#!/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`

image.png

......(此处省略了脚本的其余部分) 这个脚本就像是一个魔法门,可以带我们进入一个全新的世界。它会帮助我们挂载文件系统并切换到目标环境中。当我们在完成后想要回家时,它会帮我们卸载并返回原来的世界。这是一个用于切换到目标根文件系统环境的脚本,名为 ch-mount.sh。这个脚本的功能是在指定的目录中创建一个新的环境,并切换到这个环境中。这个环境中的 /proc, /sys, /dev, /dev/pts等特殊文件系统被挂载到新的环境中,并且/proc, /sys, /dev/pts等文件系统的内容被映射到新的环境中。然后,使用chroot` 命令切换到新的环境中。

这个脚本需要两个参数:

  • -m--mount:挂载根文件系统并切换到新环境。
  • -u--umount:卸载根文件系统并退出新环境。

第二个参数是目标根文件系统的完整路径(包括尾部的 /)。

例如,你可以使用以下命令来挂载根文件系统并切换到新环境:

ch-mount -m /media/sdcard/

在这个例子中,根文件系统被挂载到 /media/sdcard/ 目录中,并且你被切换到这个新环境中。
image.png

这个脚本需要用 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/

image.png

然后,你需要执行你的 ch-mount.sh 脚本以挂载新创建的 rootfs:

./ch-mount.sh -m /path/to/your/rootfs

这会挂载 /proc, /sys, /dev, 和 /dev/pts 到新创建的 rootfs。然后,你可以在新的环境中进行操作。
image.png

当你完成对新环境的操作后,你可以使用以下命令来卸载并退出新的 rootfs:

./ch-mount.sh -u /path/to/your/rootfs

这样你就创建并挂载了一个新的 rootfs。
image.png

然后你可以使用下面的命令来切换到目标根文件系统环境:

sudo ./ch-mount.sh -m /path/to/rootfs/

在目标根文件系统环境中执行完操作后,你可以使用下面的命令退出:

sudo ./ch-mount.sh -u /path/to/rootfs/

image.png

上面是一个非常有趣的脚本,它可以帮助你轻松地在不同的环境之间切换。当你运行这个脚本并传入参数-m和目标目录时,它会将目标目录挂载到各种必要的文件系统上,然后进入那个环境。如果你传入参数-u和目标目录,它会卸载那些文件系统并退出那个环境。如果没有传入任何参数,它会告诉你如何使用这个脚本。就像你在厨房里快速地变换工作台一样。这样,我们就可以轻松愉快地制作我们的rootfs了!
image.png
我在本论坛内的试读经验 :

《电子工程师必备——九大系统电路识图宝典》+附录2化整为零和集零为整电路分析方法

《运算放大器参数解析与LTspice应用仿真》+学习心得4第三章专用放大器

《Android Runtime源码解析》+深入体会第六章ART的执行(4)

希望上面的心得能对您有所帮助!

谢谢!

还没吃饭
2024年1月9日

更多回帖

发帖
×
20
完善资料,
赚取积分