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 *型的结构体起始指针。

它的作用显而易见,那就是根据一个结构体变量中的一个域成员变量的指针来获取指向整个结构体变量的指针。

4、module_param(name, type, perm);

1.定义模块参数的方法:

module_param(name, type, perm);

其中,name:表示参数的名字;

type:表示参数的类型;

perm:表示参数的访问权限;

2. 数组类型模块参数的定义:

用逗号间隔的列表提供的值;

声明一个数组参数:

module_param_array(name, type, num, perm);

其中,name:表示数组的名字;

type:表示参数的类型;

num :表示数组中元素数量;

perm:表示参数的访问权限;

3.type支持的基本类型有:

bool :布尔类型

invbool:颠倒了值的bool类型;

charp :字符指针类型,内存为用户提供的字符串分配;

int :整型

long :长整型

short :短整型

uint :无符号整型

ulong :无符号长整型

ushort :无符号短整型

4. perm参数 设定访问权限

modlue_param和module_param_array中的perm用于设定该参数的访问权限;

perm表示该参数在sysfs文件系统中所对应的文件节点的属性;你用该使用中定义的权限值;这个值控制谁可以存取这些模块参数在sysfs文件系统中的表示;当perm为0时,表示此参数不存在sysfs文件系统下对应的文件节点;否则,模块被加载后,在/sys/module/目录下将会出现以此模块名命名的目录,带有给定的权限;

比如:

#define S_IRWXU 00700

#define S_IRUSR 00400

#define S_IWUSR 00200

#define S_IXUSR 00100

#define S_IRWXG 00070

#define S_IRGRP 00040

#define S_IWGRP 00020

#define S_IXGRP 00010

#define S_IRWXO 00007

#define S_IROTH 00004

#define S_IWOTH 00002

#define S_IXOTH 00001

注意:如果一个参数被sysfs修改了,那么你的模块看到的参数值也被修改了,但是你的模块不会收到任何通知;你应当不要使模块参数可写,除非你准备好检测这个改变并因而作出反应;

5. 也可以在insmod(装载模块)的时候为参数指定值,如果没有指定则使用默认值,如下面的例子。

example:

MODULE_LICENSE("Dual BSD/GPL");

static int num=10;

module_param(num,int,S_IRUGO);

static int hello_init(void)

{

printk("Hello module init./n");

printk("num=%d/n",num);

return 0;

}

static void hello_exit(void)

{

printk("Goodbye module exit./n");

}

module_init(hello_init);

module_exit(hello_exit);

MODULE_DESCRIPTION("a simple module");

MODULE_ALIAS("hello");

linux 标准函数注释,Linux 驱动程序中相关函数注释汇总(跟新中)相关推荐

  1. python能调用身份证读卡器吗_用Python在Linux下调用新中新DKQ-A16D读卡器,读二代证数据...

    1.背景 最近在研究二代证读卡器,手头上的设备是新中新DKQ-A16D,在官网(https://www.onecardok.com.cn/download)逛了一圈,发现Win下的示例,浏览器插件很多 ...

  2. 焱融云超融合+IBM云管平台=新中新IaaS新模式

    新中新电子股份有限公司是国内校园一卡通系统解决方案供应商,在智能一卡通及智能交通领域拥有多年的技术优势与经验积累,业务涵盖智慧校园.智慧交通.智慧公安.智慧园区等相关领域. 新中新通过自建的中国高校一 ...

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

    Linux操作系统中去掉各类文件中的注释这个功能比较常用,通常用在查看一个较长的文件,又不想看注释的情况.通常这些文件包括C语言编写的*.c.*.h文件.cpp文件.*.xml文件.*.sh shel ...

  4. linux汇编中的注释,Linux 汇编器:对照 GAS 和 NASM

    Linux 汇编器:对比 GAS 和 NASM 转自 http://www.ibm.com/developerworks/cn/linux/l-gas-nasm.html#ibm-pcon 与其他语言 ...

  5. [中英对照]User-Space Device Drivers in Linux: A First Look | 初识Linux用户态设备驱动程序...

    如对Linux用户态驱动程序开发有兴趣,请阅读本文,否则请飘过. User-Space Device Drivers in Linux: A First Look | 初识Linux用户态设备驱动程序 ...

  6. linux svn配置提交输入备注,linux下svn服务强制添加备注(注释)提交

    标签: linux下svn服务强制添加备注(注释)提交 Linux版本: line-height: 26px; white-space: normal; background-color: rgb(2 ...

  7. linux arm下硬件驱动程序放哪里,Arm-Linux摄像头驱动程序的移植

    Arm开发板上摄像头的移植有两种方法:第一,将驱动程序添加到内核,通过编译内核,烧写到板子上:第二种,通过动态加载摄像头驱动模块的方法进行硬件的驱动.作者首先在PC的linux系统进行摄像驱动程序的移 ...

  8. 《正则表达式经典实例(第2版)》——2.18 向正则表达式中添加注释

    本节书摘来自异步社区<正则表达式经典实例(第2版)>一书中的第2章,第2.18节,作者: [美]Jan Goyvaerts , Steven Levithan著,更多章节内容可以访问云栖社 ...

  9. linux man 路径,Linux中.man文件用法【转】

    一.man文件简述 1.man文件的存放位置 man文件一般应放在/usr/share/man/的对应子目录下,子目录名的形式为manN. 其中N是数字1-9.这个数字也就是man中的section. ...

最新文章

  1. 日志服务器搭建之多服务器日志转发与格式化处理
  2. sql 取表的前10条记录,任意中间几行的记录
  3. KDD_CUP99数据集处理和测试(已处理数据可下载)
  4. Java事务处理总结【JDBC事务|JTA事务|容器事务】
  5. 《01》ECMAScript 6 简介
  6. linux怎么进去vi编辑器,red hat enterprise linux开机怎么进入vi编辑器界面?
  7. 《Drupal实战》——3.3 使用Views创建列表
  8. 婧婧音乐开发笔记01篇-项目组织结构和布局文件
  9. java web主流框架整合开发 光盘_开发者突击:Java Web主流框架整合开发(第2版)(附CD光盘1张)...
  10. 从零开始学python必看,最强“Python编程三剑客(pdf)”,你值得拥有!
  11. cad画圆如何确定圆心_CAD如何利用对象捕捉追踪功能来确定小圆圆心以及矩形的角点位置...
  12. h5网站模板_超全超实用的80个模板网站,我全部整理在这里了
  13. CAD中怎么批量标注坐标?CAD批量标注坐标​
  14. c语言 鼠标指针图标,WIN7系统鼠标图案DIY!自己动手,美不胜收!-win7鼠标指针...
  15. 2013级C++第2周(春)项目——结构体应用大体验
  16. linux 360云盘下载文件夹里,360安全云盘Linux版图文使用说明
  17. 第13课:构建神经网络模型的实用建议
  18. 免费聊天插件 mylivechat
  19. 华为云排名第八,2019年云综合收入85亿元
  20. JavaScript异形滚动轮播

热门文章

  1. mysql lost connection to server during query
  2. Android开发之 Android 的基本组件的概述
  3. C# ASPX页面做上传提示:超过了最大请求长度,解决方法
  4. BZOJ 3404: [Usaco2009 Open]Cow Digit Game又见数字游戏(博弈论)
  5. 【转】系统缓存全解析一
  6. Robotframework--随机选取下拉框的字段值进行搜索
  7. python中的关键字---2(函数基础类)
  8. 防盗链与token运用
  9. 交换机端口呈现err-disable的原因
  10. C#获取网页内容的三种方式