kernel-module相关内容

Makefile中的ccflag选项

我想编译我的C代码(在内核中),该代码需要包含另一个目录中的一些头文件. 我不想在c文件中指定头文件的完整路径,而是在Makefile中指定包含路径. 启用配置选项CONFIG_FEATURE_X后,将编译我的c文件. 我已经在Makefile中写了以下内容: obj-$(CONFIG_FEATURE_X) += my_file.o ccflags-$(CONFIG_FEATU ..
发布时间:2020-04-25 11:43:13 其他开发

如何在内核内部使用性能计数器?

我想访问内核内部的性能计数器.我找到了许多在用户空间中使用性能计数器的方法,但是您能告诉我在内核空间中使用性能计数器的一些方法吗? 请不要指定工具名称,我想编写自己的代码,最好是内核模块.我在内核3.18.1中使用Ubuntu. 解决方案 http ://www.cise.ufl.edu/~sb3/files/pmc.pdf http://www.cs.inf.ethz.ch /st ..

使用perf用户界面工具和PEBS进行基于事件的采样

我正在使用perf用户界面工具进行基于事件的采样:目标是试图找出某些性能影响事件(例如分支未命中和缓存未命中)在我正在使用的较大系统上发生了什么地方. 现在,类似 perf record -a -e branch-misses:pp -- sleep 5 完美运行:当在样本中收集IP时,由'pp'修饰符触发的PEBS计数模式确实非常准确. 不幸的是,当我尝试对缓存缺失执行相同 ..
发布时间:2020-04-25 11:43:04 其他开发

性能无法找到外部模块符号

运行perf时,它会找到内核符号和程序的符号,但找不到外部模块符号.我已经编写了一个内核模块,该内核模块使用insmod加载,如何告诉perf也找到其符号? 我正在运行2.6.37.6内核(无法升级),我的perf尚不支持dwarf选项,但我认为它是符号问题.我已经用-g -fno-omit-frame-pointer 编译了所有内容 解决方案 我必须使其成为内核模块,然后perf才能 ..
发布时间:2020-04-25 11:43:02 其他开发

如何访问内核模块中的任何内核符号?

我想在内核模块中使用功能getname.它不会导出.由于我现在遇到了这个问题,所以我想知道如何访问和使用任何未导出的内核符号.我认为使用一个符号所必需的步骤会有所不同,具体取决于符号是什么,因此我想了解如何对类型(例如,结构),变量,指针表(例如系统)完成操作调用表)和一个函数.在以下两种情况下如何完成这些操作: 当我从System.map或/proc/kallsyms知道符号的地址时. ..
发布时间:2020-04-25 11:42:45 服务器开发

更改中断描述符表

我正在使用Linux 2.6.26内核版本,并且尝试使用内核模块更改中断描述符表.我只是想在这里更改页面错误表条目.因此,我制作了原始IDT的副本,并仅对页面错误表条目进行了更改. ISR的目的是在调用原始的页面错误处理程序之前打印出页面错误的信息.但是,一旦我使用insmod加载内核,内核便崩溃了,即,它专门通过"loadIDTR"函数崩溃了.经过进一步的调试,我发现如果不加载IDTR便不更改任 ..
发布时间:2020-04-25 11:42:43 其他开发

内核之间的Linux内核模块(* .ko)兼容性

我有一个简单的内核对象,用于在内核内存中进行探测. 如果我在64位Ubuntu(3.2)计算机上构建它,则在该计算机上可以正常工作.但这在我的64位Ubuntu(3.9)计算机上不会显示insmod.反之亦然.如果我尝试在非内核版本上运行它,则出现"-1无效的模块格式"错误. 我认为insmod将其动态链接到导出的符号表,并且导出的符号表在内核版本之间不会更改. (它被附加.) ..
发布时间:2020-04-25 11:42:39 其他开发

使用linux-kernel模块发送的UDP数据包不使用套接字

我正在编写一个创建IP数据包的内核模块.现在,我想发送此数据包,但尚未为其传输创建任何套接字. 有什么方法可以借助内核例程直接发送它. 由于我已经跟踪了Linux内核代码以进行数据包传输,因此在 net/core/dev.c 中定义了一个名为 dev_hard_start_xmit()的函数.我们可以使用它吗? 实际上我不想使用套接字. 解决方案 您不需要套接字就可以在内 ..
发布时间:2020-04-25 11:42:37 服务器开发

如何使用特定的内核模块查找进程列表?

当我尝试对模块进行rmmod操作时,出现错误消息“错误:模块正在使用",lsmod | grep 显示计数. 有没有办法告诉我哪些进程正在使用此特定的内核模块/驱动程序? 解决方案 最好的建议是dmesg并查找有关模块加载内容的任何指示. 如果您的内核是受支持的,则还可以尝试将--force参数用于rmmod. ..
发布时间:2020-04-25 11:42:31 服务器开发

insmod失败,并显示“模块中的未知符号".用于另一个模块中定义的符号

我正在Ubuntu中工作.我正在尝试制作两个使用彼此功能的内核模块.我的问题是我已经正确编译了模块,但是其中之一无法解析该符号. 为简单起见,我们将这些模块称为m1和m2. m2是导出功能void func_m2(void). m1正在调用此函数.这两个模块都可以正确编译. 全部编译之后,我需要先加载m2模块(因为它已经导出了func_m2函数),然后再加载m1模块.所以,让我们 ..
发布时间:2020-04-25 11:42:16 服务器开发

Linux内核如何确定__init调用的顺序?

在驱动程序module_init和内核的其他函数中,内核中有许多__init调用的实例.我的疑问是内核如何精确地确定__init调用的顺序.更重要的是,它如何确定驱动程序module_init调用的顺序? 解决方案 所有初始化魔术都在文件中实现: include/asm-generic/vmlinux.lds. h include/linux/init.h init/main.c ..
发布时间:2020-04-25 11:42:14 服务器开发

获取Linux内核中的网络设备列表

我一直在浏览net/core/dev.c和其他文件,以试图找到如何获取当前已配置的网络设备的列表,事实证明这很难找到. 最终目标是能够使用dev.c中的dev_get_stats获取网络设备统计信息,但是我需要了解当前接口,以便可以抓取net_device结构以进行传递.我必须在内核,因为我正在编写一个模块,该模块添加了一个新的/proc/条目,该条目与当前网络设备的某些统计信息相关,因此, ..

相当于modinfo()的INSIDE内核?

我有两个模块A,B.A具有全局可用的函数f(),即,导出了f()符号. B可能希望偶尔调用f().但是,只有在加载了模块A的情况下,B才应调用f(). B判断A是否已加载的最佳方法是什么? 此问题的b部分是否有一种方法可以检查是否导出了f()? 我不确定哪种方法更有效. 我假设您先加载模块B,然后加载模块A.我的策略是在A首次初始化时让A向B注册一组函数. B保持静态分配的函数指针( ..
发布时间:2020-04-25 11:42:03 其他开发