kernel-module相关内容

如何在linux内核空间中获取当前小时(一天中的时间)

我正在编写一个内核模块来检查时间是否在两个指定的小时之间,如果是则禁用输入.这与我想确保我早点睡觉有关.(我知道我也可以使用多种不同的技术,包括 cron 等,但我想学习内核编程......) 作为第一个版本,我因此检查当前小时是否在开始和结束之间,这是通过模块的参数设置的. 因此,我的问题是:如何获取当前小时数?我无法访问标准库中的常用时间函数,因为我在内核空间中.我猜我应该为此使用 ..
发布时间:2022-01-04 22:25:52 服务器开发

Linux内核 - 通过模块动态添加系统调用

有没有办法动态添加系统调用,比如通过模块?我找到了可以通过更改 sys_call_table[] 数组来使用模块覆盖现有系统调用的地方,以便在安装我的模块时获取我的覆盖函数而不是本机函数,但是你能这样做吗?一个新的系统调用和一个模块? 解决方案 不,sys_call_table 是固定大小的: const sys_call_ptr_t sys_call_table[__NR_syscal ..
发布时间:2022-01-04 22:24:01 服务器开发

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 设备驱动程序,它们出现甚至没有一 ..
发布时间:2022-01-04 22:23:43 其他开发

获取内核模块中的当前时间(以秒为单位)

在内核模块中以秒为单位(自纪元以来)获取当前时间的标准方法是什么? 我见过涉及获取 xtime 的技术,这些技术非常冗长,涉及 while 循环和锁.一定有更好的方法. [这不是重复的.我已经浏览了以前关于 SO 的问题.其中许多的答案要么没有指定使用的函数,要么错误地引用了内核中不允许的 time.h] 解决方案 你可以使用 getnstimeofday 来解决这个问题. ..
发布时间:2022-01-04 22:16:37 其他开发

insmod 错误:插入“./hello.ko":-1 无效的模块格式"

我刚刚制作了我的第一个驱动程序模块,即 LDD3 之后的 hello world 模块.不过很不幸遇到了这个错误: insmod: error inserting './hello.ko': -1 无效的模块格式. 我在 Ubuntu 11.04 和我的环境上执行此操作: $ uname -r2.6.38-8-通用 我像这样得到内核源代码: sudo apt-cache search l ..

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

如何从 linux 内核模块代码(内核模式)中获取有关正在运行哪个版本内核的运行时信息? 解决方案 按照惯例,Linux 内核模块加载机制不允许加载未针对正在运行的内核编译的模块,因此您所指的“正在运行的内核"很可能在内核模块编译时就已经知道了. 为了检索版本字符串常量,旧版本要求您包括、其他和较新的.如果你真的想在运行时获取更多信息,那么 linux/utsname.h 中的 ut ..
发布时间:2022-01-04 22:12:09 其他开发

kvm:模块验证失败:缺少签名和/或所需的密钥 - 污染内核

我使用的是 Ubuntu 14.04 LTS 和内核版本 3.13.11.4. 我正在尝试加载已修补的 KVM 模块 kvm 和 kvm-intel,但出现以下错误 kvm:模块验证失败:签名和/或所需的密钥丢失 - 污染内核 和 kvm: 模块有坏的污点,没有创建跟踪事件. 所使用的源与创建我当前正在运行的映像的源相同. 我已经检查了符号并确保错误不是由于在我导出函数的修补文件 ..
发布时间:2022-01-04 22:11:36 服务器开发

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

我有一个应用程序,它具有两个外部内核模块和一个用户空间守护程序.我想在启动时从用 C 编写的守护程序代码加载模块,并在干净退出时卸载它们.我可以用比执行 system("modprobe module"); 更简洁的方式加载它们并使用相应的 rmmod 卸载它们吗? 解决方案 init_module/remove_module 最小可运行示例 在 QEMU + Buildroot V ..
发布时间:2022-01-04 22:10:42 服务器开发

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

我正在从事修改一些内核网络代码以及包含一个新的内核模块的学术项目. 我正在使用 QEMU 加载修改后的内核并进行测试. 但是,我发现在某些 .img 中需要一个完整的操作系统才能进行调试. 没有它有可能吗? 或者,这是可以与 Kernel 2.6 for system 一起使用的发行版.发行版不需要任何功能,除了运行程序的能力,包括网络支持. 解决方案 我认为最简单的方 ..
发布时间:2022-01-04 22:08:02 服务器开发

如何从内核模块内的文件描述符获取文件名?

我需要从给定的文件描述符中获取一个文件的名称,在我编写的一个小的 linux 内核模块中.我尝试了 Getting Filename from file descriptor in C 中给出的解决方案,但出于某种原因,它会打印出垃圾值(如解决方案中所述,在 /proc/self/fd/NNN 上使用 readlink 时).我该怎么做? 解决方案 Don't call SYS_readl ..
发布时间:2022-01-04 22:03:17 服务器开发

linux 内核模块链接器警告:"*** 警告:<function>[<模块>]未定义!";- 有什么办法可以摆脱它们?

编译相互依赖的Linux内核模块时,链接器给出未定义的符号警告,如 构建模块,第 2 阶段.MODPOST*** 警告:“function_name1"[module_name] 未定义!*** 警告:“function_name2"[module_name] 未定义!*** 警告:“function_name3"[module_name] 未定义! 一旦使用 insmod 或 modpro ..
发布时间:2021-12-31 22:54:25 服务器开发

Linux 内核模块中的文件 I/O

我正在编写一个需要打开和读取文件的 Linux 内核模块.实现这一目标的最佳方法是什么? 解决方案 请问您为什么要打开文件? 我喜欢关注 Linux 的开发(出于好奇,我不是内核开发人员,我是做 Java 的),之前看到过关于这个问题的讨论.我能够找到关于此的 LKML 消息,基本上提到这通常是一个坏主意.我几乎肯定 LWN 在去年就报道了它,但我找不到这篇文章. 如果这是一个 ..
发布时间:2021-12-29 12:24:57 其他开发

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

我知道所有关于为什么不应该从内核读/写文件,而是如何使用 /proc 或 netlink 来做到这一点的讨论.无论如何我都想读/写.我也读过让我发疯 - 在内核中你永远不应该做的事情. 然而,问题是 2.6.30 不导出 sys_read().相反,它包含在 SYSCALL_DEFINE3 中.所以如果我在我的模块中使用它,我会收到以下警告: 警告:“sys_read"[xxx.ko] 未 ..
发布时间:2021-12-01 23:55:07 其他开发

已编译 LKM 的可互换性

是否可以在版本 3.0.31- 的内核中使用为 3.0.8+ mod_unload ARMv5(我自己制作的内核)编译的可加载内核模块?gd5a18e0 SMP 抢占 mod_unload ARMv7 (android stock-kernel)? 模块本身几乎不包含任何内容,只是 //定义 __KERNEL__ 和 MODULE 允许我们访问用户空间程序通常不可用的内核级代码.#unde ..
发布时间:2021-11-17 22:20:37 移动开发