当前位置: 技术问答>linux和unix
写内核模块时,哪些函数可以用,哪些不能用?
来源: 互联网 发布时间:2016-04-17
本文导语: 我在一个模块里用memset后,就报错了,不知道为什么 像系统调用啦,open write好像不能用 那我怎么就能知道哪些能用哪些不能用呢? 比如我想获得系统时间,在应用程序里查一下就能知道用那个函数,用哪个api 但是在内核程...
我在一个模块里用memset后,就报错了,不知道为什么
像系统调用啦,open write好像不能用
那我怎么就能知道哪些能用哪些不能用呢?
比如我想获得系统时间,在应用程序里查一下就能知道用那个函数,用哪个api
但是在内核程序里想找这么一个函数,我应该在哪里去找呢?
像系统调用啦,open write好像不能用
那我怎么就能知道哪些能用哪些不能用呢?
比如我想获得系统时间,在应用程序里查一下就能知道用那个函数,用哪个api
但是在内核程序里想找这么一个函数,我应该在哪里去找呢?
|
如楼上所说, 系统调用在内核里面以sys_开头存在,而sys_开头的函数通常会调用一个do_开头的函数
这些函数你可以在你的内核模块里面使用!
memset嘛, 看看 include/asm/string.h 中是否有?(貌似有的) 如果没有,你可以自己参考写一个,比较简单。
good luck!
|
没有你说的限制。
如果是系统调用,在内核中对应的在前面加个do_前缀。
如gettimeofday对应于内核中的 do_gettimeofday
|
在内核态编程与在用户态编程相比有很大不同
在用户态编程资源比较丰富,有各种库可以使用
但是在内核态编程就会有很大限制:不能使用库函数,除非在内核中封装了与库函数名称和用法一样的函数。
(在内核中的确有几个封装函数的,呵呵)
GNU C参考手册,仅仅是C库的参考手册,当然没有printk,printk是内核函数
2楼的方法可以借鉴,但不一定总成功,可以使用功能比较全的集成开发环境,或者类似source insight来帮助模糊匹配找到相关的调用
在用户态编程资源比较丰富,有各种库可以使用
但是在内核态编程就会有很大限制:不能使用库函数,除非在内核中封装了与库函数名称和用法一样的函数。
(在内核中的确有几个封装函数的,呵呵)
GNU C参考手册,仅仅是C库的参考手册,当然没有printk,printk是内核函数
2楼的方法可以借鉴,但不一定总成功,可以使用功能比较全的集成开发环境,或者类似source insight来帮助模糊匹配找到相关的调用
|
你肯定看到了有些函数 在内核和用户态 的 原型 一样。
不过你最好将他们分清,属于哪个。
printk和printf,你可以认识printk是printf对应的内核版本。
在用户态的open,在内核里对应于sys_open。
|
写模块时文件 /proc/kallsyms中的函数都是可用的
[root@jim ~]# vi /proc/kallsyms
......
0403106 T arch_flush_exec_range
c0403125 T select_idle_routine
c040315c T sys_execve
c04031ab T sys_vfork
c04031db T sys_clone
c0403216 T sys_fork
c0403246 T mwait_idle_with_hints
c0403285 t mwait_idle
c040328f T release_thread
c04032a1 T kernel_thread
c0403333 T cpu_idle
c04033ea T cpu_idle_wait
c04034bc T exit_thread
c040355d T flush_thread
c04035b5 T dump_thread
c04036d6 T get_wchan
c040373e T sys_set_thread_area
c04038d8 T sys_get_thread_area
c0403a05 T arch_align_stack
c0403a33 T randomize_brk
c0403a7c T arch_add_exec_range
c0403ada T arch_remove_exec_range
......
[root@jim ~]# vi /proc/kallsyms
......
0403106 T arch_flush_exec_range
c0403125 T select_idle_routine
c040315c T sys_execve
c04031ab T sys_vfork
c04031db T sys_clone
c0403216 T sys_fork
c0403246 T mwait_idle_with_hints
c0403285 t mwait_idle
c040328f T release_thread
c04032a1 T kernel_thread
c0403333 T cpu_idle
c04033ea T cpu_idle_wait
c04034bc T exit_thread
c040355d T flush_thread
c04035b5 T dump_thread
c04036d6 T get_wchan
c040373e T sys_set_thread_area
c04038d8 T sys_get_thread_area
c0403a05 T arch_align_stack
c0403a33 T randomize_brk
c0403a7c T arch_add_exec_range
c0403ada T arch_remove_exec_range
......