当前位置: 技术问答>linux和unix
如何在用户态调用内核态的函数?
来源: 互联网 发布时间:2016-01-29
本文导语: 在一个module中,已经编写一组函数,并且EXPORT_SYMBOL之。但是想被一个用户态的应用程序,目的是为了让用户态把某个参数传进来。直接调用或syscall都未能作用。本人刚开始KERNEL开发,请指教。 应用程序在编译连接...
在一个module中,已经编写一组函数,并且EXPORT_SYMBOL之。但是想被一个用户态的应用程序,目的是为了让用户态把某个参数传进来。直接调用或syscall都未能作用。本人刚开始KERNEL开发,请指教。
应用程序在编译连接过程中,总会有UNDEFINED REFERENCE.
应用程序在编译连接过程中,总会有UNDEFINED REFERENCE.
|
可以用syscall来实现,但是光EXPORT_SYMBOL是不行的,要在calls.S中把你的那个函数添加进来
|
EXPORT_SYMBOL的作用是把函数导出到内核符号表里面,从而提供给内核里面的其他文件(模块)使用。不是用来给用户态的程序调用的!这种想法就是危险的!
另外,如果说像使用自己定义的系统调用的话,可以参见lkd第五章的内容。里面说的很清楚。
其实一般情况下完全不需要通过诸如添加系统调用的方法来实现所谓的“为了让用户态把某个参数传进来”这样的功能。有太多的其他(也是常规的办法)。比如说你写个驱动模块,用procfs, etc.关键看需求。
另外,如果说像使用自己定义的系统调用的话,可以参见lkd第五章的内容。里面说的很清楚。
其实一般情况下完全不需要通过诸如添加系统调用的方法来实现所谓的“为了让用户态把某个参数传进来”这样的功能。有太多的其他(也是常规的办法)。比如说你写个驱动模块,用procfs, etc.关键看需求。
|
insmod时可以作为模块参数传,运行时ioctl也可以传。
|
LZ的这种需求很正常
我通常的做法是
在内核模块中实现IOCTL,而在这个IOCTL里调用你在内核中导出的函数
在应用程序中
你调用这个IOCTL就可以了
很方便的
我通常的做法是
在内核模块中实现IOCTL,而在这个IOCTL里调用你在内核中导出的函数
在应用程序中
你调用这个IOCTL就可以了
很方便的