27、设备驱动与初始化程序深度解析

设备驱动与初始化程序深度解析

1. 设备驱动接口

设备驱动的主要任务是处理设备,这些设备通常是物理硬件,但有时也可能是虚拟接口,并以一致且有用的方式将它们呈现给用户空间。Linux 设备驱动大致可分为字符、块和网络三类,其中字符驱动接口最为灵活,因此也最为常见。

1.1 发现硬件配置

虚拟驱动展示了设备驱动的结构,但它仅操作内存结构,缺乏与真实硬件的交互。设备驱动通常是为与硬件交互而编写的,首先要能够发现硬件,因为在不同配置中,硬件可能位于不同地址。

部分硬件会自行提供信息,例如 PCI 或 USB 等可发现总线上的设备具有查询模式,可返回资源需求和唯一标识符。内核会将标识符及其他特征与设备驱动进行匹配。然而,嵌入式板上的大多数硬件块没有此类标识符,需要通过设备树或以 C 结构形式的平台数据来提供信息。

在 Linux 的标准驱动模型中,设备驱动会向相应的子系统(如 PCI、USB、开放固件(设备树)、平台设备等)进行注册。注册内容包括标识符和一个名为探测函数(probe function)的回调函数,当硬件 ID 与驱动 ID 匹配时,该函数会被调用。对于 PCI 和 USB 设备,ID 基于设备的供应商和产品 ID;对于设备树和平台设备,ID 则是一个名称(文本字符串)。

1.2 设备树

设备树在 Linux 设备驱动中起着重要作用。以 ARM Versatile 板的 arch/arm/boot/dts/versatile-ab.dts 为例,其中以太网适配器的定义如下:

net@100
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值