Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何从用户程序调用在内核模块中编写的函数?_C_Module_Operating System_Linux Kernel_Kernel - Fatal编程技术网

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

C 如何从用户程序调用在内核模块中编写的函数?,c,module,operating-system,linux-kernel,kernel,C,Module,Operating System,Linux Kernel,Kernel,已成功创建并加载示例驱动程序,因为编写了用户定义的函数,它执行了一些操作。我需要编写一个用户程序来调用驱动程序模块中的用户定义函数 在以下情况下需要帮助 如何从用户程序访问驱动程序代码 如何从用户程序调用在内核模块中编写的函数 谢谢。您可以让您的驱动程序在写入/dev/xxx文件或/proc/xxx文件时做出反应(或在必要时进行ioctl)。此外,您可以创建一个新的系统调用,但这更像是一个玩具,因为该模块只能在定制的内核上工作 编辑:尝试(在字符设备驱动程序上)。这取决于您的功能,但通常: 如

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

在以下情况下需要帮助

  • 如何从用户程序访问驱动程序代码
  • 如何从用户程序调用在内核模块中编写的函数
    谢谢。

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


    编辑:尝试(在字符设备驱动程序上)。

    这取决于您的功能,但通常:

    • 如果您希望以值的形式存储显示属性(例如背光的当前亮度),标准方法是使用sysfs:

    • 如果要从设备(真实或虚拟)写入/读取值,将设备的内存或IO区域导出到用户空间,或更一般地控制设备(例如,设置相机分辨率和捕获帧),则应使用具有读/写/mmap和ioctl功能的字符或块设备:

    • 最后,如果您的函数只是从内核控制一些东西,那么sysfs或procfs应该是最佳选择。我不知道为什么现在人们仍然使用procfs,也许除了其他设备

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

    VDSO:

    内核模式Linux:

    对于问题1: 读/写/ioctl参见文件操作 对于问题2: 1) 系统调用 2) 驱动程序-ioctl

    在此处检查此参考。它使用设备文件实现用户空间到内核的通信。