Linux 内核目录(arch,drivers,include,init,ipc,kernel,mm,net,scripts,tools)

内核源码很复杂,包含多级目录,形成一个庞大的树状结构,通常称为Linux源码目录树。

序号 目录 内容
1 arch/ 包含各体系结构特定的代码,如 armx86ia64mips等,在每个体系结构目录下通常都有:
(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 内核源码中站了很大比例,常见外设几乎都有 可参考源码,对驱动开发而言,该目录非常重要。
该目录包含众多驱动,目录按照 设备类别 进行分类,如charblockinputi2cspipciusb
6 firmware/ 存放处理器相关的一些特殊固件
7 fs/ 存放所有文件系统代码,如fatext2ext3ext4ubifsnfssysfs
8 include/ 存放内核所需、与平台无关头文件,与平台相关的头文件已经被移动到arch平台的include目录,如 ARM 的头文件目录
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)驱动。特别需要关注目录,提供了i2cspi接口的EEPROM驱动范例,所驱动的设备可通过/sys系统访问
10 drivers/mmc SDSecure Digital)/MMCMutimedia Card)卡驱动目录
11 drivers/mtd MTDMemory Technology Device)子系统和驱动,包括NANDoneNAND等。
注意,UBI的实现也在MTD
12 drivers/mtd/nand NAND FALSHMTD驱动目录,包括NAND基础驱动控制器接口驱动
13 drivers/net 网络设备驱动,包括MACPHYCANUSB 网卡无线PPP协议
14 drivers/net/can CAN设备驱动。
Linux已经将CAN归类到网络中,采用socket_CAN接口
15 drivers/net/ethernet 所支持的MAC驱动
常见厂家的MAC驱动都能找到,如broadcomdavicommarvellmicrelsmsc等厂家的MAC,处理器自带MAC驱动也在该目录下
16 drivers/net/phy PHY驱动
比如marvellmicrelsmsc的一些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 HOSTGadgetUSB转串口以及OTG等支持
23 drivers/video Video驱动,包括Framebuffer驱动显示控制器驱动背光驱动等。
24 drivers/video/backlight 背光控制驱动
25 drivers/video/logo Linux内核启动LOGO图片目录
26 drivers/watchdog 看门狗驱动,包括软件看门狗和各种硬件看门狗驱动实现

熟悉各类驱动源码树中的大概位置,能帮助在开发过程中快速进行驱动源码查找和定位。一个系统到底用了哪些代码,与系统本身外设相关,也与主板配置文件相关。

你可能感兴趣的:(Linux,内核开发)