01、Linux 内核源码初识
我们来深入认识 Linux 内核源码,正式踏入驱动开发的世界。无论是对嵌入式系统开发者还是操作系统研究者来说,Linux 内核源码都是一座取之不尽的知识宝库。那么,各位小伙伴们是否已经做好了准备呢?
一、内核官方源码
Linux内核的主线代码。
Linux 内核源码的官方网站为 https://www.kernel.org/,这是获取最新版本内核源码的权威渠道。进入该网站后,您会看到如下界面:
从上图可以看出,Linux 内核源码分为多个分支版本,主要包括以下三类:
- 主线版本(Mainline)
主线版本由 Linus Torvalds(Linux 之父)亲自维护,代表了内核开发的最新进展。它包含了最新的功能和改进,但可能尚未经过充分测试,因此稳定性稍逊。 - 稳定版本(Stable)
稳定版本是主线版本的一个分支,经过更严格的测试和修复,适合大多数用户使用。 - 长期支持版本(Longterm)
长期支持版本提供了更长的维护周期,适用于需要长时间运行的生产环境。这些版本通常由社区维护者负责更新,确保其兼容性和安全性。
值得注意的是,半导体厂商和一些内核爱好者通常会在官网下载相应版本的内核源码,并根据自身需求进行修改和优化。例如,他们可能会针对特定的主控芯片(CPU)添加补丁或驱动程序,从而使内核能够在特定硬件平台上正常运行。
在实际开发和学习过程中,我们并不会直接从 Linux 内核官网下载源码,而是更多地依赖于半导体厂商提供的定制化源码包。然而,无论源码来自何处,都不会影响我们对其核心结构和功能的理解。
二、泰山派的内核源码
开发板配套的源码。
To be determined 4.19 内核仓库:
5.10 内核仓库:
https://github.com/TaishanPi/kernel
三、内核源码结构
目录的内容如下表所示:
arch | 存放不同平台体系相关代码 |
---|---|
block | 存放块设备相关代码 |
crypto | 存放加密、 压缩、 CRC 校验等算法相关代码 |
Documentation | 存放相关说明文档, 很多实用文档, 包括驱动编写等 |
drivers | 存放 Linux 内核设备驱动程序源码。 该目录包含众多驱动, 目录按照设备类别进行分类, 如 char、 block 、 input、 i2c、 spi、 pci、 usb 等。 |
firmware | 存放处理器相关的一些特殊固件 |
fs | 存放虚拟文件系统代码 |
include | 存放内核所需、 与平台无关的头文件 |
init | Linux 系统启动初始化相关的代码 |
ipc | 存放进程间通信代码 |
kernel | Linux 内核的核心代码, 包含了进程调度子系统, 以及和进程调度相关的模块。 |
lib | 库文件代码, 实现需要在内核中使用的库函数, 例如 CRC、 FIFO、 list、 MD5等。 |
mm | 实现存放内存管理代码 |
net | 存放网络相关代码 |
samples | 存放提供的一些内核编程范例 |
scripts | 存放一些脚本文件 |
security | 存放系统安全性相关代码 |
sound | 存放声音、 声卡相关驱动 |
tools | 一些常用工具, 如性能剖析、 自测试等 |
usr | 用于生成 initramfs 的代码。 |
virt | 提供虚拟机技术(KVM 等) 的支持 |