我们来深入认识 Linux 内核源码,正式踏入驱动开发的世界。无论是对嵌入式系统开发者还是操作系统研究者来说,Linux 内核源码都是一座取之不尽的知识宝库。那么,各位小伙伴们是否已经做好了准备呢?
一、内核官方源码
TIP
我们常说的主线其实指的就是在 Linux 主线代码,也就是由 Linus Torvalds 领导的社区团队维护并不断发展的官方 Linux 内核仓库。主线版本的源码时刻在变化,集合了全球开发者不断贡献的新特性、优化和修复。
主线 Linux 内核的权威获取方式是在:https://www.kernel.org/
在其中我们可以找到不同的分支版本:
| 分支 | 维护者 | 权威用途和定位 | 目标用户 |
|---|---|---|---|
| mainline | Linus | 也就是我们常说的主线内核,是所有新功能和改动首次引入的地方,新的主线内核大约每 9-10 周发布一个正式版本。 | 开发者 |
| prepatch/RC | Linus | 是主线内核的预发布版本,主要用于社区测试和发现 bug,经过多个 RC 版本修正后正式发布新主线内核。 | 开发者/测试者 |
| stable | 专人维护 | 是在主线正式发布后维护的分支,稳定版以主线版本为基础,仅接受重要的错误修复和安全补丁,这些补丁源自主线,由指定的稳定版维护者回移移植(backport) | 所有用户 |
| longterm/LTS | 专人维护 | 长期支持,用于为较旧的内核版本持续提供关键 bug 修复和安全补丁,主要用于企业、服务器或嵌入式长期运行环境。 | 企业/长期用 |
| linux-next | 社区协作 | 下轮主线的“预合成”,社区协作和集成测试使用的分支。 | 内核开发者/集成者 |
| 子系统分支 | 各子系统维护 | 不同功能领域开发,由各自维护者维护的开发树,最终补丁流向 linux-next 和 mainline。 | 内核开发者 |
值得注意的是,半导体厂商和一些内核爱好者通常会在官网下载相应版本的内核源码,并根据自身需求进行修改和优化。例如,他们可能会针对特定的主控芯片(CPU)添加补丁或驱动程序,从而使内核能够在特定硬件平台上正常运行。
在实际开发和学习过程中,我们并不会直接从 Linux 内核官网下载源码,而是更多地依赖于半导体厂商提供的定制化源码包。然而,无论源码来自何处,都不会影响我们对其核心结构和功能的理解。
二、获取泰山派内核源码
一般泰山派的内核源码都会包含在 SDK 中,其中 SDK 还包含了芯片原厂提供的稳定版本编译器,所以我们一般情况下都会直接下载整个 SDK 的。
INFO
泰山派3M-RK3576的SDK获取:教程跳转🚀
下载完成之后,就会有这样的结构标识:
三、泰山派源码目录解析
以下是 TaishanPi-3-Linux SDK 目录结构及作用:
| 目录/文件 | 作用说明 |
|---|---|
app/ | 应用层源码或示例程序,演示、测试、实际应用代码 |
buildroot/ | Buildroot 构建系统,自动化构建根文件系统、交叉工具链等 |
debian/ | Debian 打包、定制和镜像制作脚本 |
device/ | 设备相关配置、 BSP 、硬件平台支持、编译脚本 |
docs/ | 文档目录,包含使用说明、开发手册、 API 文档、许可证等 |
external/ | 外部依赖库或第三方组件源码 |
hal/ | 硬件抽象层,屏蔽硬件差异,向上层提供统一接口 |
kernel-6.1/ | Linux 6.1 内核源码及相关补丁、配置 |
kernel → kernel-6.1/ | 指向 kernel-6.1 的软链接,便于统一访问内核源码 |
prebuilts/ | 预编译二进制文件和编译器工具链 |
rkbin/ | Rockchip 平台相关二进制固件、工具、配置 |
rtos/ | 实时操作系统( RTOS )相关源码或工程 |
tools/ | 各类开发、烧录、调试、辅助工具脚本 |
u-boot/ | U-Boot 启动加载器源码目录 |
yocto/ | Yocto 项目相关目录,定制化 Linux 发行版构建 |
.repo/ | repo 工具元数据和配置,多仓库管理 |
Copyright_Statement.md | 版权声明文件 |
Makefile | 主 Makefile,一键编译、构建整个 SDK |
build.sh | 一键构建脚本,自动化编译流程 |
envsetup.sh | 环境初始化脚本,设置交叉编译环境变量等 |
rkflash.sh | 烧录脚本,将固件写入开发板 |
tspi-sdk-init.sh | SDK 初始化脚本,环境配置与依赖安装 |