内核中宏EXPORT_SYMBOL:
module的KERNEL的函数调用刚好和用户态编译程序不同。
因为模块运行在内核空间,不能直接调用应用程序库,只能调用内核函数。 EXPORT_SYMBOL宏的作用就是把内核函数的符号导出。符号的意思就是函数的 入口地址。
module不需要也不可能在连接时候resolve all the requested symbols。而是在运行时 到KERNEL中去找(由KERNEL中的函数loadmodule()中的_findsymbol 做)。 KERNEL中有 一个符号表,就是EXPORTSYMBOL的名字表。如果module 引用了一个KERNEL中的未被 EXPORT_SYMBOL的符号,就找不到。模块的加载就不成功。
如果非要这样,可以用写上绝对地址的函数指针来调用未被EXPORT_SYMBOL的函数。
阅读(1527) | 评论(0) | 转发(0) |