Linux设备驱动与初始化程序详解
1. 硬件配置发现
设备驱动通常用于与硬件进行交互,然而虚拟驱动仅操作内存结构,缺乏与真实硬件的交互。在实际情况中,首先需要发现硬件,因为硬件在不同配置下可能处于不同的地址。
部分硬件能够自行提供信息,例如PCI或USB等可探测总线上的设备具有查询模式,该模式会返回资源需求和唯一标识符。内核会将这些标识符以及其他可能的特性与设备驱动进行匹配并关联起来。
但大多数嵌入式板上的硬件模块并没有这样的标识符,此时就需要通过设备树或称为平台数据的C结构来提供相关信息。
在Linux的标准驱动模型中,设备驱动会向相应的子系统(如PCI、USB、开放固件(设备树)、平台设备等)进行注册。注册内容包括一个标识符和一个名为探测函数的回调函数,当硬件的ID与驱动的ID匹配时,该函数就会被调用。对于PCI和USB设备,ID基于设备的供应商和产品ID;对于设备树和平台设备,ID则是一个名称(文本字符串)。
2. 设备树
设备树在Linux设备驱动中起着重要作用。以ARM Versatile板为例,其以太网适配器在 arch/arm/boot/dts/versatile - ab.dts 文件中定义如下:
net@10010000 {
compatible = "smsc,lan91c111";
reg = <0x10010000 0x10000>;
interrupts = <25>;
};
设备树通过 co
超级会员免费看
订阅专栏 解锁全文
1496

被折叠的 条评论
为什么被折叠?



