Linux 自定义总线类型
#include <linux/module.h>
#include <linux/init.h>
#include <linux/device.h> // 按照 platform_device 格式定义
struct test_dev {
char *name;
// 必须要有父类,注册时会将父类注册到链表
struct device dev;
// 其他成员自定义
}; // 按照 platform_driver 格式定义
struct test_drv {
// 必须要有父类,注册时会将父类注册到链表
struct device_driver driver;
// 其他成员自定义
}; void mydev_release(struct device *dev)
{
// 防止 rmmod 时报错
} // 匹配函数
int my_bus_match(struct device *dev, struct device_driver *drv)
{
struct test_dev *testdev; // 优先使用 drv 父类中的 name 和 dev 中的 name 比较匹配
testdev = container_of(dev, struct test_dev, dev); if (strcmp(drv->name, testdev->name) == )
{
printk("match ok!\n");
return ;
} // 如果 drv 父类中的 name 没有定义,再使用 drv 中的 name 比较匹配
// 代码忽略
return ;
} // 匹配成功后执行的函数
int my_bus_probe(struct device *dev)
{
printk("-----%s-----\n", __FUNCTION__); return ;
} // 初始化自定义总线
struct bus_type my_bus= {
.name = "my_bus",
.match = my_bus_match,
}; struct test_dev mydev = {
.name = "dev_drv",
.dev = {
.init_name = "test_bus",
.bus = &my_bus,
.release = mydev_release,
},
}; struct test_drv mydrv= {
.driver = {
.name = "dev_drv",
.bus = &my_bus,
.probe = my_bus_probe,
},
}; static int __init my_bus_init(void)
{
// 注册总线
bus_register(&my_bus); // 注册设备,注意是父类
device_register(&mydev.dev); // 注册驱动,注意是父类
driver_register(&mydrv.driver); return ;
} static void __exit my_bus_exit(void)
{
// 注销
device_unregister(&mydev.dev);
driver_unregister(&mydrv.driver);
bus_unregister(&my_bus);
} module_init(my_bus_init);
module_exit(my_bus_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Aaron Lee");
注册和注销时一定要选用 device 和 driver 父类:
device_register(&mydev.dev);
driver_register(&mydrv.driver);
device_unregister(&mydev.dev);
driver_unregister(&mydrv.driver);
ps:原因与平台总线相同,请参照下面文章中的“分离”。
http://www.cnblogs.com/lialong1st/p/7756669.html
自定义的总线在 /sys/bus 目录下
struct test_dev 中的 init_name 在 /sys/bus/my_bus/device 目录下

Linux 自定义总线类型的更多相关文章
- Linux:file命令显示自定义文件类型
file 命令可以查看文件类型信息,原理见: 非常Linux-file命令与magic file 修改 /ect/magic 文件后,可用 file 命令显示自定义文件类型信息. man magic ...
- Linux+I2C总线分析(主要是probe的方式)
Linux I2C 总线浅析 ㈠ Overview Linux的I2C体系结构分为3个组成部分: ·I2C核心: I2C核心提供了I2C总线驱动和设备驱动的注册.注销方法,I2C通信方法(即“algo ...
- linux usb总线驱动(一)
目录 linux usb总线驱动框架 USB 介绍 传输类型 控制器接口 2440接口 基本流程 alloc_dev choose_address hub_port_init usb_get_devi ...
- Linux平台总线驱动设备模型
platform总线是一种虚拟的总线,相应的设备则为platform_device,而驱动则为platform_driver.Linux 2.6的设备驱动模型中,把I2C.RTC.LCD等都归纳为pl ...
- Linux SPI总线和设备驱动架构之二:SPI通用接口层
通过上一篇文章的介绍,我们知道,SPI通用接口层用于把具体SPI设备的协议驱动和SPI控制器驱动联接在一起,通用接口层除了为协议驱动和控制器驱动提供一系列的标准接口API,同时还为这些接口API定义了 ...
- Linux的总线设备驱动模型
裸机编写驱动比较自由,按照手册实现其功能即可,每个人写出来都有很大不同: 而Linux中还需要按照Linux的驱动模型来编写,也就是需要按照"模板"来写,写出来的驱动就比较统一. ...
- 自定义委托类型 - .Net自带委托类型
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递. 与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用. 一.自定义委托类型 1.语法结构:访问修 ...
- C:Wordpress自定义文章类型(图视频)
自定义文章类型,包括: 1:单独的"文章内容模板" 2:单独的"文章列表模板" 3:单独的"控制后台"(文章分类.添加文章) 创建自定义文章 ...
- sharepoint2010问卷调查(3)-实现问卷的开始和结束时间(采用自定义字段类型)
接着上面的图片调查,sharepoint自带的问卷调查是没有开始和结束时间的.这个在项目过程不太实用.问卷一般有开始和结束时间的.因此需要自己 动手开发一个自定义字段类型字段.如下图: 开发添加栏目会 ...
随机推荐
- springBean参数注入的几个方法
1.普通方式注入 applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> < ...
- JavaWeb -- Struts1 使用示例: 表单校验 防表单重复提交 表单数据封装到实体
1. struts 工作流程图 超链接 2. 入门案例 struts入门案例: 1.写一个注册页面,把请求交给 struts处理 <form action="${pageContext ...
- 2015 Syrian Private Universities Collegiate Programming Contest
A. Window B. Paper Game Des:给你一个矩形集合,一开始只有一个W*H的矩形.每次可以选一个矩形,切成两个并加入集合,长和宽必须是正整数.不能操作者输,求先手赢还是输.(1 ≤ ...
- 使用Entity Framework时遇到的各种问题总结
在这里记录一下之前使用Entity Framework(4.3.1版本)遇到的问题. 更新没有设置主键的表 在默认情况下,EF不能对一个没有主键的表进行更新.插入和删除的动作.用xml方式查看edmx ...
- python学习笔记(matplotlib下载安装)
最近博主在找工作换新环境.昨天电话面试中问到python中threading模块进行接口性能测试的时候.如何生成性能测试报告 我现在还停留在打印在屏幕中.所以今天想着是否可以生成相应的性能测试报告 首 ...
- ArcGIS API For Silverlight使用在线地图的多种方法总结
引自:http://www.cnblogs.com/meimao5211/p/3283969.html ArcGIS API For Silverlight使用在线地图的多种方法总结 本人也正在学习A ...
- Android ADT远程主机强迫关闭了一个现有的连接 Connection attempts: 1 解决方法
adb有一个限制, 也可以说是bug. 当手机上同时运行的进程数大于64时, 就会引发adb奔溃. 更深层次的原因, 就是windows API的WaitForMultipleObjects所支持的 ...
- Codeforces Round #250 (Div. 2)D
给你一张无向图,每个点有一个权值,对于一条从l到r 的边权值是l到r路径上最小的点的权值,(多条路取最大的权值),然后求每两个点之间的权值和/点对数 题解:并查集维护,先从点大的边排序,然后依次加边, ...
- Centos7安装maven过程
下载地址 http://maven.apache.org/download.cgi 版本 apache-maven-3.3.9 -bin.tar.gz tar -xvf apache-maven-3. ...
- 51nod 1042 数位dp
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1042 1042 数字0-9的数量 基准时间限制:1 秒 空间限制:131 ...