主要包括两个目录:
一、arch
平台架构处理器相关代码,包括mips、powpc、arm、x86等。
二、driver
各个驱动相关代码,内核中70%都是驱动代码,而且经常变化的也是驱动代码。嵌入式主要关心的驱动设备如下:
1.input 目录
重点要了解的驱动,特别是安卓系统,是所有输入设备的中间层,向系统上报数据,比如按键的键值、触摸屏坐标以及各种传感器的数值等,是我们最常用的驱动。在使用的2440开发板上的按键、触摸屏、红外遥控解码器、蜂鸣器的驱动都在input中。
2.i2c 总线
需要有一个住控制器,然后把各种i2c设备挂接在总线上。其中bussess就是各种处理器的i2c主控制器的驱 动.目前使用i2c的设备越来越多,其驱动零食的分布在各个具体设备的驱动目录下,比如,input、camera 等。
3.hwmon(hardware monitor)
用于检测cpu温度、电压、风扇转速等设备监测传感器的驱动
4.hid (human interface device)
人机接口,比如鼠标键盘灯设备
5.char
比较复杂的字符型设备
6.watchdog
各种处理器的硬件看门狗驱动
7.w1
达拉斯单总线设备,比如我们熟悉的DS18B20
8.video
显示相关设备,比如framebuff、背光的驱动
9.usb
usb所有驱动
10.spi
spi总线和各种spi控制器的驱动,如spi_s3c24xx.c就是s3c2440的spi总线驱动
11.serial
串口器件相关驱动
12.rtc
实时时钟
13. power
电源、电池、电量有关的
14.net
所有网络相关,比如以太网卡、wifi等
15.mtd
存储设备的驱动,我们用到的主要是nandflash的驱动
16.mmc
sd卡相关驱动
17.misc
一些混杂的,没有归类的设备
18.media
多媒体相关的,主要是video(摄像头的)、radio(收音机)等
19.LED
LED驱动
对应于安卓,linux也有一个HAL层(硬件抽象层)-----驱动子系统:
Input(输入子系统):可以将触摸屏、按键、sensor等设备所产生的值,以统一方式上报系统
FrameBuffer(显示子系统):屏蔽各种显示设备的硬件差异
V4L2(视频设备子系统):将各种camera的硬件驱动封装起来,提供给上层使用
MTD(存储设备子系统)
USB(USB子系统)
....
可以把任何驱动对应到一种子系统之中