【linux 内核内置模块】教程文章相关的互联网学习教程文章

在Linux内核模块中设置动态变量【代码】

我已经制作了一个新的Linux TCP cong算法实现,并且在这段代码中有一些静态变量,我希望它们通过使用一些配置方法是动态的. 根据我在内核级编程中的理解,我们无法加载一些文本文件并将值放在那里并通过程序读取它. 但我需要其他东西来使这些值动态化,以便用户可以在不用每次用户更改值时编译内核代码的情况下更改它们. 我听说过可以帮助我们的proc条目,但我不确定这是否是正确的方法.不确定ioctl()是否也可以提供帮助. 有人可以给出一...

Python [de]压缩模块在Linux上是否是线程安全的?在Google App Engine上?

我应该使用什么压缩 – 解压缩Python模块来构建一个系统,其中Google App Engine(Python 2.7)与Linux机器上的应用程序交换压缩数据? 还有两个额外的限制: > Linux机器和GAE都将进行压缩/解压缩,并且需要安全地操作线程;>我想在不使用类似文件的对象的情况下完成所有操作,因为App Engine无法为动态文件提供传统的Python文件名. 我问,因为从文档中不清楚某些[de]压缩模块是否是线程安全的. 任何人都可以帮忙填写压缩模块表吗? > bz...

linux – 从内核模块向用户空间通知gpio中断

我有一个代码,可以检测内核模块中的GPIO中断.现在,我正在寻找一种机制,在检测到来自内核模块的gpio中断时通知用户空间.任何在不同选项中具有某些优点/缺点的示例/代码段?非常感谢您的回复.解决方法:看一下GPIO键盘驱动程序(drivers / input / keyboard / gpio_keys.c).这是你的问题的一个很好的起点. 在用户空间中,您可以监听(例如,某些阻塞读取,或者只是尾部测试)到/ dev / input / yourevent for events.

linux – 如何在内核模块中使用proc_pid_cmdline【代码】

我正在编写一个内核模块来获取带有完整进程名称的pids列表. proc_pid_cmdline()给出完整的进程名称;使用相同的函数/ proc / * / cmdline获取完整的进程名称. (struct task_struct) – > comm提示它是什么过程,但不是完整的路径. 我已经包含了函数名称,但它给出了错误,因为它不知道在哪里找到函数. 如何在模块中使用proc_pid_cmdline()?解决方法:你不应该调用proc_pid_cmdline(). 在fs / proc / base.c中它是一个non-public functi...

如何为linux内核模块开发配置clang_complete?【代码】

我试图让gcc到dump the include paths,我的.clang_complete文件现在看起来像:-std=gnu89 -nostdinc -I/usr/src/linux-headers-3.0.0-16-generic/arch/x86/include -I/lib/modules/3.0.0-16-generic/build/arch/x86/include/generated -I/lib/modules/3.0.0-16-generic/build/include -I/lib/modules/3.0.0-16-generic/build/ubuntu/include -I/usr/lib/gcc/i686-linux-gnu/4.6.1/include -D__KERNEL__ -DMODULE但是,libclang仍然抱...

linux – 加载我自己的内核模块时的未知符号【代码】

以下代码(最后粘贴)主要来自here,是一个非常简单的内核模块,充当键盘记录器.我可以让它编译并生成一个.ko就好了,但是当我尝试加载它时,我在dmesg中得到以下错误:[ 790.833828] keylogger: Unknown symbol unregister_keyboard_notifier (err 0) [ 790.833846] keylogger: Unknown symbol register_keyboard_notifier (err 0)我没有从源代码构建我的内核,但是使用了archlinux提供的库存内核.但是,我确实安装了kernel-headers包以...

linux – 内核函数asm_do_IRQ()中的irq与我在模块中请求的不同【代码】

我做了一些皮质-A9开发板的实验.我使用gpio_to_irq()获取irq num并且我请求了irq并用它写了一个小驱动程序,它在syslog中是196.我在asm_do_IRQ中添加了一些printks.当我触发gpio中断时,驱动程序工作正常,但asm_do_IRQ中的irq num为62.我无法理解.为什么irq号码与我要求的号码不同?司机如下:#include <linux/module.h>#include <linux/interrupt.h>#include <linux/irq.h>#include <linux/gpio.h>#define GPIO_N 36 //gpio num...

使用Python 2.7在linux中运行ahocorasick模块【代码】

最近我试图在centos5.8_x64和python2.7.5中使用ahocorasick,但是我发现结果是异常的,所以请你告诉我原因?我发现模块在我的windows 7中运行完美与python2.7.5.Here是我的测试代码和linux中的结果.>>> import ahocorasick >>> tree=ahocorasick.KeywordTree() >>> tree.add("id") >>> tree.make() >>> tree.search("sdfsdf fsfsdf") >>> tree.search("sdfsdf fsfsdf") (240103, 240105) >>> tree.search("sdfsdf fsfsdf") (240103, ...

Linux内核模块 – IOCTL用法返回ENOTTY【代码】

我正在研究小内核模块.我试图使用IOCTL(在ioctl_add中),但是当我调用它时,我会在EN的底部检查它,这是在交换机中检查的.代码如下.有谁知道我做错了什么? user.c的:#include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include <unistd.h> #include <sys/types.h> #include <sys/ioctl.h> #include <linux/ioctl.h> #include <sys/stat.h> #include <sys/poll.h> #include <fcntl.h> #include <string.h> #include <errn...

在Linux 2.6驱动程序模块makefile中创建调试目标【代码】

我正在尝试能够在命令行执行“make debug”,它将使用-DDEBUG_OUTPUT定义构建我的驱动程序模块,这将导致编译某些代码段. 在2.4内核makefile中,这很容易.我只是创建一个debug:target并在该目标的cc编译命令参数中包含“-DDEBUG_OUTPUT”.简单. 不幸的是(对我而言),2.6完全改变了模块的编译方式,我只能找到简单的“全部”和“干净”的例子,这些例子没有显示在编译时添加自定义定义. 我试过这个:debug:make -C $(KERNEL_DIR) SUBDIRS...

关闭源Linux内核模块?

我的理解是,一些内核模块(例如专有的Android图形驱动程序)无法提供其实现的完整源代码.如果这是真的,制造商如何规避GPL许可?解决方法:他们没有绕过它. GPL是版权许可.因此,它只能管理工作(Linux内核)或从工作中派生的工作.并非所有在运行时与内核链接的代码都可以被视为内核的派生工作. 例如,NDIS包装器内核模块允许您为Wifi加载Windows二进制驱动程序并在Linux中使用它们.这些NDIS驱动程序是二进制模块,在运行时链接到Linux内核....

linux – 如何针对新的源代码编译内核模块【代码】

我正在尝试编译Hello World模块.我的系统中有一个新的Ubuntu没有任何编译内核. 我的内核是: 2.6.32-34泛型 我给了以下Makefile并得到了错误:obj-m += hello-1.o all:make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modulesclean:make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean# make make -C /lib/modules/2.6.32-34-generic/build M=/home/james/Desktop/hello modules make[1]: Entering directory `/...

linux – 每次从内核模块读取时,为什么CR3寄存器内容会有所不同?

我正在编写一个内核驱动程序,旨在剖析Linux内核页表.我发现,每当我从驱动程序内部读取CR3寄存器时,CR3的内容每次读取都会有所不同! 为什么会这样?如果驱动程序在内核模式下执行,CR3需要指向内核页面目录(对吗?),那为什么CR3每次都在变化? 如果CR3不断变化,驱动程序的内存访问将如何正确发生,如预期的那样?解决方法:正如其他人所提到的,您正在看到当前流程的“页面表”.使用x86,输入低于3的权限级别不会更改页表.这就是为什么大...

在Ubuntu上为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序(3)【代码】

在Android硬件抽象层(HAL)概要介绍和学习计划一文中,我们简要介绍了在Android系统为为硬件编写驱动程序的方法。简单来说,硬件驱动程序一方面分布在Linux内核中,另一方面分布在用户空间的硬件抽象层中。接着,在Ubuntu上为Android系统编写Linux内核驱动程序一文中举例子说明了如何在Linux内核编写驱动程序。在这一篇文章中,我们将继续介绍Android系统硬件驱动程序的另一方面实现,即如何在硬件抽象层中增加硬件模块来和内核驱...

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

我想在我的内核模块中获取文件系统的文件系统挂载点,这是一个可堆叠的文件系统.例如.如果/ home / ab / abc是一个文件,并且/ home安装在不同的文件系统上,我想要一个dentry或path结构到/ home.我想在模块中执行此操作而不修改内核代码.例如/ home / user /中有一个文件,现在我想知道这个文件在哪个分区.例如,此文件可能位于与“/”相同的分区中,或者此文件可能位于/ home或/ home / user上的另一个分区中.解决方法:您可以从current...