kernel-module相关内容

使用LKM实现Linux系统调用

我试图向Linux内核3.2.x添加新的系统调用. 在Internet上搜索有用的参考资料时,我有一个印象,就是无法像将SO一样我找到了另一个链接,上面写着“有一种添加系统调用而无需使用模块作为包装器重新编译内核的方法,但这超出了本文档的范围". 来源 http://hekimian-williams.com/?p=20 我知道以静态方式实现系统调用将要求我每次进行任何更改时都编译内核代码. ..
发布时间:2020-04-25 11:40:54 其他开发

remap_pfn_range如何将内核内存重新映射到用户空间?

remap_pfn_range函数(在驱动程序的mmap调用中使用)可用于将内核内存映射到用户空间.怎么做?谁能解释确切的步骤?内核模式是特权模式(PM),而用户空间是非特权(NPM).在PM中,CPU可以访问所有内存,而在NPM中,某些内存是受限制的-CPU无法访问.调用remap_pfn_range时,用户空间现在可以访问仅限于PM的那部分内存了吗? 在remap_pfn_range代码 ..

Linux内核模块:何时使用try_module_get/module_put

我正在阅读LKMPG(请参阅第4.1.4节.注销设备),我不清楚何时使用try_module_get / module_put函数.一些LKMPG示例使用了它们,有些则没有. 更令人困惑的是,try_module_get在2.6.24源文件的193个文件中出现282次,但在 Linux设备驱动程序(LDD3)和基本的Linux设备驱动程序,它们甚至都不会出现在单个设备中代码示例. 我认 ..
发布时间:2020-04-25 11:40:50 其他开发

类似于netfilter的内核模块,用于获取源地址和目标地址

我阅读了本指南编写一个内核模块以进行简单的网络过滤. 首先,我不知道下面的文字意味着什么,(按传输层)入站和出站数据包之间有什么区别? 当数据包从电线进入时,它从物理层传输,数据 链路层,网络层向上,因此它可能无法通过 netfilter中定义的用于skb_transport_header的功能. 第二,我讨厌魔术数字,我想用Linux内核实用程序中的任何函数替换20(典型IP头 ..
发布时间:2020-04-25 11:40:47 服务器开发

在运行时从linux内核模块获取内核版本

如何从linux内核模块代码(内核模式)内部获取有关正在运行哪个版本的内核的运行时信息? 解决方案 按照惯例,Linux内核模块加载机制不允许加载未针对正在运行的内核编译的模块,因此您所指的“正在运行的内核"很有可能是在内核模块编译时就知道的. 要检索版本字符串常量,较旧的版本要求您包括,其他和较新的 ..
发布时间:2020-04-25 11:40:41 其他开发

如何从C代码加载Linux内核模块?

我有一个同时具有两个外部内核模块和一个用户空间守护程序的应用程序.我想在启动时从用C编写的守护程序代码中加载模块,并在干净退出时将其卸载.我可以用比system("modprobe module");更干净的方式加载它们,并使用相应的rmmod卸载它们吗? 解决方案 最小的可运行示例 在QEMU + Buildroot VM和Ubuntu 16.04主机上进行了测试我们使用init_ ..
发布时间:2020-04-25 11:40:36 服务器开发

如何使用QEMU调试Linux内核模块?

我正在从事学术项目,该项目修改了Kernel Networking的一些代码并包含了新的Kernel module. 我正在使用QEMU加载修改后的内核并进行测试. 但是,我发现在某些.img中需要完整的操作系统才能进行调试. 没有它,有可能吗? 或者,它是可与Kernel 2.6一起用于系统的发行版.该发行版不需要运行任何功能,只有运行程序的能力,包括网络支持. 解决方 ..
发布时间:2020-04-25 11:40:31 服务器开发

在Linux内核模块中读取/写入文件

我知道所有有关为什么不应该从内核读取/写入文件,而是如何使用/proc 或 netlink 进行此操作的讨论.我还是想读/写.我也看过 驱动我的坚果-内核中不应该做的事情. 但是,问题是2.6.30无法导出sys_read().而是将其包装在SYSCALL_DEFINE3中.因此,如果我在模块中使用它,则会收到以下警告: WARNING: "sys_read" [xxx.ko] und ..
发布时间:2020-04-25 11:40:29 其他开发

Linux内核检查VID/PID号?

我要寻找的是从内核模块中检查实时USB磁盘序列号的命令. 在内核中,lsusb无法正常工作. TMI条款:我正在为客户端开发实时USB设备,这将是我们版权保护的最新内容. 解决方案 您的程序将通过操作系统查询序列号.而且您知道,您的客户端有能力更改操作系统,因此您的程序将无法完全信任操作系统提供的信息. 如果您愿意信任客户端(不更改操作系统),请查看Linux中的hdparm ..
发布时间:2020-04-25 11:37:52 服务器开发

内核的写入模块(Linux),用于保存从删除到交换的过程页面

需要保存进程页面(用户部分!)以免将其删除到交换中. 我只需要在内核中执行此操作. (我知道的语言C) (也许在hook_page_list中插入钩子?) 我有进程ID,这些ID需要保存并限制系统中的物理内存量(我们填充,而未填充). ID和阈值写入/proc,/dev或/sys. 该如何处理? 要查看哪些文件? 要阅读哪些教程? 也许有些例子与此任务相关 ..
发布时间:2020-04-25 11:37:32 服务器开发

模块参数权限

我是内核编程的新手.当我浏览module_param时,我对权限值0感到困惑.有人解释说,它不会在sysfs中获得输入,而其他类似S_IRUGO的则会获得输入.我不明白这个概念. 烫发值0表示什么? 什么时候需要sysfs条目?有什么需要? 请指导我.预先感谢. 解决方案 您可以通过某些方式将参数模块化为内核模块.假设内核模块foo具有名为bar的参数: 使用可以在引导加 ..
发布时间:2020-04-25 11:32:29 其他开发

Linux内核模块,用于检查内存完整性

我正在编写一个内核模块,该模块通过控制校验和来检查用于运行任务的代码段的完整性.我遇到了一些障碍: 如果内核未导出module_list变量(ksyms中没有这样的符号),如何获取?我可以看到所有模块都调用lsmod命令,那么如何在我的模块中获取它? 我的模块正在运行时,它表明某些代码段已更改.它总是在某些库中发生.为什么会发生?我以为代码段是恒定的. 控制来自内核模块的过程数据的内存访 ..
发布时间:2020-04-25 11:32:20 服务器开发