附录 5 常用内核函数.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

sb9185sb + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档