如何从用户程序中调用内核模块中编写的函数?

时间:2012-03-01 11:59:58

标签: c module operating-system linux-kernel kernel

示例驱动程序已成功创建和加载,因为编写了用户定义的函数,它会执行一些操作。我需要编写一个用户程序来调用驱动程序模块中的用户定义函数。

在以下情况下需要帮助。

  
      
  1. 如何从用户程序访问驱动程序代码?。
  2.   
  3. 如何从用户程序中调用内核模块中编写的函数?
  4.   

感谢。

4 个答案:

答案 0 :(得分:7)

您可以让驱动程序对写入(或必要时,ioctl)对/ dev / xxx文件或/ proc / xxx文件做出反应。此外,您可以创建一个新的系统调用,但这更像是一个玩具,因为该模块只适用于自定义构建的内核。

编辑:尝试http://www.faqs.org/docs/kernel/x571.html(在角色设备驱动程序上。)

答案 1 :(得分:3)

这取决于你的功能是什么,但一般来说:

  • 如果您希望以值的形式存储显示属性(例如背光的当前亮度),标准的做法是使用sysfs:http://kernel.org/doc/Documentation/filesystems/sysfs.txt

  • 如果要从设备(实际或虚拟)写入/读取值,请将设备的内存或IO区域导出到用户空间,或者更一般地控制设备(例如,设置摄像机的分辨率和捕获你会使用带有read / write / mmap和ioctl函数的字符或块设备:http://luv.asn.au/overheads/chrdev-talk.html

  • 最后,如果你的函数只是控制来自内核的东西,那么sysfs或procfs应该是可行的方法。我不知道为什么人们现在仍在使用procfs,除了misc设备之外。

因此,通常,您需要通过文件将内核函数导出到用户空间,方法是定义在打开,读取,写入文件时调用的挂钩(从/向复制数据)用户空间),mmap'ed(共享内存区域而不复制)或调用ioctl时(执行更一般的控制)。

答案 2 :(得分:1)

答案 3 :(得分:0)

第1节

:    读/写/ ioctl请参阅file_operations 对于Qn.2:    1)系统调用    2)driver - ioctl