我有一个驱动程序,可以编译并加载到Linux内核中。在这个驱动程序中有一些我想从内核文件'fs / readdir.c'访问的函数。 另外,如何测试是否加载了驱动程序?
我需要以下内容。
if(myDriver is loaded){
myDriver.functionCall();
}
我在互联网搜索中找到的所有示例都是从用户空间应用程序中进行的。
答案 0 :(得分:2)
另一种可能性是在模块中使用EXPORT_SYMBOL(functionCall);
,这将使您的函数出现在内核符号表中。然后,您可以使用find_symbol("functionCall", blah, blah)
检查符号是否存在并动态查找其值/位置。
参见linux / kernel / module.c和module.h
答案 1 :(得分:1)
fs/readdir.c
符号尚未在内核中, functionCall
将无法链接。你只能通过间接来做到这一点。在主内核代码中设置一些ops
结构,将其初始化为虚拟函数,或仅调用NULL
以告诉内核的其余部分您的驱动程序尚未加载。在驱动程序初始化例程中,将该结构中的函数指针设置为模块中的函数(在de-init中重置为默认值)。虽然结构需要某种形式的种族保护,所以你可能最终会将信号量作为其成员之一。这可以扩展到每个设备的结构等。