Linux 驱动程序中相关函数注释汇总(跟新中)

1、ARRAY_SIZE
宏,是求设备结构体中设备的个数

定义在linux/kernel.h中

#define ARRAY_SIZE(arr)(sizeof(arr)/sizeof((arr)[0]) + __must_be_array(arr))

sizeof(arr)/sizeof((arr)[0])是求出设备的个数,__must_be_array(arr)是防止被吴用,比如用指针而不是数组上。
2、INT_WORK

以前内核里对这个函数是这样定义的 #define INIT_WORK(_work, _func, _data),可以理解为INIT_WORK会在你定义的_work工作队列里面增加一个工作任务,该任务就是_func。_func这个任务会需要一些数据作为参数,这个参数就是通过_data传递的。

       do{                                                           /
                 (_work)->data = (atomic_long_t) WORK_DATA_INIT();      /
                    INIT_LIST_HEAD(&(_work)->entry);                       /
                    PREPARE_WORK((_work),(_func));                        /
          } while (0)

      #define INIT_DELAYED_WORK(_work,_func)                        /
            do{                                                   /
                    INIT_WORK(&(_work)->work,(_func));            /
                  init_timer(&(_work)->timer);                   /
             } while (0)
 
3、container_of()

#define container_of(ptr, type, member)({
const typeof(((type *)0)->member ) *__mptr = (ptr);
(type *)( (char*)__mptr - offsetof(type,member) );})

(char *)__mptr转换为字节型指针。(char *)__mptr -offsetof(type,member) )用来求出结构体起始地址(为char *型指针),然后(type*)( (char *)__mptr - offsetof(type,member) )在(type *)作用下进行将字节型的结构体起始指针转换为type *型的结构体起始指针。

它的作用显而易见,那就是根据一个结构体变量中的一个域成员变量的指针来获取指向整个结构体变量的指针。
时间: 2024-12-20 11:06:28

Linux 驱动程序中相关函数注释汇总(跟新中)的相关文章

Myeclipse中导入项目后java类中汉字注释出现乱码问题(已解决)

今天重装系统,安装了新的Myeclipse后,导入之前的项目后,,出现了乱码问题.乱码问题主要是java类中的注释,而jsp页面中汉字却完好如初: 右键项目,查看项目的编码格式,UTF-8,把java文件直接用记事本打开,没问题,没有乱码,查看了一下记事本的编码格式,GBK,看来myeclipse无法解析汉字的原因是因为对于java文件的编码格式不是GBK,网络上查了一下,发现在myeclipse中 编写java文件的默认编码格式是GBK,于是将java的默认编码格式改为GBK,就可以了.具体步

在linux内核文件中添加自己的驱动,添加自己的linux驱动,编译自己的linux驱动程序方法和例子图文

此文章为done原创,转载请写明出处,尊重原创. 写这个文章,我参考了网上的一些博客: http://bbs.chinaunix.net/thread-3634524-1-1.html http://www.bkjia.com/gjrj/800182.html 也参考了参考了 <linux驱动开发详解>3.4章节,实现建立自己驱动目录. 文章中的驱动范例是:linux设备驱动开发详解第二版 的 global mem tow,宋宝华主编的书本光盘源码 在我们学习了linux的驱动之后,我们都想编

linux驱动程序中的poll机制编程

#include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/init.h> #include <linux/delay.h> #include <asm/irq.h> #include <linux/interrupt.h> #include <asm/uaccess.h> #include

Linux Shell脚本去掉几类常见文件中的注释

Linux操作系统中去掉各类文件中的注释这个功能比较常用,通常用在查看一个较长的文件,又不想看注释的情况.通常这些文件包括C语言编写的*.c.*.h文件.cpp文件.*.xml文件.*.sh shell脚本文件.*.ini *.conf配置文件.*.php *.py *.pl等编程语言编写的文件以及无扩展名的一些可执行文件等. 实现这个功能并不复杂,通常注释风格就那么几种,在编写脚本过程中只需要编写出合适的正则表达式以及运用适当的文本处理工具(grep.sed等)即可. 针对几种常见的注释风格编

fs/ext2/inode.c相关函数注释

用数组chain[4]描述四种不同的索引,即直接索引.一级间接索引.二级间接索引.三级间接索引.举例说明这个结构各个域的含义.如果文件内的块号为8,则不需要间接索引,所以只用chain[0]一个Indirect结构,p指向直接索引表下标为8处,即&inode->u.ext2_i.i_data[8]:而key则持有该表项的内容,即文件块号所对应的设备上的块号(类似于逻辑页面号与物理页面号的对应关系):bh为NULL,因为没有用于间接索引的块.如果文件内的块号为20,则需要一次间接索引,索引要用

第六章 第一个Linux驱动程序:统计单词个数 心得笔记

一.Linux系统将每个驱动都映射成一个文件.这些文件称为设备文件或驱动文件,都保存在/dev目录中.这使得与Linux驱动进行交互就向与普通文件进行交互一样容易.大多数Linux驱动都有与其对应的设备文件,因此与Linux驱动交换数据变成与驱动设备交换数据. 二.编写Linux驱动程序 1.建立Linux驱动骨架           Linux内核在使用驱动时需要装载与卸载驱动        装载驱动:建立设备文件.分配内存地址空间等:module_init 函数处理驱动初始化        

[转]Linux 系统运维学习方法汇总

Linux 系统运维学习方法汇总 (2014.07.18) from:http://freeloda.blog.51cto.com/2033581/1315694 大纲 一.前言 二.Linux 运维大环境说明 三.Linux 运维学习思路 四.Linux 运维大方向说明 五.Linux 运维学习必看书籍推荐 六.Linux 运维实践内容简介 注,本博文主要用于交流与学习.如有雷同,纯属意外. 一.前言 最近,有不少博友问我.刚进入运维行业怎么学习呢?思路是什么?一点思路也没有,然后与大家在群里

第六章 第一个Linux驱动程序: 统计单词个数

本章作为实战第一章,首先要做的就是了解linux驱动到底是个什么东西,首先了解linux驱动的工作方式,linux系统将每一个驱动都映射成一个文件,保存在/dev中,再使用c语言函数ioctl向驱动的设备文件发送打印命令. 一.编写Linux驱动程序 1.建立Linux驱动骨架 Linux内核在使用驱动时需要装载与卸载驱动 装载驱动:建立设备文件.分配内存地址空间等:module_init 函数处理驱动初始化 卸载驱动:删除设备文件.释放内存地址空间等:module_exit函数处理退出 包含这

linux驱动程序头文件

1.编写任何驱动程序都必须带的头文件 #include <linux/module.h>:在编写任何模块都需要包含此头文件.该头文件自动包含了 <linux/version.h>头文件,该头文件包含了宏                                                                                                  MODULE_LICENSE("GPL")的定义. #include