IMX257 总线设备驱动模型编程之总线篇(二)

发布者:DreamyEclipse最新更新时间:2024-08-15 来源: cnblogs关键字:总线设备 手机看文章 扫描二维码
随时随地手机看文章

前面我们讲解了一个简单的总线驱动程序,目的就是在/sys/bus/下面创建文件,但是这还是不够的,因为总线也是一个设备,如果想让系统认识的话,必须要用device_register进行注册。


此处,我们就开始来注册一个总线,让总线下即可以包含属性文件,也包含设备文件,和驱动程序。

让驱动程序 和设备文件之间互联,这才是总线真正的用途。

 

一、程序解析

 

前面已经将的很详细,我们这儿在前面的基础上加上一下:

1. 定义总体设备结构体

并且实现 设备的release函数;

 

2. 导出总线设备

 

3. 注册设备驱动

 

4. 卸载设备

 

二、编译测试:

加载成功后,因为总线也是一个设备,所以在 /sys/bus/下面有my_bus这个目录

而在/sys/device/ 下面同样也生成了一个目录,名字为我们的my_bus 的init_name

如图所示

 

 

 

附上my_bus.c驱动程序:


 1 #include

 2 #include

 3 #include

 4 #include

 5 #include

 6 

 7 

 8 static char *Version = '$LoverXueEr : 1.0 $';

 9 

10 //检测驱动是否匹配设备,dev->bus_id 和 driver->name相等的

11 static int my_match(struct device *dev ,struct device_driver *driver){

12     return !strncmp(dev_name(dev),driver->name,strlen(driver->name));

13 }

14 

15 static void my_bus_release(struct device *dev){

16     printk('

17 }

18   

19 //设置设备的名字  dev_set_name(&dev,'name');

20 struct device my_bus = {

21     .init_name = 'my_bus0',

22     .release = my_bus_release,

23 };

24 

25 struct bus_type my_bus_type = {

26     .name = 'my_bus',

27     .match = my_match,

28 };

29 EXPORT_SYMBOL(my_bus);  //导出符号

30 EXPORT_SYMBOL(my_bus_type);

31 

32 //显示总线版本号

33 static ssize_t show_bus_version(struct bus_type *bus,char *buf){

34     return snprintf(buf,PAGE_SIZE,'%sn',Version);

35 }

36 

37 //产生后面的 bus_attr_version 结构体

38 static BUS_ATTR(version,S_IRUGO, show_bus_version, NULL);

39 

40 static int __init my_bus_init(void){

41     int ret;

42     /* 注册总线 */

43     ret = bus_register(&my_bus_type);

44     if(ret)

45         return ret;

46     /*  创建属性文件 */

47     if(bus_create_file(&my_bus_type, &bus_attr_version))

48         printk('

49 

50     /* 注册总线设备 */

51     ret = device_register(&my_bus);

52     if(ret)

53         printk('

54     return ret;

55 }

56 

57 static void my_bus_exit(void){

58     bus_unregister(&my_bus_type);

59     device_unregister(&my_bus);

60 }

61 

62 module_init(my_bus_init);

63 module_exit(my_bus_exit);

64 

65 

66 MODULE_AUTHOR('Lover雪儿');

67 MODULE_LICENSE('GPL');


三、错误解决:

 

1. error: 'struct device' has no member named 'bus_id'

在新版本的内核中device已经没有bus_id这个成语了,取而代之的是.init_name.

解决方法:

将device下面的 .bus_id 修改为 .init_name ,如图所示:

 

 

然后,再将程序中match函数中 dev->bus_id 修改为 dev_name(dev), 就可以了


关键字:总线设备 引用地址:IMX257 总线设备驱动模型编程之总线篇(二)

上一篇:IMX257 总线设备驱动模型编程之设备篇
下一篇:IMX257 总线设备驱动模型编程之总线篇

推荐阅读最新更新时间:2024-11-01 22:22

PROFIBUS总线光纤模块在矿场设备的应用案例分享
系统主要用于矿场设备的控制和检测,原有PROFIBUS总线转光纤传输设备,经使用几年多模改造单模后,工况一直不好,信号传输过程中丢包率高,难以满足用户生产需求。拟采用我司的 PROFIBUS光端机YT-PB-06K替代,以改善系统稳定性。 项目要求: 满足全长 10公里5个远程站PLC控制系统内光纤信号的稳定传输。 该系统由1个主站,4个从站组成,各工作站间距离大约2Km.经过研究,决定采用光纤传输。光纤传输设备需配合系统满足以下指标: 系统可靠性:100% ,光纤信号稳定性:100% ,数据传送时间: 0.5 秒,连续工作时间:不限 通过实地测试,我YT-PB-06K完全能够满足该系统的要求,由此采用了我司的该产品。
[嵌入式]
PROFIBUS<font color='red'>总线</font>光纤模块在矿场<font color='red'>设备</font>的应用案例分享
设备集成与FDD UA现场总线共用技术
  从中国发展与应用论坛上了解到,现场总线共用技术是目前正在发展一种技术。该技术追求将系统中所有的智能仪表或设备的数据和功能性,不论采用何种协议,都可无缝地为整个自动化系统所利用。只要真正实现了这个目标,就能使最终用户接受在工业自动化和过程控制中存在多种现场总线和工业以太网的现实。但目标进展远不能满足用户的要求。 设备集成(Device Integration)   设备系统集成,也可称为硬件系统集成、在大多数场合简称系统集成,或称为弱电系统集成,以区分于机电设备安装类的强电集成。它指以搭建组织机构内的信息化管理支持平台为目的,利用综合布线技术、楼宇自控技术、通信技术、网络互联技术、多媒体应用技术、安全防范技术、网络安全技术等将
[嵌入式]
基于单片机设计的总线通信设备
在航空电子综合化系统中,快速、有效的数据传输对整个航空电子系统的性能有很大影响,因此数据总线被称为现代航空电子系统的“骨架”。ARINC429是航空电子系统之间最常用的通信总线之一。要在计算机上实现与机载设备的ARINC429总线数据通信,必须实现429总线与计算机总线之间的数据传输。本文设计了基于USB总线的便携式ARINC429总线通信设备,并通过实际运行测试,对该设备的可靠性和稳定性进行了验证。 1 系统总体设计 1.1 系统功能分析 该系统主要分为3大功能单元:中央控制单元、429数据收发单元、429电平转换单元。系统的功能结构框图如图1所示。中央控制单元与PC机进行USB通信,将USB总线转换为自定义总线,并根据PC机发来
[单片机]
基于单片机设计的<font color='red'>总线</font>通信<font color='red'>设备</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多开源项目推荐
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved