第二章 内核源码获取与配置:选对版本,打好地基

做驱动移植,第一步不是写代码,而是拿到一套能用的内核源码。这一步看似简单,但坑不少。我见过太多新手随便从网上下个内核,编译半天发现跟芯片对不上,白白浪费时间。今天咱们就把这步走稳。

2.1 Linux内核版本选择:不是越新越好

全志T113这颗芯片,官方SDK用的是Linux 5.4.61。为什么是这个版本?说白了,芯片厂商的BSP(板级支持包)就是基于这个版本开发的。你换个新内核,驱动接口变了,还得自己适配,划不来。

内核版本 适用场景 我的建议
5.4.x LTS 全志T113官方推荐 首选,BSP最完善
5.10.x LTS 需要新特性时 需手动移植驱动,工作量较大
6.x 主线 尝鲜或学习 不推荐用于产品,驱动不全
我的经验:做产品开发,永远跟着芯片厂商的SDK版本走。我曾经为了追新内核,花了整整两周移植SPI驱动,结果发现官方5.4版本里直接就有现成的。嗯,从那以后我再也不盲目追新了。

2.2 从全志官方仓库获取源码

全志的源码托管在GitHub和Gitee上。我个人习惯用Gitee,国内访问快。具体操作分三步:

  1. 找到仓库:搜索"allwinner T113 Linux SDK"
  2. 确认分支:通常是 t113-v1.x 或 t113-linux-5.4
  3. 克隆代码:
git clone https://github.com/allwinner-zh/linux-5.4.git -b t113-v1.0
cd linux-5.4
注意:全志的仓库比较大,包含多个芯片的代码。克隆时加上 --depth=1 可以只拉最新版本,省时间。我第一次没加这个参数,等了快一个小时。

2.3 内核目录结构解析:别迷路

拿到源码后,先别急着编译。花5分钟看看目录结构,后面找文件会快很多。我刚开始做内核移植时,经常在目录里转晕,后来总结了一张图:

Linux内核源码核心目录结构 linux-5.4/ (根目录) arch/ drivers/ include/ Documentation/ arm/ arm64/ ... (其他架构) spi/ i2c/ gpio/ linux/ asm-arm/ configs/ boot/ mach-sunxi/ 关键目录说明 • arch/arm/configs/ → 板级默认配置 • drivers/spi/ → SPI控制器驱动 • arch/arm/mach-sunxi/ → 全志平台代码 • include/linux/spi/ → SPI头文件

你重点关注这几个目录:

  • arch/arm/configs/:里面放着各个开发板的默认配置文件,比如 sun8i_t113_defconfig
  • drivers/spi/:SPI控制器驱动都在这里,我们后面要改的就是它
  • arch/arm/mach-sunxi/:全志平台相关的初始化代码

2.4 基础配置:找到T113的默认配置

全志T113属于Cortex-A7架构,所以配置在 arch/arm/configs/ 下。怎么找?我教你一个命令:

ls arch/arm/configs/ | grep t113

正常情况下你会看到类似 sun8i_t113_defconfig 的文件。这就是T113的默认配置。为什么叫 sun8i?全志的芯片家族代号,T113属于sun8i系列。

关键操作:加载默认配置
make ARCH=arm sun8i_t113_defconfig

这条命令会把默认配置写入 .config 文件。后面所有修改都基于这个文件。

2.5 menuconfig图形化配置入门

默认配置只是基础,很多时候我们需要微调。比如你要开启SPI驱动、调试打印或者关闭某些不需要的功能。这时候 menuconfig 就派上用场了。

启动命令很简单:

make ARCH=arm menuconfig

你会看到一个蓝底白字的界面。第一次用可能会懵,其实操作很简单:

按键 功能
↑ ↓ 上下移动光标
Enter 进入子菜单 / 确认选择
Space 切换选项状态(Y/N/M)
/ 搜索功能,快速定位配置项
Esc Esc 返回上一级 / 退出

举个例子,我们要开启SPI驱动:

  1. 进入 Device Drivers
  2. 找到 SPI support
  3. 按 Y 选中(编译进内核)或 M(编译为模块)
  4. 进入子菜单,选择具体的SPI控制器驱动
我的习惯:调试阶段把SPI驱动编译进内核(Y),这样不用额外加载模块。产品阶段再改成模块(M),方便更新。另外,/ 搜索功能特别好用,比如搜 SPI_SUN6I 能直接定位到全志的SPI控制器配置。

2.6 保存配置与后续操作

配置完成后,选择 Save 退出。配置会保存到 .config 文件。如果你想备份这个配置:

cp .config arch/arm/configs/my_t113_defconfig

这样下次可以直接用 make my_t113_defconfig 加载,不用重新配置。

避坑提醒:我曾经犯过一个错误——直接在 .config 文件里手动改配置。结果格式不对,编译报了一堆错。记住,永远用 menuconfig 或 make xxx_defconfig 来修改配置,别手改。