欢迎光临散文网 会员登陆 & 注册

硬件信息在内核驱动中的传递方法(平台设备)

2023-03-01 16:52 作者:秋名山西  | 我要投稿

内核驱动模型重要的三个结构体

struct device

struct device_driver

struct bus_type

详细内容放在末尾。

硬件信息在内核驱动中的传递方法(平台设备)

对于linux设备驱动模型来说,所有设备和驱动都挂接在总线上。编程者需要通过内核提供的struct device结构体告诉内核,外设工作所需要的资源,例如gpio引脚、中断、时钟等。然后通过填充内核提供的struct device_driver结构体,完成相关资源的申请并对外设进行初始化,然后为应用程序提供操作设备的方法,包括打开、关闭、读写等操作。

如果遇到一个新设备,我们发现内核设备驱动模型提供的struct device和struct device_driver结构体不能完全满足我们的需求,这时可以自行定义新结构体, 将struct device和struct device_driver嵌入其中,用于描述通用信息,不同的信息再额外添加,这样做的好处是我们新添加的结构体也可以纳入设备驱动模型中进行管理,例如struct i2c_driver、struct platform_device等。而对于platform设备驱动来说,外设的的配置信息需要传给内核的struct device,struct device中定义了专门的指针void *platform_data,用来指向存储外设备信息的结构体。以便在适合的时候被驱动读取使用。我们可以看出,指针void *platform_data并没有被指定相应的类型,也就是说可以根据不同的设备,让其指向struct xxxx_platform_data,该结构体可以由不同的驱动框架提供。例如gpio_led_platform,i2c_gpio_platform_data;

详细代码:


硬件信息在内核驱动中的传递方法(平台设备)的评论 (共 条)

分享到微博请遵守国家法律