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

学习平台驱动有感

2023-04-04 11:35 作者:秋名山西  | 我要投稿

之前学习都是一遍带过,今天回过头来整理,在此记录。

对于LED驱动框架,驱动程序的首要任务就是完成这个结构体的实例的填充。

由于这里我们是打算使用平台总线的方式实现LED驱动。因此,势必还需要向内核注册一个struct platform_device的实例,如下:

在这个结构体中,除了中断、内存的数据需要放进struct resource中,其他的数据(例如gpio)则需要放入平台数据(paltform_data),位于struct platform_device中的struct device dev中,即platform_device.dev.platform_data。

也就是说,对于平台总线设备,在内核中应当有一个专门的结构体用来存储平台总线数据,即

struct platform_data,内核有的话不需要额外添加,不然则需要自己添加。最后将这个结构体以指针的形式放进struct platform_device中,向内核注册设备。

在s5pv210中,需要添加struct platform_data结构体,因此在arch/arm/s5pv210的include/mach下新增了leds-gpio.h,用于添加struct platform_data。然后在mach-210.c中添加struct platform_data的实例,并在smkc110_machine_init中添加设备结构体,以便在内核初始化的时候注册设备到内核中。


一旦平台驱动与平台设备匹配成功后,驱动中的probe函数就会被执行,在这个函数中,获取设备信息:void dev_get_platdata(const struct device *dev);

对于led框架的驱动,在填充完struct led_classdev结构体后,就可以调用int led_classdev_register(struct device *dev,struct led_classdev)向led驱动框架注册驱动。


学习平台驱动有感的评论 (共 条)

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