第二章:开发环境搭建——交叉编译工具链安装、SDK获取与解压、基础环境验证
好,咱们正式开始动手了。
这一章,说白了就是给T507这个“芯”搭个窝。你想想看,车载仪表盘跑的是Linux,但代码是在PC上写的。怎么让PC上编译的程序,能在ARM架构的T507上跑起来?答案就是——交叉编译。
2.1 交叉编译工具链:为什么需要它?
我刚开始做嵌入式那会儿,也犯过迷糊。直接在PC上gcc编译,拷到板子上,一运行——段错误。后来才明白,PC是x86架构,T507是ARM Cortex-A53架构,指令集都不一样,怎么可能跑得起来?
交叉编译工具链,就是一套在PC上生成ARM可执行文件的工具集。它包括编译器、链接器、库文件等等。说白了,就是让PC“客串”一下ARM的开发环境。
核心概念:
- 宿主机(Host):你的PC,通常是x86_64架构,运行Ubuntu 18.04或20.04。
- 目标机(Target):全志T507,ARM Cortex-A53架构,运行Linux。
- 工具链前缀:全志官方工具链通常是
aarch64-linux-gnu-开头。
2.2 安装交叉编译工具链
全志官方提供了两种方式:一是用他们打包好的SDK,里面自带工具链;二是单独下载工具链压缩包。我个人习惯用第二种,因为更灵活,也方便后续升级。
步骤一:下载工具链
全志T507的官方工具链,一般叫 gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz。你可以在全志开发者社区或者百度网盘里找到。我记得第一次找这个文件,翻了好几个论坛才找到正确的版本,后来我干脆把它备份到了自己的NAS上。
步骤二:解压到指定目录
我习惯把工具链放在 /opt/ 目录下,这样所有用户都能用。
# 创建目录
sudo mkdir -p /opt/toolchains
# 解压工具链
sudo tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz -C /opt/toolchains/
# 检查是否解压成功
ls /opt/toolchains/
# 你应该能看到一个类似 gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu 的文件夹
步骤三:配置环境变量
每次编译都输一长串路径?太累了。我们把它加到 ~/.bashrc 里,一劳永逸。
# 编辑 .bashrc
vim ~/.bashrc
# 在文件末尾添加以下内容
export PATH=$PATH:/opt/toolchains/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
# 使配置生效
source ~/.bashrc
小提示:配置完环境变量后,可以执行 echo $PATH 检查一下路径是否加进去了。如果没生效,重启终端或者重新登录一下。
2.3 SDK获取与解压
全志T507的SDK,通常是一个巨大的压缩包,里面包含了Linux内核源码、U-Boot源码、文件系统、以及各种驱动和库。我见过最大的SDK有20多个G,解压出来接近40G。所以,你的硬盘空间要留够。
获取方式:
- 官方渠道:全志开发者平台(需要注册并签署NDA)。
- 第三方渠道:一些开发板厂商(如飞凌、盈鹏飞)会提供定制版的SDK。
解压SDK:
SDK通常是 .tar.gz 或 .tar.xz 格式。我建议用 tar 命令,加上 -v 参数可以实时看到解压进度,不然干等着心里没底。
# 解压SDK(以 .tar.gz 为例)
tar -xzvf T507_Android10_SDK_V1.0.tar.gz -C ~/workspace/
# 如果是 .tar.xz 格式
tar -xJvf T507_Linux_SDK_V1.0.tar.xz -C ~/workspace/
注意:解压路径不要包含中文或空格!我曾经因为路径里有个空格,导致编译脚本报了一堆莫名其妙的错误,排查了整整一个下午。血的教训啊。
2.4 基础环境验证
工具链装好了,SDK也解压了。怎么知道环境是不是真的搭好了?写个简单的C程序,交叉编译一下,再放到板子上跑。这是最直接的方法。
步骤一:编写测试代码
创建一个 hello_t507.c 文件:
#include <stdio.h>
int main() {
printf("Hello from T507!\n");
printf("Architecture: ARM64\n");
return 0;
}
步骤二:交叉编译
# 使用交叉编译器编译
aarch64-linux-gnu-gcc -o hello_t507 hello_t507.c
# 查看生成的文件信息
file hello_t507
# 输出应该类似:hello_t507: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, not stripped
看到 ARM aarch64 了吗?这说明编译出来的程序是ARM64架构的,可以在T507上运行。
步骤三:验证SDK中的内核配置
SDK解压后,进入内核源码目录,检查一下默认配置是否能加载。
# 进入内核源码目录
cd ~/workspace/T507_Linux_SDK/kernel/
# 查看支持的配置文件
ls arch/arm64/configs/
# 加载T507的默认配置(具体文件名可能不同,常见的是 t507_linux_defconfig)
make ARCH=arm64 t507_linux_defconfig
# 如果没报错,说明内核源码和配置环境是OK的
验证清单:
| 验证项 | 预期结果 | 检查命令 |
|---|---|---|
| 工具链版本 | 显示 gcc 版本号 | aarch64-linux-gnu-gcc --version |
| 交叉编译 | 生成 ARM64 可执行文件 | file hello_t507 |
| SDK完整性 | 内核源码目录结构完整 | ls kernel/ |
| 环境变量 | PATH 包含工具链路径 | echo $PATH | grep toolchains |
2.5 避坑指南
嗯,这里我要多说几句。搭建环境看起来简单,但坑是真不少。
- 工具链版本不匹配:全志官方SDK一般会指定工具链版本。比如Android 10的SDK,要求用gcc 7.5.0。你非要用gcc 9.x,编译内核时可能会报一些奇怪的语法错误。我建议严格按照SDK文档来。
- 磁盘空间不足:SDK解压后动辄几十G,编译时还会生成大量中间文件。我建议至少留出100G的空闲空间。有一次我编译到一半,磁盘满了,结果整个编译目录都乱了,最后只能重来。
- 权限问题:解压SDK时,如果用了
sudo,解压出来的文件所有者是root。后续编译时,普通用户可能没有写权限。我习惯用sudo chown -R $USER:$USER ~/workspace/把所有权改回来。 - 依赖库缺失:在Ubuntu上编译,可能会提示缺少
ncurses、flex、bison等库。别慌,用apt-get install装上就行。
我的小习惯:每次搭建新环境,我都会写一个 setup_env.sh 脚本,把安装工具链、配置环境变量、安装依赖库这些步骤自动化。这样下次换电脑或者重装系统时,一键就能恢复环境。省心省力。
好了,环境搭好了,工具链也验证通过了。下一章,咱们就开始真正接触T507的启动流程和U-Boot移植。那才是真正有意思的部分。