用户工具

站点工具


jaysnote:cross_update_rootfs

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

jaysnote:cross_update_rootfs [2019/04/08 14:49] (当前版本)
jaylee 创建
行 1: 行 1:
 +<​markdown>​
 +
 +# 跨平台更新制作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 执行安装。
 +
 +```bash
 +$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实现初始用户、包安装重等操作。
 +
 +* 安装依赖包;
 +
 +    ```bash
 +    sudo apt-get install debootstrap ​      #​用以下载安装rootfs
 +    sudo apt-get install qemu-user-static ​ #​包含应用qemu-debootstarp,以及用以跨平台chroot的qemu-aarch64-static的应用软件
 +    ```
 +
 +* 下载归档keyring
 +
 +    ```bash
 +    sudo apt-get install debian-archive-keyring
 +    sudo apt-key add /​usr/​share/​keyrings/​debian-archive-keyring.gpg
 +    ```
 +
 +* 通过源下载rootfs
 +
 +    ```bash
 +    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 如上下载安装可能会因为包缺失提示下载失败,这里搜索寻找替换了老的软件源。
 +
 +```bash
 +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增加用户和安装软件。
 +
 +```bash
 +[mdp-jay]~$sudo chroot debian
 +#​之后就可以在x64 平台 虚拟 arm64 roofs,并且可以虚拟运行其软件。
 +root@mdp-jay-thinkpad:/#​ adduser pi
 +root@mdp-jay-thinkpad:/#​ apt-get install vim
 +```
 +
 +</​markdown>​
 +
 +
  
jaysnote/cross_update_rootfs.txt · 最后更改: 2019/04/08 14:49 由 jaylee