在x64( pc /ubuntu 18.10 )跨平台编译arm64 的debian rootfs完整镜像,通常地,更新rootfs都是直接放在目标机上面,制作更新好rootfs后再拷贝回编译机。
对于目标机平台,通常拷贝rootfs需要非运行时环境,所以例如在emmc的rootfs需要通过sd卡系统启动去执行拷贝操作。
同时拷贝/压缩还需要关心文件的uid、gid、用户名、组名、执行权限。稍不注意,功亏一篑。
这里通过介绍qemu虚拟跨平台制作、更新rootfs。
如我们知道,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 第二阶段。
如上讨论,这里我们在x64 平台下载arm64(aarch64)平台rootfs并且尝试通过chroot实现初始用户、包安装重等操作。
安装依赖包;
sudo apt-get install debootstrap #用以下载安装rootfs
sudo apt-get install qemu-user-static #包含应用qemu-debootstarp,以及用以跨平台chroot的qemu-aarch64-static的应用软件
下载归档keyring
sudo apt-get install debian-archive-keyring
sudo apt-key add /usr/share/keyrings/debian-archive-keyring.gpg
通过源下载rootfs
sudo qemu-debootstrap --arch=arm64 --keyring /usr/share/keyrings/debian-archive-keyring.gpg --variant=buildd --exclude=debfoster unstable debian-arm64 http://ftp.debian.org/debian
提示:如上已经分析qemu-debootstrap 源码,其操作已经包含编译机(x64)的下载和chroot后arm64(arm64)的包安装配置阶段。
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 是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