编写驱动程序:

 1 #include <linux/init.h>
2 #include <linux/module.h>
3 #include <linux/device.h>
4
5 struct bus_type my_bus = {
6 .name = "my_bus",
7 };
8
9 static int __init my_bus_init (void)
10 {
11 int ret;
12
13 ret = bus_register(&my_bus); //注册一条总线
14 if (ret != 0) {
15 return ret;
16 }
17
18 return 0;
19 }
20
21 static void __exit my_bus_exit (void)
22 {
23 bus_unregister(&my_bus);
24 }
25
26 module_init(my_bus_init);
27 module_exit(my_bus_exit);
28
29 MODULE_LICENSE("GPL");

这个程序很简单,只是在初始化的时候加载了一条总线,该总线的名字为“my_bus”,用insmod加载之后可以在/sys/bus目录下看到一个叫my_bus的目录,如下图:

进到my_bus目录之后用ls -l命令,可以看到devices和drivers是两个目录,但是这两个目录都是空的,因为这条总线上没有任何设备和驱动,drivers_autoprobe、drivers_probe、uevent应该是三个默认的总线方法。

如果将程序进行一定修改:

 1 #include <linux/init.h>
2 #include <linux/module.h>
3 #include <linux/device.h>
4 #include <linux/string.h>
5
6 struct bus_type my_bus = {
7 .name = "my_bus",
8 };
9
10 //用于得到属性
11 char Version[] = "my bus version 1.0";
12 ssize_t show_version(struct bus_type *bus, char *buf)
13 {
14 return snprintf(buf, PAGE_SIZE, "%s", Version);
15 }
16
17 BUS_ATTR(version, S_IRUGO, show_version, NULL);
18
19 static int __init my_bus_init (void)
20 {
21 int ret;
22
23 ret = bus_register(&my_bus); //注册一条总线
24 if (ret != 0) {
25 return ret;
26 }
27
28 if (bus_create_file(&my_bus, &bus_attr_version)) { //给一个bus创建一个属性
29 printk("fail to create my bus file");
30 }
31 return 0;
32 }
33
34 static void __exit my_bus_exit (void)
35 {
36 bus_unregister(&my_bus);
37 }
38
39 module_init(my_bus_init);
40 module_exit(my_bus_exit);
41
42 MODULE_LICENSE("GPL");

这时因为给bus创建了一个名为version的属性,因此在my_bus目录下可以看到一个叫version的文件,如下图:

打印该文件可以看到写入的version值:

可以创建多个属性,创建的属性都可以在my_bus目录下看到。

linux总线的更多相关文章

  1. 和菜鸟一起学linux总线驱动之初识spi驱动数据传输流程【转】

    转自:http://blog.csdn.net/eastmoon502136/article/details/7921846 对于SPI的一些结构体都有所了解之后呢,那么再去瞧瞧SPI的那些长见的操作 ...

  2. linux总线、设备和设备驱动的关系

    之一:bus_type 总线是处理器和一个或多个设备之间的通道,在设备模型中,所有的设备都通过总线相连,甚至是内部的虚拟"platform"总线.可以通过ls -l /sys/bu ...

  3. 和菜鸟一起学linux总线驱动之i2c死锁问题

    不知不觉中已经有好几个月没有写点东西了,懒了就是懒了,说是忙着想把产品做得更好,都是借口,每天花一点时间来写点东西确实很不错,自己也坚持了很久很久,只不过今年以来,发现提高不是很大,能写的东西好少好少 ...

  4. Linux 总线、设备、驱动模型 与 设备树

    1.总线.设备.驱动模型 本着高内聚.低耦合的原则,Linux 把设备驱动模型分为了总线.设备和驱动三个实体,这三个实体在内核里的职责分别如下: 设备和驱动向总线进行注册,总线负责把设备和对应的驱动绑 ...

  5. 《Linux总线、设备与驱动》USB设备发现机制

    说明:本分析基于mstar801平台Linux2.6.35.11内核,其他内核版本仅供参考. 一.程序在内核中的位置 1.usb host做为pci总线下的一个设备存在(嵌入式系统中有可能也会直接挂在 ...

  6. Linux总线设备驱动模型

    1. Linux2.6内核引入总线.设备.驱动模型来描述各种总线(PCI.USB.I2C.SPI)与外围设备及其驱动之间的关系. 2. 在Linux内核中,总线用bus_type结构来描述,定义于文件 ...

  7. Linux中总线设备驱动模型及平台设备驱动实例

    本文将简要地介绍Linux总线设备驱动模型及其实现方式,并不会过多地涉及其在内核中的具体实现,最后,本文将会以平台总线为例介绍设备和驱动程序的实现过程. 目录: 一.总线设备驱动模型总体介绍及其实现方 ...

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

    笔者成为博客专家后整理以前原创的嵌入式Linux系列博文,现推出以让更多的读者受益. <从需求的角度去理解linux系列:总线.设备和驱动>是一篇有关如何学习嵌入式Linux系统的方法论文 ...

  9. Linux的总线设备驱动模型

    裸机编写驱动比较自由,按照手册实现其功能即可,每个人写出来都有很大不同: 而Linux中还需要按照Linux的驱动模型来编写,也就是需要按照"模板"来写,写出来的驱动就比较统一. ...

随机推荐

  1. 主数据管理(MDM)的6大层级简述,你不可不知的数据治理参考!

    前面我写了一篇关于对元数据和元数据管理的认知和理解的文章,有兴趣的朋友可以去看看.接下来我们讲一讲主数据管理(MDM). 主数据管理(MDM) 主数据是系统间共享数据,它是系统间信息交换的基准.主数据 ...

  2. 卡尔曼滤波学习笔记1-Matlab模拟温度例子--代码比较乱,还需优化

    温度模拟参数选取 xk 系统状态 实际温度 A 系统矩阵 温度不变,为1 B.uk 状态的控制量 无控制量,为0 Zk 观测值 温度计读数 H 观测矩阵 直接读出,为1 wk 过程噪声 温度变化偏差, ...

  3. Typora+Picgo+Gitee实现上传图片

    下载picgo和node.js 百度网盘地址: 链接:https://pan.baidu.com/s/1QwbXn4vFuDfSFNOnZU5-Jg 取码:efgc 打开picgo,安装gitee-u ...

  4. Servlet+JSP+JDBC综合案例

    层级关系: 一.Util包 包里面写一个JDBCTools.java文件 功能:实现数据库连接返回一个Connection对象,并且可以实现数据库相应资源的关闭! 注意事项: 1.定义成员变量 1 p ...

  5. VS使用过程中可能会遇到的问题

    Q:某个类无法引用命名空间 A:可能是类名与文件夹名重复了

  6. Linux介绍及系统安装

    1.Linux入门介绍 1.1简介 ​ Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX(Portable Operating System In ...

  7. RocetMQ搭建攻略和问题解决之道

    最近有在尝试给项目加入消息中间件服务,首先想到了鼎鼎大名的RocketMQ.RocketMQ是一款高性能的.分布式消息中间件,由阿里开源.它提供了丰富的消息拉取方式,能够处理上亿级的海量数据,甚至在阿 ...

  8. git版本回滚

    本地版本回滚 git reset --hard <版本号> (git log 可查看版本号,版本号不用写全) 远程仓库版本回滚 先在本地将版本回滚 ,然后git push -f 强制提交

  9. thinkphp3.2框架运行原理

    thinkphp3.2是使用率非常普遍的国产php框架,以简单易于上手闻名,那么它框架结构是怎样的? tp3.2设计简单来说就是CBD,core(框架核心文件),bebavior(行为,tp3.2一大 ...

  10. 基于SVM的字母验证码识别

    基于SVM的字母验证码识别 摘要 本文研究的问题是包含数字和字母的字符验证码的识别.我们采用的是传统的字符分割识别方法,首先将图像中的字符分割出来,然后再对单字符进行识别.首先通过图像的初步去噪.滤波 ...