目录

跨平台更新制作rootfs

在x64( pc /ubuntu 18.10 )跨平台编译arm64 的debian rootfs完整镜像,通常地,更新rootfs都是直接放在目标机上面,制作更新好rootfs后再拷贝回编译机。

对于目标机平台,通常拷贝rootfs需要非运行时环境,所以例如在emmc的rootfs需要通过sd卡系统启动去执行拷贝操作。

同时拷贝/压缩还需要关心文件的uid、gid、用户名、组名、执行权限。稍不注意,功亏一篑。

这里通过介绍qemu虚拟跨平台制作、更新rootfs。

qemu-debootstrap

如我们知道,debootstrap用以通过源制作debian/ubuntu 的基础rootfs。通常来说其分为下载(--foreign)和安装配置(--second-stage)两个阶段。对于跨平台的第一阶段下载只需要通过--arch置顶平台下载对应deb包,但是对于包安装则需chroot后在编译机上面虚拟目标机的deboosttap 执行安装。

$which qemu-debootstrap |xargs tail -n 10

if ! which "qemu-$qemu_arch-static" >/dev/null 2>&1; then
    die "Sorry, couldn't find binary %s" "qemu-$qemu_arch-static"
fi

eval run debootstrap --arch "$deb_arch" --foreign $opts $args
mkdir -p "$target/usr/bin"
cp $(which "qemu-$qemu_arch-static") "$target/usr/bin"
run chroot "$target" /debootstrap/debootstrap --second-stage

提示:如上代码片段所示qemu-debootstrap 功能:

line.7 指示debootstrap 第一阶段通过指定--arch 确定平台下载包。

line.9 拷贝qemu-arrch64-static 下的虚拟软件到rootfs /usr/bin 目录用以chroot

line10指示chroot后debootstrap 第二阶段。

arm64 debian jessie

如上讨论,这里我们在x64 平台下载arm64(aarch64)平台rootfs并且尝试通过chroot实现初始用户、包安装重等操作。

deiban jessie 如上下载安装可能会因为包缺失提示下载失败,这里搜索寻找替换了老的软件源。

sudo qemu-debootstrap --arch=arm64 --keyring /usr/share/keyrings/debian-archive-keyring.gpg --variant=buildd --exclude=debfoster --include=systemd-sysv jessie debian-jessie https://mirrors.mediatemple.net/debian-archive/debian

chroot

chroot 是linux 用以切换rootfs的一个应用,跨平台操作通过需要切换的rootfs 路径下的/usr/bin/qemu-aarch64-static 应用实现。

如上通过qemu-debootstrap 跨平台下载rootfs之后,可以通过chroot增加用户和安装软件。

[mdp-jay]~$sudo chroot debian
#之后就可以在x64 平台 虚拟 arm64 roofs,并且可以虚拟运行其软件。
root@mdp-jay-thinkpad:/# adduser pi
root@mdp-jay-thinkpad:/# apt-get install vim