我有一个来自a.ko(内核模块)的导出函数foo()和foo1(),foo1()接受输入参数,一个函数指针。我从b.ko调用foo1(),并将foo()作为输入参数传递。我看到b.ko(未知符号foo)的insmod失败,即使a.ko在b.ko之前被insmod。任何解释/解决方案?谢谢,幸运 最佳答案 有两种方法可以解决这个问题,1)在同一个Makefile中编译两个内核模块,即objs-m:=a.ob.o.2)在将使用导出函数或变量的内核模块的Makefile中包含**KBUILD_EXTRA_SYMBOLS=。
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭9年前。Improvethisquestion我有一个代码可以检测内核模块中的GPIO中断。现在,我正在寻找一种机制来在检测到来自内核模块的gpio中断时通知用户空间。任何示例/代码片段与不同选项相比具有某些优势/劣势?感谢您的回复。
是否有可能在执行新进程、关闭进程以及状态更改(即停止、分页等)时(通过回调或类似方式)收到通知?在用户空间中,很容易在/proc上设置目录监听器。 最佳答案 您是否考虑过kprobes?您可以使用kprobes在执行某些内核代码时执行回调函数。例如,您可以添加一个do_forkkprobe以在创建新进程时发出警报,如thisexample中所示。.同样,您可以为do_exit()添加一个探测器,以在进程退出时捕获。要更改状态,您可以在sched_switch()上进行返回探测,并在状态更改时进行捕获。根据您的应用程序,这可能会增加太
我需要获取打开文件的页面缓存统计信息。文件结构中有一个地址空间指针(f_mapping),它又拥有名为page_tree的基数树的根。我需要遍历该树以获取有关该打开文件的所有缓存页面的信息。有一些函数,如radix_tree_for_each_chunk(迭代block),radix_tree_for_each_chunk_slot(迭代一个block中的槽)等,使用这些功能可以实现。我不确定相同的正确使用(参数)。如果发布任何示例,这将很有帮助。 最佳答案 我从Linux内核源代码中弄明白了。structfile*file=fil
据我所知,ioctl()用于向用户空间应用程序公开“扩展”系统调用接口(interface)。ioctl()不是添加数千个特定驱动程序独有的系统调用,而是用于通过单个系统调用提供可扩展的特定于驱动程序的功能。这似乎很清楚。但是,我正在尝试编译我的第一个使用ioctl()调用的应用程序,我开始怀疑我的理解。具体来说,我想调用ioctl()来“清理”eMMC设备。看看/usr/include/linux/mmc/ioctl.h(或在include/uapi/linux/mmc/ioctl.h的内核源代码中),我可以看到这个结构:structmmc_ioc_cmd{//Mostfieldso
我正在寻找一种方法来提取所有已提交的请求以包含在linux内核中。我想要所有被Linux和公司实际接受的代码,以及所有被拒绝的代码。这可能吗?我知道我可以检查源代码并查看所有已接受补丁的提交日志....但真正的问题是如何获得所有已被拒绝的补丁/代码?我问这个问题的原因是我认为将所有接受和拒绝的补丁/添加到linux内核,将其输入谷歌预测进行分析会很酷,每次提交新补丁时你都可以看到你的补丁实际上被Linus等人接受的百分比。:)提前感谢您的回复! 最佳答案 您无法从git获取有关被拒绝补丁的信息。您可能会得到实验性分支——您还应该查看
我写了一些代码。例如atest.c。我计划把它编译成一个test.o文件,并提供一个头文件。然后,我将这个.o文件提供给另一个程序员,他正在编写一个Linux内核模块,例如adriver.ko。我的问题是:他能把我的.o文件包含在他的.ko中吗?如何写入make文件?在编译.o文件时有什么特殊要求吗?非常感谢。 最佳答案 此链接显示如何在多个文件中创建源代码跨越的内核模块。http://linux.die.net/lkmpg/x351.html 关于c-如何将.o文件编译为Linux内核
我正在修改Linux内核以向Linux虚拟服务器(LVS)添加一些功能。我开发了一个模块(我称之为net/netfilter/ipvs/ip_vs_utils.c),其中包含负载平衡时要使用的一些函数。此处的所有函数均使用EXPORT_SYMBOL()导出。这个模块,逻辑上不会一直加载。我的意图是让用户决定是否要使用此附加功能(加载或卸载模块)。我的问题是如何从现有的(当然是修改过的)模块(net/netfilter/ipvs/ip_vs_core.c).像这样:if(ip_vs_utils_IsLoaded){function1(arg1,arg2,arg3);//beingfunc
我在内核配置文件中启用了CONFIG_DYNAMIC_DEBUG标志。当我在我的系统中启动时,我能够挂载/sys/kernel/debug并且还有dynamic_debug/control文件。但是当我发出任何命令时echo-n'modulenfsd+p'>/dynamic_debug/control它不会在dmesg或syslogd中显示任何输出。我做错了什么? 最佳答案 你设置日志级别了吗?echo8>/proc/sys/kernel/printk 关于linux-如何在Linux内
我正在构建一个使用hrtimer接口(interface)的内核模块。我的模块编译成功,它有MODULE_LICENSE("GPL")设置:make-C/lib/modules/3.0.0-23-server/buildSUBDIRS=/home/projects/net-modelermodulesmake[1]:Enteringdirectory`/usr/src/linux-headers-3.0.0-23-server'CC[M]/home/projects/net-modeler/nm_injector.oCC[M]/home/projects/net-modeler/nm_