【问题标题】:How to call a function defined in a kernel module from a user space program如何从用户空间程序调用内核模块中定义的函数
【发布时间】:2017-05-16 05:00:11
【问题描述】:

我创建了一个内核模块。在模块中,我定义了一些函数,比如function1(int n)function2()。 编译和插入模块没有错误。我不明白的是如何从用户空间程序中调用function1(n)function2()

【问题讨论】:

    标签: linux-kernel linux-device-driver


    【解决方案1】:

    我认为没有直接的方法可以做到这一点,您不能像使用库那样将用户空间代码与内核链接。首先,您必须将您的函数注册为 syscall,然后使用 syscall() 函数调用 syscall。

    here

    还可以使用套接字通信在内核和用户空间之间建立一些接口,请参阅 这个link

    并在页面右侧找到与该主题相关的完整链接。

    您可以让驱动程序对 /dev/file 文件或 /proc/file 文件的写入做出反应。

    编辑

    表单名称文件我的意思是设备是内核中的文件,您可以通过ioctl() 访问 很好的解释是http://tldp.org/LDP/lkmpg/2.6/html/lkmpg.html#AEN885

    Link

    【讨论】:

    • 你的意思是我为我的模块添加了系统调用
    • @tunu 我认为编写新的系统调用是个坏主意。我不建议您这样做,因为该模块仅适用于自定义构建的内核。电池的想法是写入文件。有更新的答案请看
    • 写入文件 ??我不明白
    • @tunu 我的意思是每个设备在内核中都由一个文件结构表示。请参阅我的链接。
    • 其实我的模块不是设备驱动..更像是互斥量和二进制信号量。
    猜你喜欢
    • 2012-06-04
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多