第二章 内核源码获取与配置:选对版本,打好地基
做驱动移植,第一步不是写代码,而是拿到一套能用的内核源码。这一步看似简单,但坑不少。我见过太多新手随便从网上下个内核,编译半天发现跟芯片对不上,白白浪费时间。今天咱们就把这步走稳。
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,国内访问快。具体操作分三步:
- 找到仓库:搜索"allwinner T113 Linux SDK"
- 确认分支:通常是
t113-v1.x或t113-linux-5.4 - 克隆代码:
git clone https://github.com/allwinner-zh/linux-5.4.git -b t113-v1.0
cd linux-5.4
注意:全志的仓库比较大,包含多个芯片的代码。克隆时加上
--depth=1 可以只拉最新版本,省时间。我第一次没加这个参数,等了快一个小时。
2.3 内核目录结构解析:别迷路
拿到源码后,先别急着编译。花5分钟看看目录结构,后面找文件会快很多。我刚开始做内核移植时,经常在目录里转晕,后来总结了一张图:
你重点关注这几个目录:
- 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驱动:
- 进入
Device Drivers - 找到
SPI support - 按
Y选中(编译进内核)或M(编译为模块) - 进入子菜单,选择具体的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 来修改配置,别手改。