📄 ch14s09.html
字号:
<html xmlns:cf="http://docbook.sourceforge.net/xmlns/chunkfast/1.0"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>14.9. 快速参考-Linux设备驱动第三版(中文版)</title><meta name="description" content="驱动开发" /><meta name="keywords" content="Linux设备驱动,中文版,第三版,ldd,linux device driver,驱动开发,电子版,程序设计,软件开发,开发频道" /><meta name="author" content="" /> <meta name="verify-v1" content="5asbXwkS/Vv5OdJbK3Ix0X8osxBUX9hutPyUxoubhes=" /><link rel="stylesheet" href="docbook.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.69.0"><link rel="start" href="index.html" title="Linux 设备驱动 Edition 3"><link rel="up" href="ch14.html" title="第 14 章 Linux 设备模型"><link rel="prev" href="ch14s08.html" title="14.8. 处理固件"><link rel="next" href="ch15.html" title="第 15 章 内存映射和 DMA "></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">14.9. 快速参考</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch14s08.html">上一页</a> </td><th width="60%" align="center">第 14 章 Linux 设备模型</th><td width="20%" align="right"> <a accesskey="n" href="ch15.html">下一页</a></td></tr></table><hr></div><div class="sect1" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="TheLinuxDeviceModelqr.sect1"></a>14.9. 快速参考</h2></div></div></div><p>许多函数在本章中已经被介绍过; 这是它们全部的一个快速总结.</p><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="Kobjects.sect2"></a>14.9.1. Kobjects结构</h3></div></div></div><div class="variablelist"><dl><dt><span class="term"><span>#include <linux/kobject.h></span></span></dt><dd><p>包含文件, 包含 kobject 的定义, 相关结构, 和函数.</p></dd><dt><span class="term"><span>void kobject_init(struct kobject *kobj);</span></span></dt><dd></dd><dt><span class="term"><span>int kobject_set_name(struct kobject *kobj, const char *format, ...);</span></span></dt><dd><p>用作 kobject 初始化的函数</p></dd><dt><span class="term"><span>struct kobject *kobject_get(struct kobject *kobj);</span></span></dt><dd></dd><dt><span class="term"><span>void kobject_put(struct kobject *kobj);</span></span></dt><dd><p>为 kobjects 管理引用计数的函数.</p></dd><dt><span class="term"><span>struct kobj_type;</span></span></dt><dd></dd><dt><span class="term"><span>struct kobj_type *get_ktype(struct kobject *kobj);</span></span></dt><dd><p>表示一个kobjct 被嵌入的结构类型. 使用 get_ktype 来获得关联到一个给定 kobject 的 kobj_type.</p></dd><dt><span class="term"><span>int kobject_add(struct kobject *kobj);</span></span></dt><dd></dd><dt><span class="term"><span>extern int kobject_register(struct kobject *kobj);</span></span></dt><dd></dd><dt><span class="term"><span>void kobject_del(struct kobject *kobj);</span></span></dt><dd></dd><dt><span class="term"><span>void kobject_unregister(struct kobject *kobj);</span></span></dt><dd><p>kobject_add 添加一个 kobject 到系统, 处理 kset 成员关系, sysfs 表示, 以及热插拔事件产生. kobject_register 是一个方便函数, 它结合 kobject_init 和 kobject_add. 使用 kobject_del 来去除一个 kobject 或者 kobject_unregister, 它结合了 kobject_del 和 kobject_put.</p></dd><dt><span class="term"><span>void kset_init(struct kset *kset);</span></span></dt><dd></dd><dt><span class="term"><span>int kset_add(struct kset *kset);</span></span></dt><dd></dd><dt><span class="term"><span>int kset_register(struct kset *kset);</span></span></dt><dd></dd><dt><span class="term"><span>void kset_unregister(struct kset *kset);</span></span></dt><dd><p>为 ksets 初始化和注册的函数.</p></dd><dt><span class="term"><span>decl_subsys(name, type, hotplug_ops);</span></span></dt><dd><p>易于声明子系统的一个宏.</p></dd><dt><span class="term"><span>void subsystem_init(struct subsystem *subsys);</span></span></dt><dd></dd><dt><span class="term"><span>int subsystem_register(struct subsystem *subsys);</span></span></dt><dd></dd><dt><span class="term"><span>void subsystem_unregister(struct subsystem *subsys);</span></span></dt><dd></dd><dt><span class="term"><span>struct subsystem *subsys_get(struct subsystem *subsys);</span></span></dt><dd></dd><dt><span class="term"><span>void subsys_put(struct subsystem *subsys);</span></span></dt><dd><p>对子系统的操作.</p></dd></dl></div></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="SysfsOperations.sect2"></a>14.9.2. sysfs 操作</h3></div></div></div><div class="variablelist"><dl><dt><span class="term"><span>#include <linux/sysfs.h></span></span></dt><dd><p>包含 sysfs 声明的包含文件.</p></dd><dt><span class="term"><span>int sysfs_create_file(struct kobject *kobj, struct attribute *attr);</span></span></dt><dd></dd><dt><span class="term"><span>int sysfs_remove_file(struct kobject *kobj, struct attribute *attr);</span></span></dt><dd></dd><dt><span class="term"><span>int sysfs_create_bin_file(struct kobject *kobj, struct bin_attribute *attr);</span></span></dt><dd></dd><dt><span class="term"><span>int sysfs_remove_bin_file(struct kobject *kobj, struct bin_attribute *attr);</span></span></dt><dd></dd><dt><span class="term"><span>int sysfs_create_link(struct kobject *kobj, struct kobject *target, char *name);</span></span></dt><dd></dd><dt><span class="term"><span>void sysfs_remove_link(struct kobject *kobj, char *name);</span></span></dt><dd><p>创建和去除和一个 kobject 关联的属性文件的函数.</p></dd></dl></div></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="BusesDevicesandDrivers.sect2"></a>14.9.3. 总线, 设备, 和驱动</h3></div></div></div><div class="variablelist"><dl><dt><span class="term"><span>int bus_register(struct bus_type *bus);</span></span></dt><dd></dd><dt><span class="term"><span>void bus_unregister(struct bus_type *bus);</span></span></dt><dd><p>在设备模型中进行注册和注销总线的函数.</p></dd><dt><span class="term"><span>int bus_for_each_dev(struct bus_type *bus, struct device *start, void *data, int (*fn)(struct device *, void *));</span></span></dt><dd></dd><dt><span class="term"><span>int bus_for_each_drv(struct bus_type *bus, struct device_driver *start, void *data, int (*fn)(struct device_driver *, void *));</span></span></dt><dd><p></p>列举每个设备和驱动的函数, 特别地, 绑定到给定总线的设备.</dd><dt><span class="term"><span>BUS_ATTR(name, mode, show, store);</span></span></dt><dd></dd><dt><span class="term"><span>int bus_create_file(struct bus_type *bus, struct bus_attribute *attr);</span></span></dt><dd></dd><dt><span class="term"><span>void bus_remove_file(struct bus_type *bus, struct bus_attribute *attr);</span></span></dt><dd><p>BUS_ATTR 宏可能用来声明一个 bus_attribute 结构, 它可能接着被添加和去除, 使用上面 2 个函数.</p></dd><dt><span class="term"><span>int device_register(struct device *dev);</span></span></dt><dd></dd><dt><span class="term"><span>void device_unregister(struct device *dev);</span></span></dt><dd><p>处理设备注册的函数.</p></dd><dt><span class="term"><span>DEVICE_ATTR(name, mode, show, store);</span></span></dt><dd></dd><dt><span class="term"><span>int device_create_file(struct device *device, struct device_attribute *entry);</span></span></dt><dd></dd><dt><span class="term"><span>void device_remove_file(struct device *dev, struct device_attribute *attr);</span></span></dt><dd><p>处理设备属性的宏和函数.</p></dd><dt><span class="term"><span>int driver_register(struct device_driver *drv);</span></span></dt><dd></dd><dt><span class="term"><span>void driver_unregister(struct device_driver *drv);</span></span></dt><dd><p>注册和注销一个设备驱动的函数.</p></dd><dt><span class="term"><span>DRIVER_ATTR(name, mode, show, store);</span></span></dt><dd></dd><dt><span class="term"><span>int driver_create_file(struct device_driver *drv, struct driver_attribute *attr);</span></span></dt><dd></dd><dt><span class="term"><span>void driver_remove_file(struct device_driver *drv, struct driver_attribute *attr);</span></span></dt><dd><p>关联驱动属性的宏和函数.</p></dd></dl></div></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="Classes.sect2"></a>14.9.4. 类</h3></div></div></div><div class="variablelist"><dl><dt><span class="term"><span>struct class_simple *class_simple_create(struct module *owner, char *name);</span></span></dt><dd></dd><dt><span class="term"><span>void class_simple_destroy(struct class_simple *cs);</span></span></dt><dd></dd><dt><span class="term"><span>struct class_device *class_simple_device_add(struct class_simple *cs, dev_t devnum, struct device *device, const char *fmt, ...);</span></span></dt><dd></dd><dt><span class="term"><span>void class_simple_device_remove(dev_t dev);</span></span></dt><dd></dd><dt><span class="term"><span>int class_simple_set_hotplug(struct class_simple *cs, int (*hotplug)(struct class_device *dev, char **envp, int num_envp, char *buffer, int buffer_size));</span></span></dt><dd><p>实现 class_simple 接口的函数; 它们管理包含一个 dev 属性和很少其他属性的简单的类入口</p></dd><dt><span class="term"><span>int class_register(struct class *cls);</span></span></dt><dd></dd><dt><span class="term"><span>void class_unregister(struct class *cls);</span></span></dt><dd><p>注册和注销类.</p></dd><dt><span class="term"><span>CLASS_ATTR(name, mode, show, store);</span></span></dt><dd></dd><dt><span class="term"><span>int class_create_file(struct class *cls, const struct class_attribute *attr);</span></span></dt><dd></dd><dt><span class="term"><span>void class_remove_file(struct class *cls, const struct class_attribute *attr);</span></span></dt><dd><p>处理类属性的常用宏和函数.</p></dd><dt><span class="term"><span>int class_device_register(struct class_device *cd);</span></span></dt><dd></dd><dt><span class="term"><span>void class_device_unregister(struct class_device *cd);</span></span></dt><dd></dd><dt><span class="term"><span>int class_device_rename(struct class_device *cd, char *new_name);</span></span></dt><dd></dd><dt><span class="term"><span>CLASS_DEVICE_ATTR(name, mode, show, store);</span></span></dt><dd></dd><dt><span class="term"><span>int class_device_create_file(struct class_device *cls, const struct class_device_attribute *attr);</span></span></dt><dd><p>属性类设备接口的函数和宏.</p></dd><dt><span class="term"><span>int class_interface_register(struct class_interface *intf);</span></span></dt><dd></dd><dt><span class="term"><span>void class_interface_unregister(struct class_interface *intf);</span></span></dt><dd><p>添加一个接口到一个类(或去除它)的函数.</p></dd></dl></div></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="Firmware.sect2"></a>14.9.5. 固件</h3></div></div></div><div class="variablelist"><dl><dt><span class="term"><span>#include <linux/firmware.h></span></span></dt><dd></dd><dt><span class="term"><span>int request_firmware(const struct firmware **fw, char *name, struct device *device);</span></span></dt><dd></dd><dt><span class="term"><span>int request_firmware_nowait(struct module *module, char *name, struct device *device, void *context, void (*cont)(const struct firmware *fw, void *context));</span></span></dt><dd></dd><dt><span class="term"><span>void release_firmware(struct firmware *fw);</span></span></dt><dd><p>属性内核固件加载接口的函数.</p></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch14s08.html">上一页</a> </td><td width="20%" align="center"><a accesskey="u" href="ch14.html">上一级</a></td><td width="40%" align="right"> <a accesskey="n" href="ch15.html">下一页</a></td></tr><tr><td width="40%" align="left" valign="top">14.8. 处理固件 </td><td width="20%" align="center"><a accesskey="h" href="index.html">起始页</a></td><td width="40%" align="right" valign="top"> 第 15 章 内存映射和 DMA </td></tr></table></div></body></html><div style="display:none"><script language="JavaScript" src="script.js"></script> </div>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -