linux 内核overlay目录 linux内核所在目录
转载
内核
源码很复杂,包含多级目录
,形成一个庞大的树状结构
,通常称为Linux
源码目录树。
序号
| 目录
| 内容
|
1 | arch/
| 包含各体系结构 特定的代码,如 arm 、x86 、ia64 、mips 等,在每个体系结构目录下通常都有: (1) /boot :内核 需要的 特定平台代码 (2)/kernel :体系结构 特有的代码 (3)/lib :通用函数 在特定体系 结构的实现 (4) /math-emu :模拟FPU 的代码,在ARM中,使用/math-xxx 代替 (5) /mm :特定体系结构的内存管理 实现 (6) /include :特定体系的头文件 |
2 | block/
| 存放块设备 相关代码 |
3 | crypto/
| 存放加密 、压缩 、CRC校验 等算法相关代码 |
4 | Documentation/
| 存放相关说明文档 ,很多 实用文档,包括 驱动编写等 |
5 | drivers/
| 存放 Linux 内核设备驱动程序 源码。 驱动源码在 Linux 内核源码中站了很大比例,常见外设几乎都有 可参考源码,对驱动开发而言,该目录非常重要。 该目录包含众多驱动 ,目录按照 设备类别 进行分类,如char 、block 、input 、i2c 、spi 、pci 、usb 等 |
6 | firmware/
| 存放处理器 相关的一些特殊固件 |
7 | fs/
| 存放所有文件系统 代码,如fat 、ext2 、ext3 、ext4 、ubifs 、nfs 、sysfs 等 |
8 | include/
| 存放内核所需 、与平台无关 的头文件 ,与平台相关的头文件已经被移动到arch 平台的include 目录,如 ARM 的头文件目录<arch/arm/include/asm/> |
9 | init/
| 包含内核初始化 代码 |
10 | ipc/
| 存放进程间通信 代码 |
11 | kernel/
| 包含 Linux 内核管理 代码 |
12 | lib/
| 库文件 代码实现
|
13 | mm/
| 存放内存管理 代码 |
14 | net/
| 存放网络 相关代码 |
15 | samples/
| 存放提供的一些内核编程 范例,如kfifo ;后者相关用户态编程范例 ,如hidraw |
16 | scripts/
| 存放一些脚本文件 ,如menuconfig 脚本 |
17 | security/
| 存放系统安全性 相关代码 |
18 | sound/
| 存放声音 、声卡 相关驱动 |
19 | tools/
| 编译 过程中一些主机必要工具
|
20 | usr/
| cpio 相关实现
|
21 | virt/
| 内核虚拟机KVM |
Linux 移植通常分为:
序号
| 分类
|
1 | 体系结构 级别移植
|
2 | 处理器 级别移植
|
3 | 板级 移植
|
各级别移植难易程度差异很大,工作量和调试方式也各不相同。一般的产品开发人员所进行的内核移植
,通常都是板级移植
,这是几个级别中最简单的。
Linux内核源码
中接近一半
的代码量是驱动
,对某一个特定主板的系统而言,驱动
也占据很大的比例,底层开发
的很大一部分是驱动
相关工作。掌握从众多驱动中找到正确的驱动源码文件
,并根据产品的实际需求
进行修改调整的方法,能有效促进产品开发的进度。
Linux内核
源码树drivers
目录很复杂,包含了各种外设
的驱动
。对嵌入式Linux
开发而言,通常需要关注的目录 如下表:
序号
| 目录
| 说明
|
1 | drivers/gpio | 系统GPIO 子系统 和 驱动目录,包括处理器内部GPIO 以及外扩GPIO 驱动。遵循GPIO 子系统的驱动,可通过/sys/class/gpio 进行访问 |
2 | drivers/hwmon | 硬件监测 相关驱动,如温度传感器 、风扇监测 等
|
3 | drivers/i2c | I2C子系统 驱动。各I2C控制器 的驱动在i2c/busses 目录下
|
4 | drivers/input | 输入子系统 驱动目录
|
5 | drivers/input/keyboard | 非HID键盘 驱动,如GPIO键盘 、矩阵键盘 等 |
6 | drivers/input/touchscreen | 触摸屏驱动 ,如处理器的触摸屏控制器 驱动、外扩串行触摸屏控制器 驱动、串口触摸屏控制器 驱动等
|
7 | drivers/leds | LED 子系统和驱动,如GPIO驱动 的LED 。遵循 LED子系统的驱动 ,可通过/sys/class/leds 进行访问
|
8 | drivers/mfd | 多功能器件 (Multi-Function Device )驱动。如果一个器件能做多种用途,通常需要借助MFD 来完成。
|
9 | drivers/misc | 杂项 (Miscellaneous )驱动。特别需要关注<drivers/misc/eeprom/> 目录,提供了i2c 和spi 接口的EEPROM驱动 范例,所驱动的设备可通过/sys 系统访问
|
10 | drivers/mmc | SD (Secure Digital )/MMC (Mutimedia Card )卡驱动目录
|
11 | drivers/mtd | MTD (Memory Technology Device )子系统和驱动,包括NAND 、oneNAND 等。 注意,UBI的实现 也在MTD 中
|
12 | drivers/mtd/nand | NAND FALSH 的MTD 驱动目录,包括NAND 的基础驱动 和控制器接口驱动
|
13 | drivers/net | 网络设备 驱动,包括MAC 、PHY 、CAN 、USB 网卡 、无线 、PPP协议 等
|
14 | drivers/net/can | CAN设备 驱动。 Linux已经将CAN 归类到网络中 ,采用socket_CAN 接口
|
15 | drivers/net/ethernet | 所支持的MAC驱动 。 常见厂家的MAC驱动 都能找到,如broadcom 、davicom 、marvell 、micrel 、smsc 等厂家的MAC,处理器自带MAC 的驱动 也在该目录下 |
16 | drivers/net/phy | PHY 驱动 比如marvell 、micrel 和smsc 的一些PHY驱动
|
17 | drivers/rtc | RTC子系统 和RTC芯片驱动
|
18 | drivers/spi | SPI子系统 和SPI控制器 驱动,含GPIO 模拟SPI 的驱动
|
19 | drivers/tty | TTY 驱动
|
20 | drivers/tty/serial | 串口驱动 ,包括8250串口 以及各处理器内部串口 驱动实现
|
21 | drivers/uio | 用户空间IO 驱动
|
22 | drivers/usb | USB驱动 ,包括USB HOST 、Gadget 、USB转串口 以及OTG 等支持
|
23 | drivers/video | Video驱动 ,包括Framebuffer驱动 、显示控制器驱动 和背光驱动 等。
|
24 | drivers/video/backlight | 背光控制 驱动
|
25 | drivers/video/logo | Linux内核启动LOGO图片 目录 |
26 | drivers/watchdog | 看门狗驱动 ,包括软件看门狗 和各种硬件看门狗 驱动实现
|
熟悉各类驱动
在源码树
中的大概位置,能帮助在开发过程中快速进行驱动源码查找和定位
。一个系统到底用了哪些代码,与系统本身外设
相关,也与主板配置文件
相关。
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。