请稍侯

再想想交叉编译环境

最近开始尝试用 debootstrap 制作 Arm 开发板的文件系统,却意外发现——以前听说过,但是没想到这么简单——可以直接在 x86 Linux 上面模拟出一个 Arm/PowerPC 运行环境,通过 Debian 的基础支持,可以方便的安装软件,特别是 gcc 和第三方库。然后运行起来就像个高性能版的树莓派一样,可以说是一个很棒的 Arm 运行/编译环境——虽然可能还有很多坑没有踩到,但是到目前为止还是比较顺利的。

先说说基本流程:

  1. 首先安装 debootstrapqemu-user-static(后面要用到),
     sudo apt-get install qemu qemu-user-static debootstrap
    
  2. 从 Debian 网站获取 base system,根据自己的需要选择 arch,

     sudo debootstrap --arch=armhf --foreign sid armroot 
    
  3. 中间应该会出现一次错误:

     W: Failure trying to run: chroot yyy mount -t proc proc /proc
     W: See xxx  for details
    

    这时就需要将对应 arch 的 qemu-user-static 拷贝到 chroot 环境下:

     sudo cp /usr/bin/qemu-arm-static armboot/user/bin/
    

    然后重新执行一遍步骤2 的命令就行了。

  4. 这些都完了之后就使用 chroot 切换到 Arm 环境,像使用 x86 Linux 一样使用这个 Arm Linux 环境吧:

     sudo chroot armboot
    

中间遇到了一些小问题:

  1. 执行步骤2 时可能会遇到下载失败的问题,可以自定义下载源,比如:

     debootstrap --arch i386 sid rootfs-debian http://debian.linux.org.tw/debian
    
  2. 在步骤4 中,如果提示找不到 shell,可以自定义 shell,一般可以直接指定 bash:

     sudo chroot armroot /bin/bash
    

到目前为止,我用过的交叉编译环境包括:

  1. 交叉编译器
  2. 直接在目标板上开发
  3. debootstrap 模拟目标板运行环境

然后对这三个方法进行了一个不靠谱的比较

  交叉编译器 目标板 chroot
速度 5 3 5
易用 3 5 4
学习曲线 3 5 3
占有率 5 1 1
推荐度 5 3 3
装逼指数 1 5 3