交叉编译,简单地说,就是在一个平台上生成另一个平台上的可执行代码。下面就做一个简单的hello world实验来完成这一过程。
¶0. 网络环境搭建
本实验涉及两台主机。
A主机:安装交叉编译环境,并用来编译源文件。在本次实验中使用的是虚拟机ubuntu系统环境
B主机: arm架构平台开发板,用来运行A主机编译好的可执行文件,ip地址固定为
192.168.1.230
(1)首先使用直连线连接A主机对应的物理主机。
(2)修改物理主机的ip地址(要求和B主机的网段一致),子网掩码,网关(默认即可,不要配置)
(3)修改虚拟机的网络连接方式为桥接
(4)修改虚拟机的ip地址和子网掩码
(5)重启虚拟机,以使网络配置可以
1 | reboot |
重启完成后执行以下命令查看是否配置成功
1 | ifconfig |
配置完成后虚拟机和开发板互ping,都ping通。
¶1. 搭建交叉编译环境
解压交叉编译gcc工具并放到共享目录里
下载arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz
1 | 复制gcc到共享目录里 |
¶2. 编写hello.c测试文件
1 | qcmoke@qcmoke-virtual-machine:~/nfs$ vim hello.c |
1 |
|
¶3. 编译hello.c
1 | qcmoke@qcmoke-virtual-machine:~/nfs$ ./opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc hello.c -o hello |
¶4. 登录arm主机
1 | qcmoke@qcmoke-virtual-machine:~$ telnet 192.168.1.230 |
¶5. 挂载共享目录
需要在A主机搭建nfs服务器,以便快速共享编译好的可执行文件。具体搭建教程请参考ubuntu 16.04 nfs服务的搭建。在本次实验中搭建的nfs共享目录是A主机的/home/qcmoke/nfs/
目录,而挂载点是B主机的/mnt/nfs/
目录。
通过在编译环境的主机执行以下命令查看共享目录地址
1 | qcmoke@qcmoke-virtual-machine:~$ showmount -e localhost |
根据查询结果挂载到arm主机某个目录,如/mnt/nfs
1 | 创建挂载点 |
通过以下命令查看是否挂载成功
1 | [root@FriendlyARM /]# df |
¶6. 在arm主机上运行hello可执行文件
1 | [root@FriendlyARM /]# /mnt/nfs/hello |
运行成功,交叉编译完成!😄