kernel-module相关内容
我正在编写一个内核模块,该模块使用netfilter挂钩过滤TCP数据包,并且需要找出发送数据包的可执行文件的路径.到目前为止,我已经使用了以下方法,但是它显示的名称似乎与所使用的可执行文件无关(/usr/lib/firefox/firefox , usr/bin/telnet.netkit >和/usr/bin/wget ). pid_t pid = current->pid; struc
..
我正在开始Linux内核开发的第一步. 我有一些代码生成随insmod一起安装的.ko内核模块.我想调试安装模块时会发生什么,但遇到一些困难. 我需要调试对init_module的调用.我运行insmode时会调用此函数吗? 我尝试使用insmod "/my/url/fil.ko" -m调试发生的情况,但是每次出现错误-1 Unknown symbol in module时,在/cat
..
我需要重命名已经存在的驱动程序的内核模块(使用lsmod显示的名称),而无需更改源文件的名称. 例如 # insmod xxx.ko > # lsmod Module Size Used by Tainted: P xxx 191527 0 # 我
..
是否有可能在执行新进程,关闭新进程以及状态更改(例如,停止,分页等)时(通过回调或类似方法)得到通知?在用户领域,在/proc上设置目录侦听器很容易. 解决方案 您是否考虑过kprobes?您可以在执行某些内核代码时使用kprobes执行回调函数.例如,您可以添加do_fork kprobe,以在创建新进程时发出警报,如类似地,您可以为do_exit()添加一个探针,以在进程退出时进行捕获
..
我正在编写用作伪驱动程序的Linux内核模块(LKM)-我无法弄清楚如何在LKM之间进行IOCTL调用( wait.c )以及用户级程序( user.c ). 设备驱动程序的幻数是0xBF-LKM不与物理块/字符设备通信,这只是一个练习.据我所知,对KERN_IOCTL_CREATE_EVENT的IOCTL调用未正确格式化&;幻数不正确. 我尝试使用的IOCTL呼叫是: #inc
..
我正在尝试编写设备驱动程序,并且需要在驱动程序中使用system()函数.要使用system(),我们需要包含,该文件似乎在驱动程序中起作用. 它说找不到这样的文件或目录. 设备驱动程序是否有stdlib.h的替代品?还是system()的替代品? 解决方案 stdlib.h是用户空间标头. 用户空间是在其中运行用户进程(即,除内核之外的所有事物)的那
..
在用户空间中,我只能echo noop > /sys/block/sda/queue/scheduler. 如何在内核模块中执行相同的操作? 我希望这样的东西(伪代码): struct dentry* e = sysfs_get_root(); vfs_path_lookup(e, ????, "block/sda/queue/scheduler", ???); ????; st
..
我一直在为Linux制作自己的键盘驱动程序.因此,我遇到了这两个链接: usbkbd.c 和 atkbd.c . 现在我是 混淆了哪些是当前驱动我的键盘的实际代码.正如我所看到的,atkbd.c非常脏,并且有一个转换 扫描码到键码.尽管我不确定,它应该是代码. 如果atkbd.c是代码,那么其他代码又是什么呢? 解决方案 这很容易检查.让我们以usbkbd.c. 相应的K
..
作为我的项目的一部分,我需要读取内核以获取系统调用表的内存地址和系统调用地址.或者实际上,我需要提取系统调用表和所有系统调用的内容. 到目前为止,我将GDB用于此目的.有什么办法可以让我使用内核模块做到这一点.我是内核模块编程的新手.在这里寻求专家的建议. 解决方案 首先让我说读取任意内核内存是一件棘手的事情!这样做的方法很多,但复杂程度和灵活性各不相同. 1)对地址进行硬编码
..
因此,我正在通过内核驱动程序编程进行工作,目前,我正在尝试在应用程序和内核驱动程序之间建立简单的数据传输. 我正在使用简单字符设备作为两者之间的链接,并且我已成功将数据传输到驱动程序,但是我无法将有意义的数据返回给用户空间. 内核驱动程序如下: #include #include #include
..
我正在开发的内核模块的使用计数有问题,我想将其打印出来以进行调试.如何从模块代码中获取它? 有问题的内核版本-Linux 2.6.32 解决方案
..
我想将物理内存写入文件.内存本身不会再被触摸,因此我想使用O_DIRECT以获得最佳写入性能. 我的第一个想法是打开/dev/mem并映射内存,然后将所有内容写入文件,该文件通过O_DIRECT打开. mmap返回的内存地址上的写调用失败(EFAULT).如果我不使用O_DIRECT,则结果为memcpy. #include #include
..
我正在尝试编译"hello world"内核模块的示例, 在ubuntu 11.04,内核3.2.6,gcc 4.5.2和fedora 16,内核3.2.7,gcc 4.6.7上发现的问题. 代码: #include #include MODULE_LICENSE("GPL"); static int __init he
..
由于缺少.h文件,我无法构建内核模块。我在Ubuntu 14.04上构建了这个模块。 这是我使用的make文件: $ cat Makefile obj -m + = my_module.o all: make -C / lib / modules / $(shell uname -r )/ build M = $(PWD)模块 clean: make -C /
..
我有问题让我的机器上建立任何内核模块。每当我创建一个模块时,modpost总是说有零个模块: MODPOST 0模块 > #include / *所有模块都需要* / #include / *需要KERN_INFO * / #include / *
..
我正在写一个应用程序,我需要拦截一些文件系统的系统调用,例如。断开链接。我想保存一些文件说abc。如果用户删除该文件,那么我需要将其复制到其他地方。所以我需要取消链接来删除abc之前调用我的代码,以便我可以保存它。我已经通过拦截系统调用相关的线程,但LD_PRELOAD方法不会在我的情况下工作,因为我想这是安全的,并在内核中实现,所以这种方法不会有用。在事件之后通知inotify,所以我不能保存它
..
我想在我的内核模块中获得文件系统的文件系统挂载点,这是一个可堆叠的文件系统。 例如。如果/ home / ab / abc是一个文件,/ home被安装在不同的文件系统上,我想要一个dentry或路径结构到/ home。 我想在模块中做这个,而不用修改内核代码。 例如/ home / user /中有一个文件,现在我想知道这个文件在哪个分区中。例如,该文件可能位于与“/”相同的分区中,或者该
..
任何人都可以给一些简单的例子(函数名称是好的)在一个FreeBSD内核模块中从一个给定的目录逐行读取文本文件(二进制文件确实是好的)? 真的很感谢你的帮助。 解决方案 etc / motd on load: //内核模块motd catter。 // Doug Luce doug@forephypodia.con.com #include
..
我正在编写一个需要打开和读取文件的Linux内核模块。什么是最好的方式来完成? 解决方案 我能问你为什么要打开一个文件吗? b $ b 我喜欢遵循Linux开发(出于好奇,我不是内核开发者,我是Java),之前我已经看到过这个问题的讨论。我能够找到关于这个的 LKML消息,基本上提到这通常是一个坏主意。我几乎肯定LWN在去年覆盖了它,但是我很难找到这篇文章。 如果这是一个私有模块
..
我知道所有关于为什么不应该从内核读取/写入文件的讨论,而是如何使用/ proc或netlink来做到这一点。无论如何,我想读/写。我还读了 驱动我坚果 - 你永远不应该在内核。然而,问题是2.6.30不导出 sys_read()。相反,它包裹在 SYSCALL_DEFINE3 中。所以,如果我在我的模块中使用它,我得到以下警告: $ p $ 警告:“sys_read”[xxx.ko] un
..