LV02-01-交叉编译工具链
本文主要是交叉编译工具链的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。
点击查看使用工具及版本
PC端开发环境 | Windows | Windows11 |
Ubuntu | Ubuntu20.04.6的64位版本(一开始使用的是16.04版本,后来进行了升级) | |
VMware® Workstation 17 Pro | 17.0.0 build-20800274 | |
终端软件 | MobaXterm(Professional Edition v23.0 Build 5042 (license)) | |
Win32DiskImager | Win32DiskImager v1.0 | |
Linux开发板环境 | Linux开发板 | 正点原子 i.MX6ULL Linux 阿尔法开发板 |
uboot | NXP官方提供的uboot,NXP提供的版本为uboot-imx-rel_imx_4.1.15_2.1.0_ga(使用的uboot版本为U-Boot 2016.03) | |
linux内核 | linux-4.15(NXP官方提供) |
点击查看本文参考资料
分类 | 网址 | 说明 |
官方网站 | https://www.arm.com/ | ARM官方网站,在这里我们可以找到Cotex-Mx以及ARMVx的一些文档 |
https://www.nxp.com.cn/ | NXP官方网站 | |
https://www.nxpic.org.cn/ | NXP 官方社区 | |
https://u-boot.readthedocs.io/en/latest/ | u-boot官网 | |
https://www.kernel.org/ | linux内核官网 |
点击查看相关文件下载
分类 | 网址 | 说明 |
NXP | https://github.com/nxp-imx | NXP imx开发资源GitHub组织,里边会有u-boot和linux内核的仓库 |
https://elixir.bootlin.com/linux/latest/source | 在线阅读linux kernel源码 | |
nxp-imx/linux-imx/releases/tag/rel_imx_4.1.15_2.1.0_ga | NXP linux内核仓库tags中的rel_imx_4.1.15_2.1.0_ga | |
nxp-imx/uboot-imx/releases/tag/rel_imx_4.1.15_2.1.0_ga | NXP u-boot仓库tags中的rel_imx_4.1.15_2.1.0_ga | |
I.MX6ULL | i.MX 6ULL Applications Processors for Industrial Products | I.MX6ULL 芯片手册(datasheet,可以在线查看) |
i.MX 6ULL Applications ProcessorReference Manual | I.MX6ULL 参考手册(下载后才能查看,需要登录NXP官网) |
一、交叉编译工具简介
什么是交叉编译器?Ubuntu
中安装使用的 GCC
编译器是针对 X86
架构的。而我们现在要编译的是 ARM
架构的代码,所 以我们需要一个在 X86
架构的 PC
上运行,可以编译 ARM
架构代码的 GCC
编译器,这个编译器就叫做交叉编译器。
在这里,我使用的是开发板配套教程中Linaro
出品的交叉编译器,而作为初学者的我,还是先跟教程走吧,哈哈。所以我使用的就是4.9
版本的编译器啦。相关网址如下:
linaro官网 | https://www.linaro.org/ |
4.9版本交叉编译器 | gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz |
二、安装ARM交叉编译工具链
1. 下载软件包
可以在下边的地址中下载4.9.4
版本的交叉编译工具软件包,当然自己也可以使用更高版本啦,我是为了跟教程一致,才用的老版本,以后会玩了,可能就换新了:
1 | https://releases.linaro.org/components/toolchain/binaries/4.9-2017.01/arm-linux-gnueabihf/ |
下载完毕后,拷贝到自己Ubuntu
的一个目录中:
1 | cp 2Sharedfiles/3Software/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz ~/1Software/ |
然后进入目录,并解压:
1 | cd ~/1Software/ |
2. 安装交叉编译器
- (1)新建存放交叉编译工具的文件夹
1 | sudo mkdir /usr/local/arm |
- (2)添加环境变量
1 | 1.打开相应文件 |
- (3)安装相关的库(虽然写笔记的时候还不知道有啥用)
1 | sudo apt-get install lsb-core lib32stdc++6 |
这个库安装的时间还是有点久的。
- (4)验证是否成功安装交叉编译工具
1 | arm-linux-gnueabihf-gcc -v |
若成功,则会显示交叉编译工具的版本,如下图所示:
三、安装 Poky 交叉编译工具链
这里要再安装一个 Poky 交叉编译工具链。这个主要是在后面编译freetype的时候出现报错了,发现用这个编译倒是没有问题。在这里补充一下安装方式吧。这个好像
1. 下载安装脚本
目前还没找到这个安装脚本应该从哪里下载,就先用正点原子官方的提供的资料里面的吧,路径是【正点原子】阿尔法Linux开发板(A盘)-基础资料\05、开发工具\01、交叉编译器:
2. 安装交叉编译器
执行下面的指令修改脚本的权限, 修改权限后可以看到此脚本颜色显示改变,说明修改成功。
1 | chmod 777 fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.1.0.sh |
直接执行脚本安装交叉编译工具,连续敲下两次回车键确认,再输入用户密码即可。本次安装的目录为脚本所指定的默认安装的目录,后面的内核编译环境的交叉编译都是按这个安装目录去操作,所以建议用户也是默认安装到/opt/fsl-imx-x11/4.1.15-2.1.0 这个默认目录。
使用方法也十分简单,根据上面打印出来的提示,直接使能环境变量就可以了。但是在不同终端或者切换用户时需要重新使能环境变量方可使用。
1 | source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi |
使能环境变量后可以使用 env 指令查看生效的环境变量,下图为部分截图,可以看出使能了这个环境变量后 gcc 已经配置好编译时所用的参数,如硬浮点参数-mfpu=neon -mfloat-abi=hard。使用硬浮点交叉编译,可以使用 CPU 自带 FPU。 下图为环境变量部分截图。
1 | env |
使用 arm-poky-linux-gnueabi-gcc -v 指令可以查看 gcc 版本,表明环境变量已经生效。
1 | arm-poky-linux-gnueabi-gcc -v |
3. 增加了哪些环境变量?
我们可以source前后打印一下env看一下,大概就是这一些差异: