Articles of 内核模块

使用模块读取内核内存

作为我的项目的一部分,我需要读取内核来获取系统调用表和系统调用地址的内存地址。 或者实际上我需要提取系统调用表和所有系统调用的内容。 直到现在我使用GDB来达到这个目的。 有没有办法让我可以使用内核模块来做到这一点。 我是新的内核模块编程。 在这里寻找专家的build议。

从用户空间读取内核驱动程序,但写回始终为0

所以我正在努力通过内核驱动程序编程,目前我正试图在应用程序和内核驱动程序之间build立一个简单的数据传输。 我正在使用简单的字符设备作为这两者之间的一个链接,并且我已经成功地将数据传输到了驱动程序,但是我无法获得有意义的数据回到用户空间。 内核驱动程序如下所示: #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> /* printk() */ #include <linux/errno.h> /* error codes */ #include <linux/types.h> /* size_t */ #include <linux/proc_fs.h> #include <asm/uaccess.h> /* copy_from/to_user */ MODULE_LICENSE("GPL"); //Declarations int memory_open(struct inode *inode, struct file *filp); int memory_release(struct inode *inode, struct file *filp); ssize_t memory_read(struct file *filp, char *buf, size_t count, loff_t […]

将驱动程序编译为内核的一部分,而不是作为模块

我正在尝试为embedded式设备创build一个简约的Linux。 这意味着编译内核和驱动程序的必要性。 一个驱动程序是由它的创build者直接写入设备板,所以它不是一个存储库。 它可以被编译为一个内核模块。 但是由于Linux不可变的性质以及对内存使用量极小的要求,我不想使用模块。 我想要内核中的所有驱动程序。 所有提供的内核驱动都是这样设置的。 所以我的问题是如何编译一个特殊的驱动程序到内核? 所有的search都没有给我提供一个解决scheme – 所有的只是作为模块编译。 谢谢你的帮助。

如何从Linux内核模块获取使用计数?

我正在开发一个内核模块的使用计数问题。我想打印它的debugging目的。 我怎样才能从模块代码中获得它? 有问题的内核版本 – Linux 2.6.32

拦截文件系统系统调用

我正在写一个应用程序,我需要拦截一些文件系统的系统调用,例如。 断开链接。 我想保存一些文件说abc。 如果用户删除该文件,那么我需要将其复制到其他地方。 所以我需要取消链接来删除abc之前调用我的代码,以便我可以保存它。 我已经通过拦截系统调用相关的线程,但LD_PRELOAD方法不会在我的情况下工作,因为我想这是安全的,并在内核中实现,所以这种方法不会有用。 在事件之后通知inotify,所以我不能保存它。 你能提出任何这样的方法。 我想在一个内核模块中实现而不是修改内核代码本身。 Graham Lee提出的另一种方法,我想到了这个方法,但是它有一些问题,我需要所有文件的硬链接镜像,它不会占用空间,但仍然可能是有问题的,因为我必须重复镜像驱动器来保持镜像date,也不会工作交叉分区和分区不支持链接,所以我想要一个解决scheme,我可以挂钩的文件/目录,然后观察变化,而不是反复扫描。 我也想添加对修改后的文件的支持,我不能使用硬链接。 我想拦截系统调用,通过replace系统调用,但我一直没有find任何方法在linux> 3.0。 请提出一些方法来做到这一点。

在编写Linux内核模块时获取用户进程的pid

如何获得触发我的内核模块的file_operation.read例程的用户进程的PID(即哪个进程正在读取/dev/mydev )?

对于在另一个模块中定义的符号,insmod会失败,并显示“模块中的未知符号”

我在Ubuntu工作。 我正在试图使两个使用其他function的内核模块。 我的问题是,我得到了模块正确编译,但符号不解决其中之一。 为了简单起见,我们将这些模块称为m1和m2 。 m2是导出函数void func_m2(void) 。 m1正在调用这个函数。 两个模块都正确编译。 在编译完成之后,我需要首先加载m2模块(因为它已经导出了func_m2函数),之后又func_m2了m1模块。 所以,让我们做到这一点: volodymyr@sv1:~/development/kmodules/m2$ sudo insmod ./m2.ko 现在,让我们加载正在尝试使用func_m2 m1模块: volodymyr@sv1:~/development/kmodules/m1$ sudo insmod ./m1.ko insmod: error inserting './m1.ko': -1 Unknown symbol in module 以下是我在日志中看到的内容: volodymyr@sv1:~/development/kmodules/m1$ dmesg | tail [ 3938.166616] Loading m2 module … [ 3963.078055] m1: no symbol version for func_m2 [ 3963.078059] m1: Unknown symbol […]

获取Linux内核中的networking设备列表

我一直在通过net / core / dev.c和其他文件来查看如何获取当前configuration的networking设备列表,这certificate有点难以find。 最终目标是能够使用dev.c中的dev_get_stats获取networking设备统计信息,但是我需要知道当前的接口,所以我可以抓取net_device结构来传入。我必须在内核中执行此操作,因为我写了一个模块,它添加了一个新的/ proc /入口,这涉及到一些来自当前networking设备的统计信息,所以从我能收集到的信息必须在内核中完成。 如果有人能指点我如何获得接口,将不胜感激。

编译文件系统上任何内核源代码树的树外内核模块

我正在尝试编译一个模块来防止文件系统上的任何源代码树,但是我遇到了Makefile的问题。 这是我针对内核指定的原始Makefile: obj-m += new-mod.o all: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules clean: make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean 这个Makefile可以正确编译,但是目标是让它在任何源码树上编译。 我已经试过了: obj-m += new-mod.o 我认为,“所有:”是假设,但我得到的错误: make: *** No targets. Stop. 我还补充说: all: 到Makefile没有区别,除了错误消息: make: Nothing to be done for `all' 我已经尝试了很多文档,但没有运气。 我将不胜感激任何帮助。

Linux内核模块链接器警告:“***警告:<函数> undefined!” – 任何方式摆脱他们?

编译互相依赖的Linux内核模块时,链接器会提供未定义的符号警告 Building modules, stage 2. MODPOST *** Warning: "function_name1" [module_name] undefined! *** Warning: "function_name2" [module_name] undefined! *** Warning: "function_name3" [module_name] undefined! 一旦将模块插入到使用insmod或modprobe的内核中,即可parsing未parsing的符号。 有什么办法摆脱链接器的警告,但? 在这个问题上,我已经阅读了3个Google SERP,似乎没有人知道答案。 当你构build一个内核模块时,这些链接器警告是否应该是这样的?