kernel-module相关内容

在netfilter挂钩中查找可执行文件发送数据包的名称

我正在编写一个内核模块,该模块使用netfilter挂钩过滤TCP数据包,并且需要找出发送数据包的可执行文件的路径.到目前为止,我已经使用了以下方法,但是它显示的名称似乎与所使用的可执行文件无关(/usr/lib/firefox/firefox , usr/bin/telnet.netkit >和/usr/bin/wget ). pid_t pid = current->pid; struc ..
发布时间:2020-04-23 11:35:55 服务器开发

如何调试Linux内核模块的init_module()调用?

我正在开始Linux内核开发的第一步. 我有一些代码生成随insmod一起安装的.ko内核模块.我想调试安装模块时会发生什么,但遇到一些困难. 我需要调试对init_module的调用.我运行insmode时会调用此函数吗? 我尝试使用insmod "/my/url/fil.ko" -m调试发生的情况,但是每次出现错误-1 Unknown symbol in module时,在/cat ..
发布时间:2020-04-23 11:30:26 服务器开发

侦听Linux内核模块中的新进程

是否有可能在执行新进程,关闭新进程以及状态更改(例如,停止,分页等)时(通过回调或类似方法)得到通知?在用户领域,在/proc上设置目录侦听器很容易. 解决方案 您是否考虑过kprobes?您可以在执行某些内核代码时使用kprobes执行回调函数.例如,您可以添加do_fork kprobe,以在创建新进程时发出警报,如类似地,您可以为do_exit()添加一个探针,以在进程退出时进行捕获 ..
发布时间:2020-04-23 11:20:43 服务器开发

Linux内核模块/IOCTL:不适合设备的ioctl

我正在编写用作伪驱动程序的Linux内核模块(LKM)-我无法弄清楚如何在LKM之间进行IOCTL调用( wait.c )以及用户级程序( user.c ). 设备驱动程序的幻数是0xBF-LKM不与物理块/字符设备通信,这只是一个练习.据我所知,对KERN_IOCTL_CREATE_EVENT的IOCTL调用未正确格式化&;幻数不正确. 我尝试使用的IOCTL呼叫是: #inc ..

在设备驱动程序中使用stdlib.h

我正在尝试编写设备驱动程序,并且需要在驱动程序中使用system()函数.要使用system(),我们需要包含,该文件似乎在驱动程序中起作用. 它说找不到这样的文件或目录. 设备驱动程序是否有stdlib.h的替代品?还是system()的替代品? 解决方案 stdlib.h是用户空间标头. 用户空间是在其中运行用户进程(即,除内核之外的所有事物)的那 ..

Linux键盘驱动程序的源代码

我一直在为Linux制作自己的键盘驱动程序.因此,我遇到了这两个链接: usbkbd.c 和 atkbd.c . 现在我是 混淆了哪些是当前驱动我的键盘的实际代码.正如我所看到的,atkbd.c非常脏,并且有一个转换 扫描码到键码.尽管我不确定,它应该是代码. 如果atkbd.c是代码,那么其他代码又是什么呢? 解决方案 这很容易检查.让我们以usbkbd.c. 相应的K ..

使用模块读取内核内存

作为我的项目的一部分,我需要读取内核以获取系统调用表的内存地址和系统调用地址.或者实际上,我需要提取系统调用表和所有系统调用的内容. 到目前为止,我将GDB用于此目的.有什么办法可以让我使用内核模块做到这一点.我是内核模块编程的新手.在这里寻求专家的建议. 解决方案 首先让我说读取任意内核内存是一件棘手的事情!这样做的方法很多,但复杂程度和灵活性各不相同. 1)对地址进行硬编码 ..
发布时间:2020-04-23 10:58:15 服务器开发

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

因此,我正在通过内核驱动程序编程进行工作,目前,我正在尝试在应用程序和内核驱动程序之间建立简单的数据传输. 我正在使用简单字符设备作为两者之间的链接,并且我已成功将数据传输到驱动程序,但是我无法将有意义的数据返回给用户空间. 内核驱动程序如下: #include #include #include ..

如何使用O_DIRECT将内核空间内存(物理地址)写入文件?

我想将物理内存写入文件.内存本身不会再被触摸,因此我想使用O_DIRECT以获得最佳写入性能. 我的第一个想法是打开/dev/mem并映射内存,然后将所有内容写入文件,该文件通过O_DIRECT打开. mmap返回的内存地址上的写调用失败(EFAULT).如果我不使用O_DIRECT,则结果为memcpy. #include #include ..
发布时间:2020-04-23 10:43:33 服务器开发

拦截文件系统系统调用

我正在写一个应用程序,我需要拦截一些文件系统的系统调用,例如。断开链接。我想保存一些文件说abc。如果用户删除该文件,那么我需要将其复制到其他地方。所以我需要取消链接来删除abc之前调用我的代码,以便我可以保存它。我已经通过拦截系统调用相关的线程,但LD_PRELOAD方法不会在我的情况下工作,因为我想这是安全的,并在内核中实现,所以这种方法不会有用。在事件之后通知inotify,所以我不能保存它 ..

在内核模块中获取文件系统挂载点

我想在我的内核模块中获得文件系统的文件系统挂载点,这是一个可堆叠的文件系统。 例如。如果/ home / ab / abc是一个文件,/ home被安装在不同的文件系统上,我想要一个dentry或路径结构到/ home。 我想在模块中做这个,而不用修改内核代码。 例如/ home / user /中有一个文件,现在我想知道这个文件在哪个分区中。例如,该文件可能位于与“/”相同的分区中,或者该 ..
发布时间:2017-11-06 21:32:26 服务器开发

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

我正在编写一个需要打开和读取文件的Linux内核模块。什么是最好的方式来完成? 解决方案 我能问你为什么要打开一个文件吗? b $ b 我喜欢遵循Linux开发(出于好奇,我不是内核开发者,我是Java),之前我已经看到过这个问题的讨论。我能够找到关于这个的 LKML消息,基本上提到这通常是一个坏主意。我几乎肯定LWN在去年覆盖了它,但是我很难找到这篇文章。 如果这是一个私有模块 ..
发布时间:2017-11-04 20:52:01 其他开发

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

我知道所有关于为什么不应该从内核读取/写入文件的讨论,而是如何使用/ proc或netlink来做到这一点。无论如何,我想读/写。我还读了 驱动我坚果 - 你永远不应该在内核。然而,问题是2.6.30不导出 sys_read()。相反,它包裹在 SYSCALL_DEFINE3 中。所以,如果我在我的模块中使用它,我得到以下警告: $ p $ 警告:“sys_read”[xxx.ko] un ..
发布时间:2017-11-04 20:33:26 其他开发