这里的使用场景是在ubuntu x64上编译arm程序,需要一个开发环境,而最省心的方式就是自己做一个arm环境的chroot镜像,然后自由用apt-get安装依赖,然后编译程序。所以这里就以制作arm镜像为例。

在我们开始之前,我们需要了解一下ARM的几种架构:
armel(abi):这个是老架构,之前的arm硬件没有浮点处理单元,所以采用软件模拟的方式进行浮点计算,兼容新架构
armhf:这个是新架构,有了独立的硬件浮点处理单元,这个不兼容老架构
arm64:这个就直接用了新架构,没有el和hf之分了
kernel、rootfs和app编译的时候,指定的必须保持一致才行
参考:http://www.360doc.com/showweb/0/0/804170657.aspx

1、首先我们需要安装相关程序来支持chroot环境
sudo apt-get install qemu-user-static
如果你有现成的镜像,那么只需要安装这个就行了,然后你就可以chroot进去了

2、接着我们需要安装制作镜像所需要的工具环境
sudo apt-get install binfmt-support debootstrap qemu
这里最主要是这个debootstrap,另外两个看着办

3、然后我们利用debootstrap来制作镜像
首先我们建立一个文件夹
sudo mkdir /opt/ubuntu-arm-64
然后我们运行debootstrap来联网下载对应的ubuntu版本基础镜像来制作我们的镜像
debootstrap –arch=arm64 –foreign trusty /opt/ubuntu-arm-64 http://ports.ubuntu.com/
这里的trusty是ubuntu 14.04的版本代号,关于debootstrap支持的版本代号,可以在debootstrap的脚本目录下查看,路径为
cd  /usr/share/debootstrap/scripts/
这下面有很多以ubuntu代号命名的文件

4、接着我们就等待3的操作完成,然后拷贝qemu-aarch64-static 到我们镜像的bin目录
cp  /usr/bin/qemu-aarch64-static  /opt/ubuntu-arm-64/usr/bin/
这里要注意了,是aarch64,如果你是armhf环境,那么请使用【qemu-arm-static】接着我们chroot进去
sudo chroot /opt/ubuntu-arm-64
这一步的时候,你可能会遇到 “i have no name” 的情况,不要急,我们来利用debootstrap对我们的镜像进行初始化操作
sudo debootstrap/debootstrap –second-stage
然后等待初始化完成,你就会发现一切ok了

5、接着我们来编辑apt的源,方便我们安装其他依赖
deb http://ports.ubuntu.com/ trusty main restricted universe multiverse
deb-src http://ports.ubuntu.com/ trusty main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty main universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty main universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-updates main universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ trusty-updates main universe
这里的trusty根据你版本的不同,可以换

6、接着就是关于chroot挂载真实系统设备到我们的虚拟系统,这个我没看出具体的用处是啥,待研究

#!/bin/bash
mount -t proc proc proc/
mount -t sysfs sys sys/
mount -o bind /dev dev/
mount -t devpts pts dev/pts/

参考:
https://wiki.debian.org/EmDebian/CrossDebootstrap
https://linux.cn/article-4936-1.html

0
赞赏

微信赞赏支付宝赞赏