kernel-module相关内容
我正在清洗一个内核模块,我在centos 7上再次测试我的LKM时发现问题. uname -a print 3.10.0-123.13.2.el7.x86_64,我正在使用此内核头文件/usr/src/kernels/3.10.0-123.13.2.el7.x86_64/来编译我的KM并使用LINUX_VERSION_CODE定义我的代码段. 我的问题是,编译失败,因为内核标头包含在更
..
我正在开发一个内核模块,我需要获得某个进程消耗的CPU时间的近似值(重复这些进程不是问题).具体来说,我希望libc clock 或 times 系统调用.我尝试调用 do_sys_times ,但似乎未导出(编译时未定义的符号). 是否可以在内核模块中调用 times ?还有其他选择吗? 解决方案 如果要精确测量内核中某些事件之间的时间(例如上下文切换),则需要一些跟踪器,例如这里
..
众所周知,netlink是用户/内核空间通信机制. 我想从内核模块与另一个模块通信.另一个内核模块已经具有netlink接口. 是否有可能像我们在用户空间中那样建立从内核模块到netlink的连接? 解决方案 简短答案:否. 如果要在两个内核模块之间进行通信,则应使用由另一个内核模块导出的符号(全局变量或函数). netlink套接字用于内核和用户态之间的通信. A
..
$insmod helloworld module generates the error message "Invalid module format". $dmesg outputs: overflow in relocation type 10 val ffffffff88640070 'hello' likely not compiled with -mcmodel=kernel
..
我正在编写新的内核模块,并添加实现新的IOCTL. 我应遵守IOCTL编号的任何规定吗? 也许有一些“用户范围"? 我在嵌入式平台上使用内核2.6.21. 解决方案 IOCTL被定义为与设备相关的-如果存在供人们实现的“标准" ioctl,则这些系统调用将为read和write之类的系统调用. 有关ioctl数字的一些约定: 参数方向(输入,输出,两者)均以两位数的i
..
我已经编写了一个内核模块,正在4.2.3内核上加载.我正在尝试在我的init_module中读取一个简单的文本文件,该文件基本上是通过读取文本文件的内容来加载一些配置数据的.相同的代码适用于早期版本的内核,但不适用于4.2.3.以下是我的代码段供参考: struct file* pFile = NULL; pFile = filp_open(fileName, mode, 0); if(pF
..
我正在尝试为嵌入式arch linux arm计算机交叉编译FTDI VCP驱动程序.我从 http://www.ftdichip.com/Drivers/VCP.htm 下载了源文件. a>到运行内核的我的主机上: 2.6.32-54-generic-pae 运行Makefile时,出现与内核头文件有关的错误,即:找不到asm/thread_info.h文件.我意识到这意味着我的as
..
我正在修改Linux内核,以向Linux虚拟服务器(LVS)添加一些功能. 我开发了一个模块(我称为net/netfilter/ipvs/ip_vs_utils.c),其中包含一些在负载平衡时要使用的功能.使用EXPORT_SYMBOL()导出此处的所有功能. 从逻辑上讲,此模块并非一直都在加载.我的意图是允许用户决定是否要使用此附加功能(加载或卸载模块). 我的问题是我该如何从
..
我正在使用在controller mode(BLE蓝牙核心规范v4.0)中运行的QN9021 SoC.它支持某些标准HCI命令以及某些供应商特定的命令.我正在尝试将其连接到我的ubuntu笔记本电脑中. 我使用的命令是hciattach. hciattach -s 9600 /dev/ttyUSBx any 9600 noflow nosleep 在执行sudo hciconfi
..
我处于一种非常方便的状态,即通过查询已加载的内核模块或.ko文件来查找已加载的内核模块的版本. 是否有一种标准的方法来执行 而无需深入源代码? 解决方案 $ apropos modinfo modinfo (8) - display information about a kernel module $ modinfo cpuid.ko filename:
..
我正在使用 YOCTO PROJECT 为嵌入式板构建linux操作系统. 我有一个名为 uleds 的模块,我想将其插入到我的内核中,因此我将以下 insmod 命令用磁带录音了: insmod /lib/modules/4.14.73-linux4sam-6.0-dirty/kernel/drivers/leds/uleds.ko 但是出现错误: uleds:版本Magic'
..
我正在构建一个非常简单的内核模块,用于从网卡收集一些统计信息,这是代码,我一直收到错误implicit declaration of function 'ndo_get_stats'.我不确定为什么... #include /* Needed by all modules */ #include /*
..
我正在尝试在模块内部找到一种方法,以跟踪写入到块设备的最后一个块.我需要的特定设备是安装在根目录下的设备(如果有帮助,我会提前知道/dev/名称.) 我最初的想法是包装Submit_bio函数,因为如果您“回显1>/proc/sys/vm/block_dump",它已经具有日志记录功能.不幸的是,似乎我需要修改源代码才能使该函数成为指针.我想尽可能将其保留在模块中. 在那之后,我研究了
..
我尝试在内核模块的/proc/net中创建一个条目,如下所示: struct file *filp = filp_open("/proc/net", O_RDONLY, 0); struct proc_dir_entry *parent = PDE(filp->f_dentry->d_inode); filp_close(filp, NULL); proc_file = create_pr
..
SELinux模块将网络链接广播发送到任何侦听套接字.我想知道是否有可能从另一个内核模块中监听netlink广播? 通过SELinux网络链接代码: netlink_broadcast(selnl, skb, 0, SELNLGRP_AVC, GFP_USER); 解决方案 我发现您可以通过使用常规套接字来监听netlink数据.而且,是的,在内核空间中是可能的. 您基本上
..
我试图学习自旋锁和内核线程,并且编写了一个小模块来测试对内核代码的理解.代码段是: static int kernel_test_thread(void *__unused) { int work; int x; allow_signal(SIGKILL); spin_lock(&kernel_test_device_lock); while(curr
..
我正在编写一个使用导出符号open_exec 的linux内核模块. struct file *open_exec(const char *name) 它返回一个指针,我可以使用IS_ERR宏检查错误: if (IS_ERR(file)) return file; 在编译期间,我收到以下警告: warning: return makes integer from p
..
我目前正在用C编写Linux内核模块.该模块为USB灯(该设备由三个彩色LED组成)提供了非常基本的驱动程序.我设法使驱动程序可以毫无问题地加载和卸载,还可以创建设备(/dev/wn0,/dev/wn1等).但是,尝试写入设备时,我总是收到错误消息: $ echo "1" >/dev/wn0 bash: echo: write error: Broken pipe 该模块的完整代码是此处
..
我是Linux内核模块编程的新手,有关该主题的许多入门指南都很少提供有关如何构建可在Linux的许多版本和CPU平台上运行的内核模块的信息.我看过的大多数指南都只是简单地指出诸如"Linux不能确保版本之间的任何 ABI/API兼容性".但是,其他操作系统的确为主要版本提供了这些保证,并且这些指南主要针对2.7(现在有点老了). 我想知道现在是否存在任何类型的ABI/API兼容性,或者是否存
..
在内核模块中,如何列出所有内核符号及其地址? 不应重新编译内核. 我在一个界面中知道"cat/proc/kallsyms",但是如何使用kallsyms_lookup_name之类的函数直接从内核数据结构中获取它们. 解决方案 示例 工作模块代码: #include #include static
..