利用arm板chroot修改其上位机的文件系统

说明

有的时候做批量生产的镜像需要搭建复杂的环境,而在实际的开发板上比较容易搭建,在x86_64的服务器上操作arm64的文件系统修改链接,文件之类的还行,一旦搭建的环境复杂就不好操作了,比如安装PL数据库之类的。

这时候就可以在开发板上使用chroot,然后挂载服务器上这个板子的文件系统进行修改,再搭建一遍环境即可。

也有其他方法,比如qemu,docker之类的。之后细说吧~~~ 现在对qemu也不是很熟悉。

步骤

1、将服务器上的零散文件系统挂载到板子上
挂载问题:在debian 10 系统下挂载报错

alt text

解决办法:在前面加上busybox

常用:

# 需要服务器运行nfs
busybox mount -t nfs -o nolock 192.168.1.7:/home/yangx/myfile/xxx_imx93_6.6/ /mnt/

# nfs的配置文件 /etc/exports
/home/yangx *(rw,sync,no_root_squash,no_subtree_check)
注意:

在服务器mount的硬盘里面的文件夹,再挂载到板子是不行的,不知道为什么。可能服务器挂载硬盘是sudo挂载的,然后nfs权限就不行。

2、在零散文件的tool中添加一个脚本ch-mount.sh(或者在板子里添加脚本)

scp yangx@192.168.1.7:/home/yangx/myfile/ch-mount.sh .

内容:

#!/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/input ${2}dev/input
    sudo chroot ${2}
}
function umnt(){
    echo "UNMOUNTING"
    sudo umount ${2}proc
    sudo umount ${2}sys
    sudo umount ${2}dev/input
    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

3、运行:加载文件系统
sudo bash ch-mount.sh -m /mnt/

图示:
alt text

遇到问题:

alt text

参考网址:

https://blog.csdn.net/lileihappy/article/details/79214156

解决方法:输入一下两条指令

chmod 644 /usr/lib/sudo/sudoers.so
chown -R root /usr/lib/sudo

4、安装命令或其他操作并合并零散的文件系统

有scp文件的话,把known_hosts删除下。

ssh-keygen -f "/root/.ssh/known_hosts" -R "192.168.1.7"

5、退出步骤:
退出/mnt/
exit命令卸载文件系统

sudo bash ch-mount.sh -u /mnt/
posted @ 2025-10-20 09:35  潇汀  阅读(1)  评论(0)    收藏  举报