总线、设备和驱动

http://blog.chinaunix.net/uid-25014876-id-109733.html

 1 #include <linux/module.h>
 2 #include <linux/init.h>
 3
 4 #include <linux/device.h>
 5
 6 #define VER_SIZE 100
 7 char Version[VER_SIZE] = "xiaobai V1.0";
 8
 9
10 struct bus_type bus_type_wsz = {   // 1、定义bus_type结构体
11     .name = "wszbus"
12 };
13
14
15 static ssize_t show_bus_version(struct bus_type *bus, char *buf)
16 {
17     return snprintf(buf, VER_SIZE, "%s\n", Version);
18 }
19 static ssize_t store_bus_version(struct bus_type *bus, const char *buf, size_t count)
20 {
21     return snprintf(Version, VER_SIZE, "%s", buf);
22 }
23
24
25 /*
26 3、创建并初始化bus_attribute结构,使用宏BUS_ATTR
27
28 该宏会定义一个名叫bus_attr_name(红色部分是固定的(bus_attr_))的bus_attibute的结构,
29 并且成员name设置为name,文件权限mode设置为_mode,两个函数调用分别人show和store。
30 <linux/device.h>
31 */
32 static BUS_ATTR(version, S_IRUGO|S_IWUGO, show_bus_version, store_bus_version);
33
34 static int __init bus_wsz_init(void)
35 {
36     int ret;
37     ret = bus_register(&bus_type_wsz);  // 2、注册总线
38     if(ret)
39     {
40         printk("bus register failed!\n");
41         return ret;
42     }
43
44 /*
45     4、将bus_attibute添加到指定的总线上
46
47     一旦调用该函数,会就在指定bus总线的目录下新建一个名叫_name的文件,
48     权限为_mode,当访问和修改该文件是会分别调用show和store函数调用?
49 */
50     ret = bus_create_file(&bus_type_wsz, &bus_attr_version);
51     if(ret)
52     {
53         printk("bus creat file failed!\n");
54         bus_unregister(&bus_type_wsz);
55         return ret;
56     }
57
58     printk("wsz bus init\n");
59     return 0;
60
61 }
62
63 static void __exit bus_wsz_exit(void)
64 {
65     bus_unregister(&bus_type_wsz);
66     bus_remove_file(&bus_type_wsz, &bus_attr_version); //不调用这个也可以的,删除总线时会删除
67     printk("bus_wsz bye!\n");
68 }
69
70
71
72 module_init(bus_wsz_init);
73 module_exit(bus_wsz_exit);
74
75 MODULE_LICENSE("GPL");
76 MODULE_AUTHOR("WSZ");

bus

原文地址:https://www.cnblogs.com/wszdezh/p/8673302.html

时间: 2024-10-21 08:26:24

总线、设备和驱动的相关文章

linux总线设备驱动模型

本篇文章通过平台总线设备模型为例,讲解总线设备驱动模型: platform_device_register的作用: 1.把device放入bus的device链表 2.从bus的driver链表中取出每一个driver,用bus的match函数判断driver能否支持这个device 3.若可以支持,调用driver的probe函数 platform_driver_register的作用: 1.将driver放入bus的driver链表 2.从bus的device链表中取出每一个device,用

总线设备驱动模型

一.总线模型(转自国嵌论坛) 1.随着技术的进步,对热插拔的要求以及可移植性的要求越来越高,从Linux2.4开始虽然有了模型但是正式提出是在Linux2.6. 2.关键词是总线,驱动,设备 3.总线能够感知设备的插拔: (1)插入新设备的时候知道有设备插入,那么就去总线上已有的驱动里面查找能够处理该新设备的驱动,一旦匹配,该驱动就有了该设备的控制权 (2)拔出的时候,总线也能感知,并且告诉相应的驱动从而使得驱动能够处理拔出事件二.总线 1.描述结构 linux内核中总线由bus_type结构描

8.总线设备驱动模型

总线设备驱动模型 总线:创建一条总线,跟我们前面的按键一样,首先是描述总线结构,接着是注册总线,注销总线.总线设备,例如usb总线,上面会有很多类型的usb的驱动,例如鼠标.键盘.....等,当我们把之一的usb插上的时候,usb总线会把每个驱动遍历一遍,找到相应的驱动程序执行. 接下来用bus.c创建一条总线. #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> #in

20150225 IMX257 总线设备驱动模型编程之总线篇

20150225 IMX257 总线设备驱动模型编程之总线篇 2015-02-25 19:40 李海沿 从现在开始,我们开始来实现 总线-设备-驱动模型中的总线.. 我们这个程序的目标是在 sysfs文件系统的/sys/bus/ 目录下面建立一个文件夹. 一.总线介绍 1. 总线数据结构bus_type struct bus_type 结构体的定义如下: struct bus_type { const char *name; --总线名 struct bus_attribute *bus_att

linux嵌入式驱动-总线设备驱动模型

一个农夫想要合理的理财,他给你未来N天的每天支出(1<=N<=100000), 并计划把这N天分成M个部分(1 <=M <=N)(每个部分的天数是连续的),要求求出这些部分里花费最和最大值最小,输出这个最大值. 100 400 300 100 500 101 400 可以这么划分(100 400) (300 100) (500) (101)(400) ,五个分组里最大值是500,这个划是最佳的了,因为在其他划分里肯定有部分是大于500的,如(100) (400 300) (100

总线设备驱动模型【转】

本文转载自:http://blog.csdn.net/coding__madman/article/details/51428400 总线驱动设备模型: 1. 总线设备驱动模型概述 随着技术的不断进步,系统的拓扑结构也越来越复杂,对热插拔,跨平台移植性的要求也越来越高,2.4内核已经难以满足这些需求,为适应这宗形势的需求,从linux2.6内核开始提供了全新的设备模型 2. 总线 2.1 描述结构 2.2 注册 2.3 注销 void  bus_unregister(struct  bus_ty

linux设备驱动归纳总结(九):1.platform总线的设备和驱动【转】

本文转载自:http://blog.chinaunix.net/uid-25014876-id-111745.html linux设备驱动归纳总结(九):1.platform总线的设备和驱动 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 这一节可以理解是第八章的延伸,从这节开始介绍platform设备驱动. xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

RT-thread 设备驱动组件之IIC总线设备

本文主要介绍RT-thread中IIC总线设备驱动,涉及到的主要文件有:驱动框架文件(i2c_core.c,i2c_dev.c,i2c-bit-ops.c,i2c_dev.h,i2c.h):底层硬件驱动文件(i2c_soft.c,i2c_soft.h).这里的i2c_soft.c和i2c_soft.h是指利用MCU的GPIO口模拟IIC总线时序,而不是利用MCU的硬件IIC接口.应用IIC总线设备驱动时,需要在rtconfig.h中添加宏定义#define RT_USING_I2C.若使用GPI

从需求的角度去理解Linux系列:总线、设备和驱动

笔者成为博客专家后整理以前原创的嵌入式Linux系列博文,现推出以让更多的读者受益. <从需求的角度去理解linux系列:总线.设备和驱动>是一篇有关如何学习嵌入式Linux系统的方法论文章,也是从需求的角度去理解Linux系统软件的开篇,期待此系列文章日后会是学习嵌入式Linux的标杆! 这是作者精心撰写的经验总结,希望嵌入式Linux的学习者仔细领会,多读几遍也无妨. 一.软件.面向对象.软件框架 软件是为了解决现实问题而产生的,面向对象的软件思维是解决普遍现实问题的一种有效的抽象方法,而

让天堂的归天堂,让尘土的归尘土——谈Linux的总线、设备、驱动模型

公元1951年5月15日的国会听证上,美国陆军五星上将麦克阿瑟建议把朝鲜战争扩大至中国,布莱德利随后发言:"如果我们把战争扩大到共产党中国,那么我们会被卷入到一场错误的时间,错误的地点同错误的对手打的一场错误的战争中." 写代码,适用于同样的原则,那就是把正确的代码放到正确的位置而不是相反.同样的一个代码,可以出现在多个可能的位置,它究竟应该出现在哪里,是软件架构设计的结果,说白了一切都是为了高内核和低耦合. 1.   陷入绝境 下面我们设想一个名字叫做ABC的简单的网卡,它需要接在一