0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【分享】DIY爱好者倒腾LED时,总结了几点Linux驱动开发方法

lPCU_elecfans 来源:未知 作者:肖冰 2019-07-11 10:43 次阅读

一开接触设备树,我就不知道设备树与驱动的关系,设备树是在内核3.0以后才有的。不过3.0以前的和3.0以后的驱动其实变化不大。

驱动的开发方法可以分为三种:传统方法,总线方法,设备树方法。这篇文章围绕点亮一颗LED来说明这三种方法。

驱动流程分为5个部分:

1、分配

2、设置

3、注册file_operation

4、入口

5、出口

一、传统方法

传统方法就是简单粗暴方法,就是将IO设置,驱动放在同一个文件(drv.c)。

drv.c:定义引脚信息

drv.c:驱动中的open函数

drv.c:驱动中的close函数

drv.c:file_operations结构体

为上层应用提供open(),write(),read(),close()。

drv.c:入口函数-申请设备号,创建设备节点

其中register_chrdev():申请设备号。

class_create():创建一个设备类。

device_create():创建一个设备节点,路径:/dev/led

drv.c:出口函数-注销设备,注销设备节点

其中unregister_chrdev():通过主设备号,注销设备号

device_destroy():注销设备节点

class_destroy():注销设备类

传统方法:

优点:操作简单

缺点:不易扩展,每次修改需要重新编译驱动

二、总线方法

在kernel 3.0之前都是采用总线的方法实现驱动与设备之间的联系。把驱动跟设备分开。

其主要理解几个结构体:

①跟设备有关的结构体:structplatform_device{};

②跟驱动有关的结构体:structplatform_driver{};

还要理解其中包含的两个结构体:

-> struct device_driver{};

-> structplatform_device_id{};

要记住一句话:在match的时候:优先匹配id_table的name,不匹配。再匹配driver的name

其中

dev.c:进行设备的引脚定义,定义resouce结构体,供驱动获取资源。

dev.c:注册platform_device结构体

dev.c:入口函数-注册设备

其中platform_device_register():在总线上注册一个设备。

dev.c:出口函数-注销设备

其中platform_device_unregister():在总线上注销一个设备。

对于驱动来说,需要稍微修改一下:

drv.c:增加probe函数和remove函数,其中:

probe()函数:充当传统方法的init函数

remove()函数:充当传统方法的exit函数

platform_get_resource():获取设备中资源,比如引脚定义。

drv.c :入口函数和出口函数修改

将传统方法的file_operations{};结构体改为platform_driver{};结构体

其中platform_driver_register():向总线注册一个设备。

platform_driver_unregister():向总线注销一个设备。

platform总线中的match()函数是设备与驱动匹配的函数,我们看看这个函数的实现,就是匹配设备与驱动的名字一不一致。函数如下:

总线方法:

优点:易扩展

缺点:代码冗余多,需要重新编译设

三、设备树方法

在kernel 3.0以及之后的版本,都是采用设备树的方法实现驱动与设备之间的联系。将总线方法的设备改为设备树实现,解决了总线方法中代码冗余多的问题。

设备树方法只需要在总线方法的基础上稍微修改一下。

dts:添加设备节点:

drv: probe修改,其中通过函数of_property_read_s32()获取设备树的资源。

设备树:

优点:易扩展,不需要重新编译(替换设备树),无冗余代码

缺点:稍微复

最多技术干货内容请稳步到“电子发烧友网”公众号,回复资料即可免费获取一份技术资料,在这里每天可以获取最专业、最前沿的电子技术。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • DIY
    DIY
    +关注

    关注

    176

    文章

    883

    浏览量

    345908
  • Linux驱动
    +关注

    关注

    0

    文章

    43

    浏览量

    9881

原文标题:【分享】DIY爱好者倒腾LED时,总结了几点Linux驱动开发方法

文章出处:【微信号:elecfans,微信公众号:电子发烧友网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    [分享]电子爱好者制作实例

    电子爱好者制作实例(本文档为超星格式,如果大家发现下载不了的话,请下载高版本的超星阅读器)[hide][/hide]
    发表于 07-13 22:52

    我是ARM爱好者,我要加入。

    我是ARM爱好者,我要加入。
    发表于 12-14 10:52

    电子爱好者

    电子爱好者QQ群号203435561
    发表于 12-19 23:03

    找ARM嵌入式linux学习爱好者

    本人基础一般,学过单片机,摸过一年ARM,希望找志同道合的单片机爱好者linux学习一起进步,我的QQ280386673,您也可以留下您的QQ号码,谢谢!
    发表于 07-23 10:29

    电源爱好者

    大学生电源爱好者联盟QQ群 253053727 我们只求共同进步只加大学生欢迎加入
    发表于 07-31 21:32

    无线电爱好者实用电子制作精选

    无线电爱好者实用电子制作精选
    发表于 08-15 12:49

    电子爱好者DIY制作自制微型巡线小车过程

    电子爱好者DIY制作自制微型巡线小车过程
    发表于 08-20 17:40

    电子爱好者

    电子爱好者报道了啊
    发表于 02-25 20:05

    无线电爱好者哦哦

    无线电爱好者喜欢看的
    发表于 02-27 19:49

    欢迎加电子、LED爱好者群299238480

    欢迎加电子、LED爱好者群299238480
    发表于 05-18 08:21

    欢迎加电子、LED爱好者群299238480

    本帖最后由 gk320830 于 2015-3-5 12:40 编辑 欢迎加电子、LED爱好者群299238480
    发表于 05-18 08:22

    【职业电子爱好者】(群号256099730),电子爱好者 DIY电子高手群

    【职业电子爱好者】(群号256099730),电子爱好者 DIY电子高手群
    发表于 06-22 01:55

    电子爱好者的苦恼!

    坛子里的各位大神: 我是一名电子爱好者,从事其他行业,但特别喜欢电子,没事的时候就喜欢折腾,看见各位大神指点江山,很是羡慕,但一直希望坛子里大神能给一个二极管和三极管的资料,型号太多了,记下一些,但
    发表于 04-27 14:38

    机器人爱好者的福音

    机器人爱好者的福音
    发表于 05-31 16:22

    电子爱好者DIY制作:自制微型巡线小车过程

    电子爱好者DIY制作:自制微型巡线小车过程,做了一个巡线小车(技术不好,高手勿喷),需要电子元件有光敏电阻,电阻二极管,三极管,电位器等
    发表于 08-20 15:13 5.2w次阅读
    电子<b class='flag-5'>爱好者</b><b class='flag-5'>DIY</b>制作:自制微型巡线小车过程