ArmHF Debian Chroot

在 Linux 系统上进行嵌入式开发时,通常使用交叉编译或者qemu虚拟环境进行软件的构建,生成可以在目标机器上运行的可执行程序。对于 Debian ,为了加快软件开发速度,同时避免交叉编译时自行构建各个依赖库产生各种不必要的干扰,可以选择基于 QEMU 虚拟环境的 Debian Chroot 环境进行软件的开发,构建,以及调试。本篇主要对 Debian Chroot 环境的构建,开发,调试环境进行介绍,方便开发人员能够快速的搭建相关环境,介入软件开发过程。

配置 chroot 环境

安装 qemu 和 debootstrap 等工具

sudo apt-get install binfmt-support qemu qemu-user-static debootstrap

获取 armhf 系统包

Debian Arm 硬浮点系统包有两种方式可以获取,包括 debootstrapqemu-debootstrap ,两者获取方式如下说明。

基于 debootstrap 获取

  1. 安装 debootstrap, qemu, qemu-arm 等工具。

  2. 获取 chroot 系统及软件包。

    sudo debootstrap --no-check-gpg --arch=armhf sid ./sid-armhf ftp://ftp.debian.org/debian/
    

    Note

    对于上述指令中的 sid 为 Debian 的每日构建版本,属于 Factory 版本,软件时时更新,可能并不稳定。如果希望使用稳定版本,可以选择 jessie (Debian 8),wheezy (Debian 7), squeeze (Debian 6)等稳定版本,不过建议使用最新的稳定版本 jessie 作为生产系统,如果是用于测试或者开发者环境,可以选择 sid

基于 qemu-debootstrap 获取

Warning

对于 qemu-debootstrap 仅适用于 Debian 或者 Ubuntu 系统,以及这两个系统的衍生系统版本。

对于 x86 机器,则可以使用 qemu-user-static 包中的 qemu-debootstrap 来获取系统包。系统选择参照备注里的说明。

qemu-debootstrap --no-check-gpg --arch=armhf sid /chroots/sid-armhf ftp://ftp.debian.org/debian/

切入 Chroot 环境

在完成 Arm 硬浮点架构的系统包获取之后,可以切入 Chroot 环境,进行第一次环境设置。

  1. 进入 chroot 环境,挂载 /proc 文件系统

    sudo cp /usr/bin/qemu-arm-static sid-armhf/usr/bin
    sudo chroot /chroots/sid-armhf
    
    mount -t proc proc /proc
    

    Note

    如果使用的是 qemu-bootstrapschroot ,那么 /proc 的挂载将会有配置文件自动执行。

    对于 openSUSE , 则需要拷贝 /usr/bin/qemu-arm/usr/bin/qemu-arm-binfmtsid-armhf/usr/bin 目录。

  2. 首次进入系统设置。

    在第一次进入系统之后,需要对系统进行设置。在首次进入系统后,需要对系统进行设置,包括阻止系统服务启动,配置软件源等。

    Tip

    建议创建 /usr/sbin/policy-rc.d 阻止 chroot 环境中的后台服务启动。该文件权限需要修改为 0755 ,其中的内容如下(内容取自pbuilder)。

    echo "************************************" >&2
    echo "All rc.d operations denied by policy" >&2
    echo "************************************" >&2
    exit 101
    

    系统更新源配置位于 /etc/apt/sources.list ,由于 debootstrap 生成的软件源不可用,我们需要在其中添加可用的软件源,如下是 armhf 的二进制和源代码源:

    deb http://ftp.debian.org/debian sid main
    deb-src http://ftp.debian.org/debian sid main
    

    Note

    软件源需要根据自己的系统版本进行设置,这里使用的是 sid ,对于生产用系统需要根据选择的系统版本进行设置,如 jessiewheezy ,或者 sequeeze 等。

    在完成软件源的添加之后,可以根据需要更新系统,或者添加自己需要的软件源。

    sudo apt-get update
    

准备开发环境

安装 gcc, build-essential, scons 等开发工具