kernel-module相关内容
我正在尝试交叉编译具有规范的 helloworld 内核模块: 主机:intel x86 32 位,linux-3.0.0 目标:ARM 机器(Parrot AR.Drone),linux-2.6.27.47 我正在使用生成文件: 密码 := $(shell 密码)obj-m := test.o全部:$(MAKE) -C/path/to/kernel M=$(PWD) CROSS_
..
我想在这些系统调用返回后立即使用 LKM 跟踪 sys_connect 和 sys_accept.我发现当被探测的系统调用返回时,kprobes 可以让你访问寄存器,通过定义一个后处理程序. 我的问题是我不知道如何从我在后处理程序(即结构 pt_regs)中的数据中获取系统调用参数后处理程序定义如下: void post_handler(struct kprobe *p, struct p
..
我在kbuild 模块中找不到与此有关的任何信息.文档和 headers_install 中只有一个斜引用(建议可能).文档. "make headers_install"命令可以在以下目录的顶级目录中运行内核源代码(或使用标准的树外构建). 我有一个树外内核模块和一个关联的头文件(我对IOCTL有#defines),并且我想在模块安装过程中提供该头文件.内核模块提供头文件(供用户空间
..
我真的很陌生.我在这里,我发现这段代码可以输出过程信息,例如其ID. main.c : #include#include#include#include#includestruct task_struct *任务;
..
我正在编写一个内核系统调用,我想读取用户的基本指针寄存器(RBP).也许我可以使用为参数传递的pt_regs结构来做到这一点,不是吗? 示例代码: unsigned long int data; asmlinkage int my_read(int d) { get_rbp_of_userStack(&data);#or somthing like that } 我知道
..
我正在尝试使用以下Makefile交叉编译android-goldfish-3.10-n-dev的LiME内核模块(提交:3a3b199582a68ba0688a099147738738d6c99f3282d)Linux内核版本: obj-m := lime.o lime-objs := tcp.o disk.o main.o KDIR_GOLD := /path/to/goldfish
..
我正在尝试从LKM内禁用ARM64系统上的Memory Write保护. (Xen虚拟机管理程序的DOM0中的Startet) 我使用Linux内核功能找到了对应于虚拟地址的PTE. pgd_t *pgd; pte_t *ptep, pte; pud_t *pud; pmd_t *pmd; pgd = pgd_offset(init_mm, (addr)); if (pgd_non
..
aaa.c中有一个功能 int myadd(int a, int b){ return a+b; } 并且使用 将aaa.c内置到静态库中 gcc -c aaa.c -o aaa.o&& ar -cr libaaa.a aaa.o 和使用 的共享库 gcc -c aaa.c -o aaa.o&& gcc -shared -fPCI -o l
..
我已经制作了一个简单的模块,该模块在加载时会打印GDT和IDT.完成工作后,就不再需要它并且可以将其卸载.但是,如果它返回负数以停止加载,则insmod会抱怨,并且错误消息将记录在内核日志中. 内核模块如何优雅地卸载自身? 解决方案 据我所知,使用普通内核是不可能的(您可以按照下面所述修改模块加载器内核,但这可能不是一个好方法.依靠的东西.) 好的,所以我看了一下模块的加载和卸
..
我是Linux内核模块的新手,在尝试处理一些复杂的概念之前,我正在尝试实现一些基本概念.我编写了一个代码,该代码带有一个模块参数(一个int),并检查是否有带有该pid的进程.如果存在,则将其子项作为列表,并在打印子项的ID和说明时对其进行迭代.这是代码: #include #include #include
..
我已经开发了一个内核模块,用于将nf4标签作为char设备进行管理. 我已经在内核外部开发了该模块,并在开发阶段对其进行了测试,并将其编译为可加载的内核模块(即.ko). 一旦驱动程序正常运行并足够稳定,我便会使用补丁将其插入Linux内核源代码(v4.9.30),以便将其构建为内核的一部分. 在这种情况下,由于模块是内置的,因此会在启动时由内核对其进行加载探测,并出现在设备树中
..
我正在尝试获取内核模块中的所有挂载点.以下是我想出的.由于strcat而导致段错误.这是获取挂载点的正确方法吗?这会工作吗?如果是的话,我该如何修复段错误?如果没有,如何在Linux内核模块中获取挂载点? 我已经尝试过循环整个命名空间,以查找挂载点根匹配,但是从2003年开始,内核发生了很大变化,因此基本上没有用.还尝试了在内核模块中获取文件系统挂载点,但是从2012年起再次使用它,因此它已
..
这是System.map和 /proc/kallsyms 中文本文件的一部分. ffffffff8106c260 T leave_mm ffffffff8106c340 t do_flush_tlb_all ffffffff8106c390 t flush_tlb_func ffffffff8106c510 T native_flush_tlb_others ffffffff8106c540
..
正在使用Linux PCI驱动程序,现在我正尝试使用分散/收集功能为DMA编写代码. 到目前为止,我了解到,要直接从用户空间访问DMA数据,我们需要将用户空间页面固定到内核空间. 为此,我们有get_user_pages,其完整定义如下: int get_user_pages(struct task_struct * tsk, struct mm_struct * m
..
在下面的内核模块中,我挂了syscall sys_open,现在尝试使用Netlink套接字将文件名发送到用户空间中的进程中,作为响应,进程将返回一个msg,然后根据msg,内核模块将继续进行操作. 源代码:foo.c #include #include #include #include
..
对于将内核如何加载到内存中,我有一些疑问.检查/proc/kallsyms后,我可以找到内核中各种符号的地址. $ cat /proc/kallsyms | head -n 10 00000000 t __vectors_start 80008240 T asm_do_IRQ 80008240 T _stext 80008240 T __exception_text_start 800082
..
我正在研究内核模块,以跟踪服务器上NFS客户端执行的操作. 我可以使用黑客方式(劫持vfs层)来拦截文件操作,但无法获取客户端的IP地址. current任务中是否可以存储任何信息,我可以使用这些信息来获取执行操作的NFS客户端的IP地址? 通过深入研究源代码,我知道nfsd在struct super_block的s_fs_info字段中存储了struct nfsd_net,但是我只能
..
在rtl驱动程序中,我试图研究在哪个init函数(pci_driver探测函数相同)中禁用irq. 所以我的问题是:如果我禁用中断,那么NAPI(新API)是否起作用,或者它也基本停止运行,以至于我注意到intel以太网设备驱动程序中的作用. 所以问题是为什么禁用中断很有用. Interrut与新API不同.如果不同,则如何启用NAPI(新API)数据包接收. 是否有任何内
..
我写了一个简单的hello world内核模块.我写了一个make文件,如下所示: obj -m += hello.o KDIR: /usr/src/linux-headers-3.2.0-21-generic-pae all: $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules clean: rm -rf *.o *.ko *.mo
..
我现在正在开发内核模块,构建时间已经开始深入人心了.作为副作用,我在构建过程中占用了太多的“咖啡"时间. 因此,我一直在寻找一种仅构建平台所需材料的方法. “简而言之,Linux内核"的第7章和第8章详细介绍了如何手动执行该操作.很好读: http://www.kroah.com/lkn/ 但是,尽管我了解这些内容,但仍然需要进行很多调整才能使其正常工作. 2.6.32和更高版本
..