欢迎来到天天文库
浏览记录
ID:17827408
大小:46.00 KB
页数:4页
时间:2018-09-06
《附录 5 常用内核函数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、类别函数名功能函数形成参数描述驱动程序入口和出口点module_init驱动程序初始化入口点module_init(x)x为启动时或插入模块时要运行的函数如果在启动时就确认把这个驱动程序插入内核或以静态形成链接,则module_init将其初始化例程加入到“__initcall.int”代码段,否则将用init_module封装其初始化例程,以便该驱动程序作为模块来使用module_exit驱动程序退出出口点module_exit(x)x为驱动程序被卸载时要运行的函数当驱动程序是一个模块,用rmmod卸载一个模块时module_exit()
2、将用cleanup_module()封装clean-up代码。如果驱动程序是静态地链接进内核,则module_exitL)函数不起任何作用原子和指针操作atomic_read读取原子变量atomic_read(v)v为指向atom_ic_t类型的指针原子地读取v的值。注意要保证atomic的有用范围只有24位atomic_set设置原子变量atomicc_set(v,i)v为指向atomic_t类型的指针,i为待设置的值原子地把v的值设置为i。注意要保证atomic的有用范围只育24位atomic_add把整数增加到原子变量voidatom
3、ic_add(inti,atomic_t*v)i为要增加的值,v为指向atomic_t类型的指针原子地把i增加到v。注意要保证atomic的有用范围只有24位atomic_sub减原子变量的值voidatomic_sub(inti,atomic_t*v)i为要减取的值,v为指向atomic_t类型的指针原子地从v减取i:注意要保证atomic的有用范围只有24位内存操作kmalloc分配内存voidkmalloc(size_tsize,intflags)size为所请求内存的字节数,flags为要分配的内存类型kmalloc是在内核中分配内
4、存常用的一个函数。flags参数的取值如下:GFP_USER一代表用户分配内存,可以睡眠GFP_KERNEL一分配内核中的内存,可以睡眠GFP_ATOMIC一分配但不睡眠,在中断处理程序内部使用。另外,设置GFP_DMA标志表示所分配的内存必须适合DMA,例如在i386平台上,就意味着必须从低16MB分配内存kfree释放以前分配的内存voidkfree(constvoid*objp)objp为由kmalloc()返回的指针附录五常用内核函数类别函数名功能函数形成参数描述双向链表操作list_add增加一个新元素voidlist_add(s
5、tructlist_head。new,structlist_head。headl)new为要增加的新元素,head为增加以后的链表头在指定的头元素后插入一个新元素.用于栈的操作list_add_tail增加一个新元素voidlist_add_tail(structlist_head*new,structlist_head*head);new为要增加的新元素,head为增加以前的链表头在指定的头元素之前插入一个新元素,用于队列的操作list_del从链表中删除一个元素voidlist_del(structlist_head*entry);en
6、try为要从链表中删除的元素list_del_init从链表删除一个元素,并重新初始化链表voidlist_del_init(structlist_head*entry)entry为要从链表中删除的元素list_empty测试一个链表是否为空intlist_empty(structlist_head*head)head为要测试的链表list_splice把两个链表合并在一起voidlist_splice(structlist_head*list,structlist_head*head)list为新加入的链表,head为第一个链表list_
7、entry获得链表中元素的结构list_entry(ptr,type,memberptr为指向ist_head的指针,type为一个结构体,而member为结构type中的一个域,其类型为list_headlist_for_each扫描链表list_for_each(pos,head)ptr为指向list_head的指针,用于循环计数,head为链表头当编写驱动程序时,一般情况下不能使用C标准库的函数。Linux内核也提供了与标准库函数功能相同的一些函数,但二者还是稍有差别。函数/宏描述intsprintf(char*buf,constch
8、ar*fmt,...);intvsprintf(char*buf,constchar*fmt,va_listargs);接收数据到字符串中的函数printk(...)同用户空间的
此文档下载收益归作者所有