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

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

序号目录内容
1arch/包含各体系结构特定的代码,如 armx86ia64mips等,在每个体系结构目录下通常都有:
(1) /boot内核需要的 特定平台代码
(2)/kernel体系结构特有的代码
(3)/lib通用函数特定体系结构的实现
(4) /math-emu模拟FPU的代码,在ARM中,使用/math-xxx代替
(5) /mm:特定体系结构的内存管理实现
(6) /include:特定体系的头文件
2block/存放块设备相关代码
3crypto/存放加密压缩CRC校验等算法相关代码
4Documentation/存放相关说明文档,很多 实用文档,包括 驱动编写等
5drivers/存放 Linux 内核设备驱动程序源码。
驱动源码在 Linux 内核源码中站了很大比例,常见外设几乎都有 可参考源码,对驱动开发而言,该目录非常重要。
该目录包含众多驱动,目录按照 设备类别 进行分类,如charblockinputi2cspipciusb
6firmware/存放处理器相关的一些特殊固件
7fs/存放所有文件系统代码,如fatext2ext3ext4ubifsnfssysfs
8include/存放内核所需、与平台无关头文件,与平台相关的头文件已经被移动到arch平台的include目录,如 ARM 的头文件目录<arch/arm/include/asm/>
9init/包含内核初始化代码
10ipc/存放进程间通信代码
11kernel/包含 Linux 内核管理代码
12lib/库文件代码实现
13mm/存放内存管理代码
14net/存放网络相关代码
15samples/存放提供的一些内核编程范例,如kfifo;后者相关用户态编程范例,如hidraw
16scripts/存放一些脚本文件,如menuconfig脚本
17security/存放系统安全性相关代码
18sound/存放声音声卡相关驱动
19tools/编译过程中一些主机必要工具
20usr/cpio相关实现
21virt/内核虚拟机KVM

Linux 移植通常分为:
序号分类
1体系结构级别移植
2处理器级别移植
3板级移植

各级别移植难易程度差异很大,工作量和调试方式也各不相同。一般的产品开发人员所进行的内核移植,通常都是板级移植,这是几个级别中最简单的。

Linux内核源码接近一半的代码量是驱动,对某一个特定主板的系统而言,驱动也占据很大的比例,底层开发的很大一部分是驱动相关工作。掌握从众多驱动中找到正确的驱动源码文件,并根据产品的实际需求进行修改调整的方法,能有效促进产品开发的进度。

Linux内核源码树drivers目录很复杂,包含了各种外设驱动。对嵌入式Linux开发而言,通常需要关注的目录 如下表:

序号目录说明
1drivers/gpio系统GPIO子系统 和 驱动目录,包括处理器内部GPIO以及外扩GPIO驱动。遵循GPIO子系统的驱动,可通过/sys/class/gpio进行访问
2drivers/hwmon硬件监测相关驱动,如温度传感器风扇监测
3drivers/i2cI2C子系统驱动。各I2C控制器的驱动在i2c/busses目录下
4drivers/input输入子系统驱动目录
5drivers/input/keyboardHID键盘驱动,如GPIO键盘矩阵键盘
6drivers/input/touchscreen触摸屏驱动,如处理器的触摸屏控制器驱动、外扩串行触摸屏控制器驱动、串口触摸屏控制器驱动等
7drivers/ledsLED子系统和驱动,如GPIO驱动LED。遵循 LED子系统的驱动 ,可通过/sys/class/leds进行访问
8drivers/mfd多功能器件Multi-Function Device)驱动。如果一个器件能做多种用途,通常需要借助MFD来完成。
9drivers/misc杂项Miscellaneous)驱动。特别需要关注<drivers/misc/eeprom/>目录,提供了i2cspi接口的EEPROM驱动范例,所驱动的设备可通过/sys系统访问
10drivers/mmcSDSecure Digital)/MMCMutimedia Card)卡驱动目录
11drivers/mtdMTDMemory Technology Device)子系统和驱动,包括NANDoneNAND等。
注意,UBI的实现也在MTD
12drivers/mtd/nandNAND FALSHMTD驱动目录,包括NAND基础驱动控制器接口驱动
13drivers/net网络设备驱动,包括MACPHYCANUSB 网卡无线PPP协议
14drivers/net/canCAN设备驱动。
Linux已经将CAN归类到网络中,采用socket_CAN接口
15drivers/net/ethernet所支持的MAC驱动
常见厂家的MAC驱动都能找到,如broadcomdavicommarvellmicrelsmsc等厂家的MAC,处理器自带MAC驱动也在该目录下
16drivers/net/phyPHY驱动
比如marvellmicrelsmsc的一些PHY驱动
17drivers/rtcRTC子系统RTC芯片驱动
18drivers/spiSPI子系统SPI控制器驱动,含GPIO 模拟SPI的驱动
19drivers/ttyTTY 驱动
20drivers/tty/serial串口驱动,包括8250串口以及各处理器内部串口驱动实现
21drivers/uio用户空间IO驱动
22drivers/usbUSB驱动,包括USB HOSTGadgetUSB转串口以及OTG等支持
23drivers/videoVideo驱动,包括Framebuffer驱动显示控制器驱动背光驱动等。
24drivers/video/backlight背光控制驱动
25drivers/video/logoLinux内核启动LOGO图片目录
26drivers/watchdog看门狗驱动,包括软件看门狗和各种硬件看门狗驱动实现

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

  • 15
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值