在Ubuntu主机中修改ARM Linux开发板的根文件系统

目录

[在Ubuntu主机中修改ARM Linux开发板的根文件系统](#在Ubuntu主机中修改ARM Linux开发板的根文件系统)

一、安装环境

二、根文件系统镜像扩容

三、挂载扩容后的根文件系统镜像

四、修改相关配置

五、创建挂载脚本

六、切换回主机目录

七、取消挂载

八、精简根文件系统镜像大小


在Ubuntu主机中修改ARM Linux开发板的根文件系统

复制代码
开发环境:
    Ubuntu20.04、飞凌OK3568开发板、开发板使用的根文件系统镜像为ubuntu.img
一、安装环境
复制代码
首先使用以下命令在Ubuntu20.04中安装qemu相关环境:
bash 复制代码
sudo apt-get install qemu-user-static
二、根文件系统镜像扩容
复制代码
使用以下命令对linux开发板使用的根文件系统进行扩容:
bash 复制代码
sudo fsck.ext3 -f IMAGE
bash 复制代码
sudo resize2fs IMAGE SIZE
复制代码
注意:
IMAGE:开发板使用的根文件系统镜像名称,我这里就是ubuntu.img。
SIZE:块的数量、一个块的大小为4K,这里GB-MB-KB之间的换算按照1000算。
     如想要扩容到5G,则块数大小为:5 * 1000 * 1000 / 4K = 1250000块
按需求扩容对应的容量大小,还需要注意的是根文件系统镜像大小与开发板rootfs分区大小有关,要保证根文件系统镜像后续能够正常烧录到开发板中。
复制代码
这里我使用的开发板根文件系统镜像扩容到8G大小。
bash 复制代码
sudo fsck.ext3 -f ubuntu.img
bash 复制代码
sudo resize2fs ubuntu.img 2000000   //8G
三、挂载扩容后的根文件系统镜像
复制代码
在根文件系统镜像的同级目录下,新建target目录用来挂载镜像使用。
bash 复制代码
mkdir target
复制代码
接着挂载根文件系统镜像到target目录下
bash 复制代码
sudo mount ubuntu.img target/
四、修改相关配置
复制代码
首先,切换到target目录下,修改相关的配置:
bash 复制代码
cd target
bash 复制代码
sudo cp /usr/bin/qemu-arm-static usr/bin/
复制代码
由于后续修改根文件系统内容时需要使用到网络,因此需要先拷贝PC主机端的dns配置:
bash 复制代码
sudo cp -b /etc/resolv.conf  etc/resolv.conf
复制代码
修改镜像源,这里常用的镜像源有阿里云,中科大,清华和华为的,可以选择一个即可。
复制代码
使用vim打开镜像源配置文件:
bash 复制代码
sudo vim etc/apt/source.list
复制代码
拷贝粘贴以下内容,修改完成后,wq保存退出。
bash 复制代码
deb http://ports.ubuntu.com/ubuntu-ports/ xenial main universe
deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial main universe
五、创建挂载脚本
复制代码
首先,从target目录下,切换出去到上一级目录。
bash 复制代码
cd ..
复制代码
接着,使用vim创建并打开一个挂载脚本文件:
bash 复制代码
vim mount.sh
复制代码
将以下内容拷贝到脚本文件中,拷贝完成后wq保存退出。
bash 复制代码
#!/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 chroot ${2}
}
​
function umnt() {
echo "UNMOUNTING"
sudo umount ${2}proc
sudo umount ${2}sys
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 both parameters were missing"
echo ""
echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"
echo "2'nd parameter is the full path of rootfs directory(with trailing '/')"
echo ""
echo "For example: ch-mount -m /media/sdcard/"
echo ""
echo 1st parameter : ${1}
echo 2nd parameter : ${2}
fi
复制代码
脚本文件创建成功后,需要给其添加可执行权限。
bash 复制代码
chmod +x mount.sh
复制代码
接着执行以下命令将根文件系统镜像挂载到qemu上:
bash 复制代码
sudo ./mount.sh -m target/
复制代码
至此,已经成功将扩容后的根文件系统镜像挂载到qemu上,虚拟机操作用户会变为root@ubuntu:/# ,此时执行apt等操作安装的软件会保留在根文件系统镜像中。我们按照自己的需求做对应的修改即可。
六、切换回主机目录
复制代码
当我们修改完毕后,使用exit命令即可切换回主机目录下。
bash 复制代码
exit
七、取消挂载
复制代码
当修改根文件系统完成后,还需要取消对根文件系统的挂载。
bash 复制代码
sudo ./mount.sh -u target/
bash 复制代码
sudo umount target/
八、精简根文件系统镜像大小
复制代码
我们通过步骤二扩容得到的根文件系统往往会大一点,在我们修改根文件系统镜像完成后,可以使用以下命令对根文件系统镜像进行精简。
复制代码
1、检查修复镜像的文件系统
bash 复制代码
sudo e2fsck -p -f ubuntu.img  
复制代码
2、精简文件系统镜像的大小
bash 复制代码
sudo resize2fs -M ubuntu.img
复制代码
ubuntu.img要按照自己板子根文件系统的实际的名字改
复制代码
至此,我们就完成了在PC虚拟机上对ARM Linux开发板所使用的根文件系统的修改。修改完成后,将精简后的根文件系统烧录到linux开发板中即可。
相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩3 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言