Linux设备驱动与初始化程序详解
1. 硬件配置发现
设备驱动通常用于与硬件交互,而发现硬件是其中重要的一环。因为在不同配置中,硬件可能处于不同地址。
1.1 硬件自动提供信息
部分可发现总线(如PCI或USB)上的设备有查询模式,能返回资源需求和唯一标识符。内核会将这些标识符及其他特征与设备驱动进行匹配。
1.2 手动提供信息
多数嵌入式板上的硬件块没有标识符,需要通过设备树或平台数据(C结构)提供信息。在Linux标准驱动模型中,设备驱动会向相应子系统(如PCI、USB、开放固件(设备树)、平台设备等)注册,注册内容包括标识符和探测函数(probe function)。
1.2.1 设备树示例
以ARM Versatile板为例,以太网适配器在设备树中的定义如下:
net@10010000 {
compatible = "smsc,lan91c111";
reg = <0x10010000 0x10000>;
interrupts = <25>;
};
1.2.2 平台数据示例
在没有设备树支持时,可使用平台数据描述硬件。以下是以太网控制器的平台数据示例:
#define VERSATILE_ETH_BASE 0x10010000
#define IRQ_ETH 25
static struct
超级会员免费看
订阅专栏 解锁全文
1498

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



