Linux 内核目录(arch,drivers,include,init,ipc,kernel,mm,net,scripts,tools)
内核源码很复杂,包含多级目录,形成一个庞大的树状结构,通常称为Linux源码目录树。目录内容arch/包含各体系结构特定的代码,如arm、x86、ia64、mips等,在每个体系结构目录下通常都有: /boot:内核需要的特定平台代码 /kernel:体系结构特有的代码 /lib:通用函数在特定体系结构的实现 /math-emu:模拟FPU的代码,在ARM中,使用/ma...
·
内核源码很复杂,包含多级目录,形成一个庞大的树状结构,通常称为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 |
看门狗驱动,包括软件看门狗和各种硬件看门狗驱动实现 |
熟悉各类驱动在源码树中的大概位置,能帮助在开发过程中快速进行驱动源码查找和定位。一个系统到底用了哪些代码,与系统本身外设相关,也与主板配置文件相关。
更多推荐



所有评论(0)