当前位置:  技术问答>linux和unix

写内核模块时,哪些函数可以用,哪些不能用?

    来源: 互联网  发布时间:2016-04-17

    本文导语:  我在一个模块里用memset后,就报错了,不知道为什么 像系统调用啦,open write好像不能用 那我怎么就能知道哪些能用哪些不能用呢? 比如我想获得系统时间,在应用程序里查一下就能知道用那个函数,用哪个api 但是在内核程...

我在一个模块里用memset后,就报错了,不知道为什么
像系统调用啦,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来帮助模糊匹配找到相关的调用





|

你肯定看到了有些函数 在内核和用户态 的 原型 一样。

不过你最好将他们分清,属于哪个。

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
......

    
 
 

您可能感兴趣的文章:

  • 但是内核源码中(相关c文件)明明EXPORT了 函数,为什么查看内核符号/proc/kallsys却没有该函数
  • 不重新编译内核能修改内核函数吗?
  • 内核进程间发送信号用哪个函数,如果没有这东西,那内核里异步通知用哪个东西
  • 我如何调用 内核函数 /linux/fs 里面的内核 函数:比如 自己的程序调用 ext3_delete_inode
  • 在内核的某个函数中,如何能知道是哪个用户空间的函数调用了它,以及这个用户空间函数所在的文件?
  • 关于如何使用内核函数的问题
  • 怎么查找有内核函数及其有关信息???
  • linux0.11内核有些函数是封装的吗?比如timer_interrupt()函数。
  • linux 2.6.35.4 内核中已没有netif_rx_schedule()函数,那替代函数是啥?
  • 调用内核的函数
  • 关于内核里实现的函数
  • 如何在内核中调用自己写的函数?
  • 哪里有linux内核函数的列表?
  • 系统调用对应的内核函数在什么地方
  • 关于内核中函数执行问题
  • 请问,内核里的函数手册从哪里可以查到?
  • 请问linux内核编程的能不能调用#include <stdio.h>的函数
  • 内核中的timer是不是可以理解为多线程,我想对一段代码加锁,如何实现,有没有可用的内核函数?
  • 关于内核函数问题
  • linux内核是用c和汇编写的,怎么会有inline内联函数呢?
  • *******是不是对内核模块编程然后再重新编译内核就可以把此模块整合到linux系统中
  • 内核模块跟内核版本不匹配????????
  • [求教]内核加载模块后,这部分内容编译在内核里的吗?
  • 谁能提供kgdb内核补丁内核模块的下载
  • 驱动模块可以编入内核,想单独编译成模块,makefile怎么写?
  • 大侠帮忙!模块调试(非内核模块)
  • 想删除内核中的一个模块,输入命令后,系统提示该模块不存在。但是我lsmod时,它在/proc/modules中。求解。
  • linux和unix iis7站长之家
  • 内核模块是什么东西,怎么理解呢
  • Linux 内核模块编程问题!!!!
  • 内核模块和设备驱动的区别?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux内核中影响tcp三次握手的一些协议配置
  • Fedora Core 2自带的内核升级程序下载下来内核后,要不要再编译一遍内核?
  • TCP协议四次断连过程介绍及Linux内核协议栈中相关设置项
  • 进程内核栈和操作系统内核栈的关系
  • CentOS 6内核升级:下载编译启用新内核版本详细过程
  • Linux中内核线程不访问内核态地址空间?
  • Linux进程的内核栈和用户栈概念,相互关系及切换过程
  • 2.6内核下编译2.4内核
  • linux内核中的likely宏和unlikely宏介绍及用法
  • 编译新内核后怎么进入原来内核
  • CentOS 6.5 下载地址及如何升级内核(kernel)版本到 3.10.28
  • 请问linux中如何判断内核是否已经启动。(在内核中写程序)
  • Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法
  • 请教:如何安装新内核(rpm包)而不同原来得内核冲突?? 在线等待!!
  • docker使用的技术之Container内核原理介绍
  • linux为什么要升级内核?升级内核有何作用?
  • 内核升级后,如何在新的内核中加载显卡驱动?
  • 内核源码和结果make过的内核源码有什么区别
  • 如何学好内核?学了内核能应用于哪方面?
  • 请问在2.6的内核环境下编译2.4的内核有没有什么特殊的要求
  • 初学内核编程,在内核态下怎么用socket通信?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3