- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
附录 5 常用内核函数
类别 函数名 功能 函数形成 参数 描述
驱
动
程
序
入
口
和
出
口
点 module_init
驱动程序初始化入口点 module_init x x为启动时或插入模块时要运行的函数
如果在启动时就确认把这个驱动程序插入内核或以静态形成链接,则module_init将其初始化例程加入到“__initcall.int”代码段,否则将用init_module封装其初始化例程,以便该驱动程序作为模块来使用 module_exit
驱动程序退出出口点
module_exit x
x为驱动程序被卸载时要运行的函数
当驱动程序是一个模块,用rmmod卸载一个模块时module_exit 将用cleanup_module 封装clean-up
代码。如果驱动程序是静态地链接进内核,则module_exit L 函数不起任何作用 原
子
和
指
针
操
作 atomic_read 读取原子 变量 atomic_read v v为指向atom_ic_t类型的指针 原子地读取v的值。注意要保证 atomic的有用范围只有24位 atomic_set
设置原子 变量 atomic c_set v,i v为指向atomic _t类型的指针,i为待设置的值 原子地把v的值设置为i。注意要保证atomic的有用范围只育24位 atomic_add 把整数增 加到原子 变量 void atomic_add int i,atomic_t * v i为要增加的值,v为指向atomic_t类型的指针 原子地把i增加到v。注意要保证 atomic的有用范围只有24位 atomic_sub
减原子变 量的值
void atomic_sub
int i,atomic_t * v i为要减取的值,v为指向atomic_t类型的指针 原子地从v减取i:注意要保证 atomic的有用范围只有24位
内存操作 kmalloc
分配内存
void kmalloc size_t size,int flags
size为所请求内存的字节数,flags为要分配的内存类型
kmalloc是在内核中分配内存常用的一个函数。flags参数的取值如下:GFP_USER一代表用户分配内存,可以睡眠GFP_KERNEL一分配内核中的内存,可以睡眠GFP_ATOMIC一分配但不睡眠,在中断处理程序内部使用。另外,设置GFP_DMA标志表示所分配的内存必须适合DMA,例如在i386平台上,就意味着必须从低16MB分配内存 kfree 释放以前分配的内存 void kfree const void * objp objp为由kmalloc 返回的指针 附录五 常用内核函数
类
别 函数名 功能 函数形成 参数 描述
双向链表操作 list_add
增加一个新元素
void list_add struct list_head。new,struct list_head。headl new为要增加的新元素,head为增加以后的链表头
在指定的头元素后插入一个新元素.用于栈的操作 list_add_tail
增加一个新元素
void list_add_tail struct list_head * new,struct list_head * head ; new为要增加的新元素,head为增加以前的链表头
在指定的头元素之前插入一个新元素,用于队列的操作 list_del 从链表中删除一个元素 void list_del struct list_head *entry ; entry为要从链表中删除的元素 list_del_init
从链表删除一个元素,并重新初始化链表 void list_del_init struct list_head * entry
entry为要从链表中删除的元素 list_empty 测试一个链表是否为空 int list_empty struct list_head *head head为要测试的链表 list_splice
把两个链表合并在一起 void list_splice struct list_head * list,struct list_head * head list为新加入的链表,head为第一个链表 list_entry
获得链表中元素的结构
list_entry ptr,type,member
ptr为指向ist_head的指针,type为一个结构体,而member为结构type中的一个域,其类型为list_head
原创力文档


文档评论(0)