3、获取源码:从ARM官网下载GCC源码、从kernel.org下载Linux内核源码、从sourceware.org下载binutils和glibc源码

好,源码获取这一步,说白了就是去官方仓库“提货”。

我个人习惯把源码下载看作整个工具链搭建的基石。你想想看,如果地基都不稳,后面编译出问题你都不知道该怪谁。我见过太多新手随便找个第三方打包的源码,结果编译到一半报错,排查半天发现是源码被改过——嗯,这种坑我踩过不止一次。

3.1 下载GCC源码:从ARM官网出发

GCC是编译器的大脑。我们要交叉编译,就得用ARM版本的GCC。

为什么不去GCC官网?因为ARM官网提供的版本是专门针对ARM架构优化过的,打好了补丁。我在项目中试过直接用GNU官方的GCC源码,结果编译出来的程序在ARM板子上跑起来总有点小毛病。后来换成ARM官网的版本,问题就消失了。

下载地址:https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain

具体操作步骤:

  1. 打开ARM官网的GNU Toolchain页面
  2. 选择对应架构的版本(比如aarch64或arm32)
  3. 找到源码包(通常以.tar.xz结尾)
  4. 用wget或curl下载
# 以ARM64为例,下载GCC 12.2版本
wget https://developer.arm.com/-/media/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-x86_64-aarch64-none-linux-gnu.tar.xz

小技巧:我个人习惯把下载的源码统一放在/opt/toolchain/src/目录下,方便管理。你可以在家目录下建个src文件夹,随你喜好。

3.2 下载Linux内核源码:kernel.org是唯一选择

内核源码必须从kernel.org下载。为什么?因为这是Linus Torvalds亲自维护的官方仓库,所有补丁和更新都从这里发出。

我记得有一次项目急着用,从某个镜像站下载了内核源码,结果编译时发现头文件版本对不上——镜像站同步有延迟,少了一个关键补丁。从那以后,我只认kernel.org。

# 下载Linux 6.1 LTS版本(长期支持版,推荐)
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.1.tar.xz

# 解压
tar -xf linux-6.1.tar.xz

这里有个选择问题:该用哪个版本?

  • LTS版本:稳定,适合产品开发。我建议新手直接选LTS。
  • 主线版本:功能最新,但可能有bug。适合尝鲜或研究。
  • 稳定版本:介于两者之间,修复了主线的一些问题。

注意:不要下载rc(候选发布)版本做产品开发。我曾经图新鲜用了rc版,结果内核模块接口变了,导致驱动全部重写——血的教训。

3.3 下载binutils和glibc:sourceware.org是老家

binutils和glibc是工具链的另外两个核心组件。它们都托管在sourceware.org上。

binutils负责汇编、链接等底层操作。glibc是C运行库,应用程序跑起来全靠它。

# 下载binutils 2.40
wget https://sourceware.org/pub/binutils/releases/binutils-2.40.tar.xz

# 下载glibc 2.37
wget https://sourceware.org/pub/glibc/releases/glibc-2.37.tar.xz

版本搭配很重要。我列个表,方便你对照:

组件 推荐版本 下载路径
GCC 12.2 ARM官网
Linux内核 6.1 LTS kernel.org
binutils 2.40 sourceware.org
glibc 2.37 sourceware.org

核心原则:版本之间要兼容。GCC 12.2搭配binutils 2.40和glibc 2.37,是我在项目中验证过的组合,稳定可靠。

3.4 本章知识体系:源码获取全景图

下面这张图帮你理清四个组件的关系和下载来源:

工具链源码获取全景图 交叉编译工具链 GCC 编译器 Linux 内核 binutils glibc 来源:ARM官网 来源:kernel.org 来源:sourceware.org 来源:sourceware.org 推荐版本:GCC 12.2 + 内核 6.1 LTS + binutils 2.40 + glibc 2.37 所有源码均从官方渠道下载,确保纯净无修改

3.5 避坑指南:我踩过的那些坑

最后分享几个我亲身经历过的坑,你遇到了可以少走弯路:

  • 版本不匹配:我曾经把GCC 11和glibc 2.38混在一起用,结果编译时一堆符号找不到。后来老老实实查了官方兼容性列表。
  • 下载中断:源码包很大,网络不稳定容易断。我建议用wget -c支持断点续传,或者用aria2c多线程下载。
  • 解压失败:下载的压缩包可能损坏。下载完后用sha256sum校验一下,官方页面会提供校验值。
  • 路径含中文:源码路径里不要有中文或空格。我见过有人把源码放在“桌面”目录下,编译时各种奇葩错误。

我的习惯:下载完所有源码后,我会在/opt/toolchain/src/下建一个checksum.txt文件,记录每个包的校验值。这样以后出问题可以快速排查是不是源码被改了。

好了,源码都拿到手了。下一步就是解压、打补丁、配置编译选项——嗯,那是下一节的内容了。


专注资料整理