kernel-module相关内容

了解LINUX_VERSION_CODE

我正在清洗一个内核模块,我在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定义我的代码段. 我的问题是,编译失败,因为内核标头包含在更 ..
发布时间:2020-04-25 11:44:10 服务器开发

在内核空间中调用times()

我正在开发一个内核模块,我需要获得某个进程消耗的CPU时间的近似值(重复这些进程不是问题).具体来说,我希望libc clock 或 times 系统调用.我尝试调用 do_sys_times ,但似乎未导出(编译时未定义的符号). 是否可以在内核模块中调用 times ?还有其他选择吗? 解决方案 如果要精确测量内核中某些事件之间的时间(例如上下文切换),则需要一些跟踪器,例如这里 ..
发布时间:2020-04-25 11:44:07 其他开发

是否可以通过netlink在两个Linux内核模块之间进行通信?

众所周知,netlink是用户/内核空间通信机制. 我想从内核模块与另一个模块通信.另一个内核模块已经具有netlink接口. 是否有可能像我们在用户空间中那样建立从内核模块到netlink的连接? 解决方案 简短答案:否. 如果要在两个内核模块之间进行通信,则应使用由另一个内核模块导出的符号(全局变量或函数). netlink套接字用于内核和用户态之间的通信. A ..
发布时间:2020-04-25 11:44:02 服务器开发

将新的IOCTL添加到内核(数字范围)

我正在编写新的内核模块,并添加实现新的IOCTL. 我应遵守IOCTL编号的任何规定吗? 也许有一些“用户范围"? 我在嵌入式平台上使用内核2.6.21. 解决方案 IOCTL被定义为与设备相关的-如果存在供人们实现的“标准" ioctl,则这些系统调用将为read和write之类的系统调用. 有关ioctl数字的一些约定: 参数方向(输入,输出,两者)均以两位数的i ..
发布时间:2020-04-25 11:43:56 服务器开发

无法在Linux内核4.2.3版上从内核模块打开/读取文本文件

我已经编写了一个内核模块,正在4.2.3内核上加载.我正在尝试在我的init_module中读取一个简单的文本文件,该文件基本上是通过读取文本文件的内容来加载一些配置数据的.相同的代码适用于早期版本的内核,但不适用于4.2.3.以下是我的代码段供参考: struct file* pFile = NULL; pFile = filp_open(fileName, mode, 0); if(pF ..
发布时间:2020-04-25 11:43:54 其他开发

交叉编译FTDI VCP驱动程序,用于嵌入式Linux手臂

我正在尝试为嵌入式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内核,以向Linux虚拟服务器(LVS)添加一些功能. 我开发了一个模块(我称为net/netfilter/ipvs/ip_vs_utils.c),其中包含一些在负载平衡时要使用的功能.使用EXPORT_SYMBOL()导出此处的所有功能. 从逻辑上讲,此模块并非一直都在加载.我的意图是允许用户决定是否要使用此附加功能(加载或卸载模块). 我的问题是我该如何从 ..
发布时间:2020-04-25 11:43:50 服务器开发

使用hciattach在uart上进行蓝牙?

我正在使用在controller mode(BLE蓝牙核心规范v4.0)中运行的QN9021 SoC.它支持某些标准HCI命令以及某些供应商特定的命令.我正在尝试将其连接到我的ubuntu笔记本电脑中. 我使用的命令是hciattach. hciattach -s 9600 /dev/ttyUSBx any 9600 noflow nosleep 在执行sudo hciconfi ..
发布时间:2020-04-25 11:43:48 服务器开发

如何找到已编译内核模块的版本?

我处于一种非常方便的状态,即通过查询已加载的内核模块或.ko文件来查找已加载的内核模块的版本. 是否有一种标准的方法来执行 而无需深入源代码? 解决方案 $ apropos modinfo modinfo (8) - display information about a kernel module $ modinfo cpuid.ko filename: ..
发布时间:2020-04-25 11:43:44 服务器开发

LKM:写入设备的最后一个块

我正在尝试在模块内部找到一种方法,以跟踪写入到块设备的最后一个块.我需要的特定设备是安装在根目录下的设备(如果有帮助,我会提前知道/dev/名称.) 我最初的想法是包装Submit_bio函数,因为如果您“回显1>/proc/sys/vm/block_dump",它已经具有日志记录功能.不幸的是,似乎我需要修改源代码才能使该函数成为指针.我想尽可能将其保留在模块中. 在那之后,我研究了 ..
发布时间:2020-04-25 11:43:36 服务器开发

在内核模块中侦听Netlink广播

SELinux模块将网络链接广播发送到任何侦听套接字.我想知道是否有可能从另一个内核模块中监听netlink广播? 通过SELinux网络链接代码: netlink_broadcast(selnl, skb, 0, SELNLGRP_AVC, GFP_USER); 解决方案 我发现您可以通过使用常规套接字来监听netlink数据.而且,是的,在内核空间中是可能的. 您基本上 ..
发布时间:2020-04-25 11:43:29 其他开发

kthread_stop使内核崩溃

我试图学习自旋锁和内核线程,并且编写了一个小模块来测试对内核代码的理解.代码段是: static int kernel_test_thread(void *__unused) { int work; int x; allow_signal(SIGKILL); spin_lock(&kernel_test_device_lock); while(curr ..
发布时间:2020-04-25 11:43:27 其他开发

为什么我的内核模块会抛出“断线"?尝试写入设备时出现错误?

我目前正在用C编写Linux内核模块.该模块为USB灯(该设备由三个彩色LED组成)提供了非常基本的驱动程序.我设法使驱动程序可以毫无问题地加载和卸载,还可以创建设备(/dev/wn0,/dev/wn1等).但是,尝试写入设备时,我总是收到错误消息: $ echo "1" >/dev/wn0 bash: echo: write error: Broken pipe 该模块的完整代码是此处 ..
发布时间:2020-04-25 11:43:20 其他开发

如何编写跨版本/平台的Linux内核模块?

我是Linux内核模块编程的新手,有关该主题的许多入门指南都很少提供有关如何构建可在Linux的许多版本和CPU平台上运行的内核模块的信息.我看过的大多数指南都只是简单地指出诸如"Linux不能确保版本之间的任何 ABI/API兼容性".但是,其他操作系统的确为主要版本提供了这些保证,并且这些指南主要针对2.7(现在有点老了). 我想知道现在是否存在任何类型的ABI/API兼容性,或者是否存 ..
发布时间:2020-04-25 11:43:18 其他开发