随笔分类 -  liunx设备驱动程序

1 2 3 4 5 ··· 11 下一页
个人学习使用,所有收集仅供参考。
摘要:任何在 PCI 总线上的设备有参数 name 和 SUBSYSTEM 环境变量设置为值 pci. PCI 子系 统也一直添加下面 4 个环境变量: PCI_CLASS 设备的 PCI 类号, 16 进制. PCI_ID 设备的 PCI 供应商和设备 ID, 16 进制, 结合成这样的格式 供应者:设 阅读全文
posted @ 2019-07-07 22:02 樊伟胜 阅读(561) 评论(0) 推荐(0) 编辑
摘要:如同本章中前面提过的, 无论何时一个设备从系统中增删, 都产生一个"热插拔事件". 这 意味着内核调用用户空间程序 /sbin/hotplug. 这个程序典型地是一个非常小的 bash 脚 本, 只传递执行给一系列其他的位于 /etc/hot-plug.d/ 目录树的程序. 对于大部分的 Linux 阅读全文
posted @ 2019-07-07 21:57 樊伟胜 阅读(690) 评论(0) 推荐(0) 编辑
摘要:如同本章中前面提过的, 无论何时一个设备从系统中增删, 都产生一个"热插拔事件". 这 意味着内核调用用户空间程序 /sbin/hotplug. 这个程序典型地是一个非常小的 bash 脚 本, 只传递执行给一系列其他的位于 /etc/hot-plug.d/ 目录树的程序. 对于大部分的 Linux 阅读全文
posted @ 2019-07-07 21:57 樊伟胜 阅读(702) 评论(0) 推荐(0) 编辑
摘要:术语"热插拔"最普遍使用的意义产生于当讨论这样的事实时, 几乎所有的计算机系统现在 能够处理当系统有电时设备的出现或消失. 这非常不同于只是几年前的计算机系统, 那时 程序员知道他们只需要在启动时扫描所有的设备, 并且他们从不必担心他们的设备消失直 到整个机器被关电. 现在, 随着 USB 的出现, 阅读全文
posted @ 2019-07-07 21:56 樊伟胜 阅读(183) 评论(0) 推荐(0) 编辑
摘要:去除一个驱动是一个非常容易的动作. 对于一个 PCI 驱动, 驱动调用 pci_unregister_driver 函数. 这个函数只调用驱动核心函数 driver_unregister, 使用 一个指向传递给它的 struct pci_driver 的 struct devie_driver 的指 阅读全文
posted @ 2019-07-07 21:55 樊伟胜 阅读(457) 评论(0) 推荐(0) 编辑
摘要:一个 PCI 驱动被添加到 PCI 核心, 当它调用 pci_register_driver 函数时. 这个函数 只初始化 struct device_driver 结构, 这个结构包含在 struct pci_driver 结构里面, 如同之前在关于添加设备的一节中提过的. 接着 PCI 核心使用 阅读全文
posted @ 2019-07-07 21:51 樊伟胜 阅读(525) 评论(0) 推荐(0) 编辑
摘要:一个 PCI 可用多个不同的方法被从系统中去除. 所有的 card-bus 设备在一个不同的物 理因素上是真正的 PCI 设备, 并且内核 PCI 核心不区分它们. 允许在机器运行时加减 PCI 设备的系统正变得更加普遍, 并且 Linux 支持它们. 还有一个伪 PCI 热插拔驱动允 许开发者来测 阅读全文
posted @ 2019-07-07 21:50 樊伟胜 阅读(1104) 评论(0) 推荐(0) 编辑
摘要:一个类的真正目的是作为一个是该类成员的设备的容器. 一个成员由 struct class_device 来表示: struct class_device { struct kobject kobj; struct class *class; struct device *dev; void *cla 阅读全文
posted @ 2019-07-07 21:49 樊伟胜 阅读(368) 评论(0) 推荐(0) 编辑
摘要:一个类由一个 struct class 的实例来定义: struct class { char *name; struct class_attribute *class_attrs; struct class_device_attribute *class_dev_attrs; int (*hotp 阅读全文
posted @ 2019-07-07 21:42 樊伟胜 阅读(238) 评论(0) 推荐(0) 编辑
摘要:我们在本章中要考察最后的设备模型概念是类.一个类是一个设备的高级视图, 它抽象出 低级的实现细节. 驱动可以见到一个 SCSI 磁盘或者一个 ATA 磁盘, 在类的级别, 它们都 是磁盘. 类允许用户空间基于它们做什么来使用设备, 而不是它们如何被连接或者它们如 何工作. 几乎所有的类都在 sysf 阅读全文
posted @ 2019-07-07 21:41 樊伟胜 阅读(8898) 评论(0) 推荐(0) 编辑
摘要:class_simple 接口意图是易于使用, 以至于没人会抱怨没有暴露至少一个包含设备的被 分配的号的属性. 使用这个接口只不过是一对函数调用, 没有通常的和 Linux 设备模型 关联的样板. 第一步是创建类自身. 使用一个对 class_simple_create 的调用来完成: struct 阅读全文
posted @ 2019-07-07 21:41 樊伟胜 阅读(235) 评论(0) 推荐(0) 编辑
摘要:如同大部分驱动核心结构的情形, device_driver 结构常常被发现嵌到一个更高级的, 总 线特定的结构. lddbus 子系统不会和这样的趋势相反, 因此它已定义了它自己的 ldd_driver 结构: struct ldd_driver { char *version; struct mo 阅读全文
posted @ 2019-07-07 21:40 樊伟胜 阅读(222) 评论(0) 推荐(0) 编辑
摘要:设备模型跟踪所有对系统已知的驱动. 这个跟踪的主要原因是使驱动核心能匹配驱动和新 设备. 一旦驱动在系统中是已知的对象, 但是, 许多其他的事情变得有可能. 设备驱动可 输出和任何特定设备无关的信息和配置变量, 例如: 驱动由下列结构定义: struct device_driver { char * 阅读全文
posted @ 2019-07-07 21:36 樊伟胜 阅读(397) 评论(0) 推荐(0) 编辑
摘要:设备结构包含设备模型核心需要的来模型化系统的信息. 大部分子系统, 但是, 跟踪关于 它们驻留的设备的额外信息. 结果, 对设备很少由空设备结构所代表; 相反, 这个结构, 如同 kobject 结构, 常常是嵌入一个更高级的设备表示中. 如果你查看 struct pci_dev 设备结构包含设备模 阅读全文
posted @ 2019-07-07 21:35 樊伟胜 阅读(184) 评论(0) 推荐(0) 编辑
摘要:sysfs 中的设备入口可有属性. 相关的结构是: struct device_attribute { struct attribute attr; ssize_t (*show)(struct device *dev, char *buf); ssize_t (*store)(struct dev 阅读全文
posted @ 2019-07-07 21:34 樊伟胜 阅读(355) 评论(0) 推荐(0) 编辑
摘要:通常的注册和注销函数在: int device_register(struct device *dev); void device_unregister(struct device *dev); 我们已经见到 lddbus 代码如何注册它的总线类型. 但是, 一个实际的总线是一个设备并 且必须单独注 阅读全文
posted @ 2019-07-07 21:08 樊伟胜 阅读(933) 评论(0) 推荐(0) 编辑
摘要:在最低层, Linux 系统中的每个设备由一个 struct device 代表: struct device { struct device *parent; struct kobject kobj; char bus_id[BUS_ID_SIZE]; struct bus_type *bus; 阅读全文
posted @ 2019-07-07 21:01 樊伟胜 阅读(2634) 评论(0) 推荐(0) 编辑
摘要:如果你在编写总线级别的代码, 你可能不得不对所有已经注册到你的总线的设备或驱动进 行一些操作. 它可能会诱惑人直接进入 bus_type 结构中的各种结构, 但是最好使用已经 提供的帮助函数. 为操作每个对总线已知的设备, 使用: int bus_for_each_dev(struct bus_ty 阅读全文
posted @ 2019-07-07 20:56 樊伟胜 阅读(543) 评论(0) 推荐(0) 编辑
摘要:几乎 Linux 驱动模型中的每一层都提供一个添加属性的接口, 并且总线层不例外. bus_attribute 类型定义在 <linux/device.h> 如下: struct bus_attribute { struct attribute attr; ssize_t (*show)(struc 阅读全文
posted @ 2019-07-07 20:56 樊伟胜 阅读(522) 评论(0) 推荐(0) 编辑
摘要:有几个给 bus_type 结构定义的方法; 它们允许总线代码作为一个设备核心和单独驱动之 间的中介. 在 2.6.10 内核中定义的方法是: int (*match)(struct device *device, struct device_driver *driver); 这个方法被调用, 大概 阅读全文
posted @ 2019-07-07 20:53 樊伟胜 阅读(335) 评论(0) 推荐(0) 编辑

1 2 3 4 5 ··· 11 下一页