【linux – 加载我自己的内核模块时的未知符号】教程文章相关的互联网学习教程文章

linux – 是否可以从内核模块中将SCSI命令发送到USB设备?

题 如果udev传递给我的内核模块(可能是块设备路径)的信息,我可以将SCSI命令发送到块设备吗? (但是它具有正常的功能,否则意味着安装了分区,没有数据丢失等) 我正在尝试做什么 我有一个USB大容量存储设备,其LED有可通过SCSI命令控制.我想编写一个LED驱动程序来为它提供/ sys / class / leds / *条目. 这里的目标是使设备正常运行(分区已安装和运行等),但也允许/ sys / class / leds / *交互,这些交互将发送SCSI命令来控制LED. 使用s...

c – 制作简单的linux内核模块【代码】

我正在尝试升级我的守护进程代码,以便它不是一个可执行文件,它将是一个内核模块,但即使使用一个简单的例子我也很困难. 这是我试过的代码:#include <linux/module.h> #include <linux/kernel.h>int init_module(void){printk("Hello world 1.\n");return 0; }void cleanup_module(void){printk(KERN_ALERT "Goodbye world 1.\n"); }因为我知道我不能直接编译代码,所以我采取了一种方法来复制并稍微修改makefile,如下所示:WARN ...

linux – 引用内核模块中的console_loglevel错误【代码】

我有一个Linux模块,它有一个调试功能,我只想在调试模式下调用该函数.现在我有这样的代码:if (console_loglevel >= CONSOLE_LOGLEVEL_DEBUG)dump_my_message(dev, my_msg);但是当在linux-next中构建这个代码时,它将抛出以下错误:CHK include/generated/uapi/linux/version.h Kernel: arch/x86/boot/bzImage is ready (#2)Building modules, stage 2.MODPOST 2738 modules ERROR: "console_printk" [drivers/mymodule.ko] und...

linux – 在内核模块中创建一个以太网数据包并发送它【代码】

我需要创建一个以太网数据包并在我的内核模块中发送它.有人可以帮我这样做吗? 我想我需要使用dev_alloc_skb创建一个skb,然后我需要编写mac_ethernet,插入数据并使用dev_queu_xmit发送它. 但我不确定这是否有效,或者它是否是正确和最简单的方法. 最好的祝福 EDIT1:int sendpacket () {unsigned char dest[ETH_ALEN]={0x00,0x25,0x22,0x05,0xF3,0xF0};unsigned char src[ETH_ALEN] = {0x90,0xE6,0xBA,0x48,0x7C,0x87};struct sk_bu...

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

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

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内核模块 – 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内核模块?

我的理解是,一些内核模块(例如专有的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的权限级别不会更改页表.这就是为什么大...

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

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

linux – 将内核模块头导出到用户空间

我正在编写一个Linux内核模块,需要将一些头文件导出到用户空间. 我想知道是否有任何标准方法使用内核包来执行标题所需的卫生(例如“$(MAKE)-C $(KERNELDIR)M = $(PWD)headers_install”,如果存在的话). 我应该手动处理标题吗?有什么建议吗?解决方法:开箱即用没有这样的功能,因为大多数需要类似内容的内核模块带有一个额外的“开发”包,其中包含(已清理的)头文件,可能还有一个与模块通信的共享库. 至于清理标题,我建议将头文件拆分...