kernel-module相关内容

ARM64 - Linux 内存写保护不会禁用

我正在尝试从 LKM 中禁用 ARM64 系统上的内存写保护.(在Xen hypervisor的DOM0中开始) 我通过使用 Linux 内核函数找到了一个虚拟地址对应的 PTE. pgd_t *pgd;pte_t *ptep, pte;pud_t *pud;pmd_t *pmd;pgd = pgd_offset(init_mm, (addr));如果 (pgd_none(*pgd) || ..
发布时间:2021-11-17 22:46:01 其他开发

已编译 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 其他开发

交叉编译内核模块:无效的模块格式

我正在尝试交叉编译具有规范的 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_ ..
发布时间:2021-11-17 21:56:27 其他开发

使用 kretprobes 后处理程序获取系统调用参数

我想在这些系统调用返回后立即使用 LKM 跟踪 sys_connect 和 sys_accept.我发现当被探测的系统调用返回时,kprobes 可以让你访问寄存器,通过定义一个后处理程序. 我的问题是我不知道如何从我在后处理程序(即结构 pt_regs)中的数据中获取系统调用参数后处理程序定义如下: void post_handler(struct kprobe *p, struct p ..
发布时间:2021-11-17 02:43:07 其他开发

如何在树外内核模块中为make headers_install指定头文件?

我在kbuild 模块中找不到与此有关的任何信息.文档和 headers_install 中只有一个斜引用(建议可能).文档. "make headers_install"命令可以在以下目录的顶级目录中运行内核源代码(或使用标准的树外构建). 我有一个树外内核模块和一个关联的头文件(我对IOCTL有#defines),并且我想在模块安装过程中提供该头文件.内核模块提供头文件(供用户空间 ..
发布时间:2021-05-28 19:19:36 其他开发

如何执行"invd"操作操作说明?

我正在尝试将缓存用作临时内存.在使用缓存后,我不想存储任何已修改的缓存行.我知道我可以通过运行 invd 指令来实现这一目标.因为与 wbinvd 不同, invd 使处理器的内部缓存无效(刷新),而不将其存储到主存储器中. 我写了一个内核模块来检查我是否可以执行 invd 指令. #include/*所有模块都需要*/#include ..
发布时间:2021-04-21 18:44:28 其他开发

在内核模块中执行系统调用

我开始开发具有内联汇编的内核模块,我试图执行 write 系统调用以写入 file .它可以很好地编译(此外,在C程序中可以正常工作),但是当我加载模块时,它会出现 segmentation错误,当我查看诊断消息(dmesg)时,我会看到以下内容: [ 672.687568] BUG: stack guard page was hit at ffffb8a601d13fa8 (stack ..
发布时间:2021-02-14 21:12:31 其他开发

从内核syscall获取用户空间RBP注册

我正在编写一个内核系统调用,我想读取用户的基本指针寄存器(RBP).也许我可以使用为参数传递的pt_regs结构来做到这一点,不是吗? 示例代码: unsigned long int data; asmlinkage int my_read(int d) { get_rbp_of_userStack(&data);#or somthing like that } 我知道 ..
发布时间:2021-02-14 21:12:27 其他开发

LiME内核模块交叉编译失败

我正在尝试使用以下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 ..
发布时间:2021-02-14 21:12:23 其他开发

ARM64-Linux内存写保护不会禁用

我正在尝试从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 ..
发布时间:2021-02-14 21:12:15 其他开发

如何将静态或共享库链接到内核模块?

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 ..
发布时间:2021-02-14 21:12:10 其他开发

内核模块如何卸载自身而不在内核日志中生成错误?

我已经制作了一个简单的模块,该模块在加载时会打印GDT和IDT.完成工作后,就不再需要它并且可以将其卸载.但是,如果它返回负数以停止加载,则insmod会抱怨,并且错误消息将记录在内核日志中. 内核模块如何优雅地卸载自身? 解决方案 据我所知,使用普通内核是不可能的(您可以按照下面所述修改模块加载器内核,但这可能不是一个好方法.依靠的东西.) 好的,所以我看了一下模块的加载和卸 ..
发布时间:2021-02-14 21:12:07 其他开发

C-Linux-遍历进程子进程的自定义内核模块会炸毁内核日志和计算机

我是Linux内核模块的新手,在尝试处理一些复杂的概念之前,我正在尝试实现一些基本概念.我编写了一个代码,该代码带有一个模块参数(一个int),并检查是否有带有该pid的进程.如果存在,则将其子项作为列表,并在打印子项的ID和说明时对其进行迭代.这是代码: #include #include #include ..
发布时间:2021-02-14 21:12:04 其他开发

用可加载模块替换内核内置模块

我已经开发了一个内核模块,用于将nf4标签作为char设备进行管理. 我已经在内核外部开发了该模块,并在开发阶段对其进行了测试,并将其编译为可加载的内核模块(即.ko). 一旦驱动程序正常运行并足够稳定,我便会使用补丁将其插入Linux内核源代码(v4.9.30),以便将其构建为内核的一部分. 在这种情况下,由于模块是内置的,因此会在启动时由内核对其进行加载探测,并出现在设备树中 ..
发布时间:2021-02-14 21:12:01 其他开发

获取内核模块中的所有安装点

我正在尝试获取内核模块中的所有挂载点.以下是我想出的.由于strcat而导致段错误.这是获取挂载点的正确方法吗?这会工作吗?如果是的话,我该如何修复段错误?如果没有,如何在Linux内核模块中获取挂载点? 我已经尝试过循环整个命名空间,以查找挂载点根匹配,但是从2003年开始,内核发生了很大变化,因此基本上没有用.还尝试了在内核模块中获取文件系统挂载点,但是从2012年起再次使用它,因此它已 ..
发布时间:2021-02-14 21:11:58 其他开发

/proc/kallsyms中的T和t有什么区别

这是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 ..
发布时间:2021-02-14 21:11:54 其他开发

"get_user_pages"如何工作(对于Linux驱动程序)

正在使用Linux PCI驱动程序,现在我正尝试使用分散/收集功能为DMA编写代码. 到目前为止,我了解到,要直接从用户空间访问DMA数据,我们需要将用户空间页面固定到内核空间. 为此,我们有get_user_pages,其完整定义如下: int get_user_pages(struct task_struct * tsk, struct mm_struct * m ..
发布时间:2021-02-14 21:11:51 其他开发

Linux内核-如何停止kthread等待信号?

在编写Linux内核模块时,我遇到了一个kthread问题,在等待信号量解锁时我无法唤醒.这会导致线程无法停止,并且在尝试卸载模块时rmmod会冻结. 请注意::该模块运行在3.10内核上,我无法将其更新为更新的版本(客户要求在具有3.10内核的CentOS 7上运行). > 下面是模块源代码中有趣的部分.它代表了一个简单的生产者消费者问题,列表的大小不受限制(因此不需要生产者信号量), ..
发布时间:2021-02-14 21:11:46 其他开发