收藏 分享(赏)

附录 5 常用内核函数.doc

上传人:nacm35 文档编号:9502181 上传时间:2019-08-10 格式:DOC 页数:4 大小:46KB
下载 相关 举报
附录 5 常用内核函数.doc_第1页
第1页 / 共4页
附录 5 常用内核函数.doc_第2页
第2页 / 共4页
附录 5 常用内核函数.doc_第3页
第3页 / 共4页
附录 5 常用内核函数.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

1、附录五 常用内核函数类别函数名 功能 函数形成 参数 描述module_init驱动程序初始化入口点module_init(x) x 为启动时或插入模块时要运行的函数如果在启动时就确认把这个驱动程序插入内核或以静态形成链接,则module_init 将其初始化例程加入到“_initcall.int”代码段,否则将用 init_module 封装其初始化例程,以便该驱动程序作为模块来使用驱动程序入口和出口点 module_exit驱动程序退出出口点module_exit(x) x 为驱动程序被卸载时要运行的函数当驱动程序是一个模块,用 rmmod卸载一个模块时 module_exit()将用 c

2、leanup_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

3、 (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

4、是在内核中分配内存常用的一个函数。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 (stru

5、ct 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 为要从链表中删除

6、的元素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 获得链表中元素的结构

7、list_entry(ptr,type,memberptr 为指向 ist_head的指针,type 为一个结构体,而 member 为结构 type 中的一个域,其类型为 list_head双向链表操作list_for_each 扫描链表 list_for_each(pos,head)ptr 为指向 list_head的指针,用于循环计数,head 为链表头当编写驱动程序时,一般情况下不能使用 C 标准库的函数。Linux 内核也提供了与标准库函数功能相同的一些函数,但二者还是稍有差别。函数/宏 描述int sprintf (char *buf, const char *fmt, .);in

8、t vsprintf (char *buf, const char *fmt, va_list args);接收数据到字符串中的函数 printk (.) 同用户空间的 printf 函数 void *memset (void *s, char c, size_t count);void *memcpy (void *dest, const void *src, size_t count);char *bcopy (const char *src, char *dest, int count);void *memmove (void *dest, const void *src, size_t

9、 count);int memcmp (const void *cs, const void *ct, size_t count);void *memscan (void *addr, unsigned char c, size_t size);内存函数char *strcpy (char *dest, const char *src);char *strncpy (char *dest, const char *src, size_t count);char *strcat (char *dest, const char *src);char *strncat (char *dest, co

10、nst char *src, size_t count);int strcmp (const char *cs, const char *ct);int strncmp (const char *cs,const char *ct, size_t count);char *strchr (const char *s, char c);字符串比较函数等等 size_t strlen (const char *s);size_t strnlen (const char *s, size_t count);size_t strspn (const char *s, const char *accep

11、t);char *strpbrk (const char *cs, const char *ct);char *strtok (char *s, const char *ct);unsigned long simple_strtoul (const char *cp, char *endp, unsigned int base); 把字符串转换成数字get_user_byte (addr);put_user_byte (x, addr);get_user_word (addr);put_user_word (x, addr);get_user_long (addr);put_user_long

12、 (x, addr);访问用户内存的函数suser();fsuser();检测超级用户权限int register_chrdev (unsigned int major, const char *name, struct file_o perations *fops);int unregister_chrdev (unsigned int major, const char *name);int register_blkdev (unsigned int major, const char *name, struct file_o perations *fops);int unregister_blkdev (unsigned int major, const char *name);登记设备驱动器的函数._chrdev - 字符设备._blkdev - 块设备

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报