黑马程序员技术交流社区

标题: 【上海校区】linux驱动学习之platform总线学习 [打印本页]

作者: 不二晨    时间: 2018-7-2 09:35
标题: 【上海校区】linux驱动学习之platform总线学习

platform总线通常使用基于两个部分,一个部分是device,一个部分是driver.


我以一个简单的led的例子为例总结platform总线的使用。

我使用的是s5pv210处理器,所以我以该处理器为例总结,其实linux驱动,对任何处理器都一样。


首先以实现device部分。

device主要是数据。

首先我在自定义一个结构体,最好是自己创建一个头文件,方便驱动部分好包含。

我定义的放在对应处理器的mach目录下面,因为这个目录下都是放的和处理器相关的头文件。

很简单,主要就是led的一些信息

接下来就是填充这个结构体了。


我的板子上有三个led,我就定义了三个相对应的结构体。

struct s5pv210_led_platdata这个结构体里面的gpio我使用了gpiolib库的定义。

name自己定义,flags可以自定义其作用,比如输入输出,上下拉等。

def_trigger可以表示该gpio可以表示某个设备运行等,这里我没有使用。


struct platform_device这是一个通用的结构体,每个使用平台总线的设备都可以使用其方便构建自己的驱动。

这个结构体比较重要,name非常重要,必须和驱动名一样,是匹配驱动的唯一途径。

id是表示区分同类设备。

我们这里关注struct device dev;

struct device这个结构体里面数据很多,我们主要关注void        *platform_data;

因为这个平台数据指针,就是设计为了给驱动传参用的(看注释)。void *可以串任何类型的指针就更方便了。

而我这里就是把每个led自定义的结构体struct s5pv210_led_platdata的地址放了进去。


自己做一个结构体,把自己创建的平台设备数据放进去。

利用下面这个函数注册进入,device这边就已经结束了。platform_add_devices(smdkv210_devices, ARRAY_SIZE(smdkv210_devices));当然,比较简单的方式是把自己的设备数据,添加到原来的设备后面,就可以不用自己添加了。


接下来看驱动部分。

大的部分看就是平台数据的注册和卸载。

驱动的注册和卸载是固定的比较简单。但里面填充的驱动模型,这个最主要的。

下面看一下平台驱动模型的原型。

上面这个驱动模型比较全面。而我的led的需要很简单,只需要填充probe和remove函数即可。

还有一个比较中要的是driver,这个里面的东西是和设备注册那时候的做匹配的。(名字匹配)

这里我们主要关注char *naem和 driver_private *p。

其中name主要是这个驱动的名字。为了和对应设备匹配,驱动名字必须和设备名字一致。

driver_private *p的使用可以看我的上一个博客。

接下来我们看最主要的连个函数probe和remove。

其中probe是负责设备初始化的。remove是负责卸载设备的时候做收尾工作的。


因为我们这里是led,所以使用了led的设备驱动模型。


所以初始化部分用的是led的设备模型初始化的。

这个函数里注释比较明确,唯一需要说明的是flags,因为pdata->flags是我们子定义的功能,前面在设备部分说明已的是做输入输出标志或输出的默认电平标志。这里我们led是做输出的,默认给的高电平。所以没用这个标志,但千万不能赋值和led->cdev.flags.因为这个cdev是led的设备模型定义的标志,其作用已经固定了。我就是刚在开始赋值的,导致led被挂起。不能操纵。

可以看到下面led类里面就用到

它们的定义如下。

probe函数里注册led的驱动模型的时候需要用到一个brightness_set函数,这个函数就是led的设备模型中干活的函数,用来设置led的量灭的。

下面几个就是上面用到的一些的数据类型和工具函数。

总结:上面设备部分用到了palaform_device的一些知识。

下面驱动部分用到了platform_driver和led设备模型,以及gpiolib库的简单应用。

几个知识点算是对上一周学习的总结。


【转载】原文地址: https://blog.csdn.net/qq_16777851/article/details/80850526





作者: 吴琼老师    时间: 2018-7-5 17:35

作者: 不二晨    时间: 2018-7-17 14:13
棒棒哒




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2