问题标签 [kernel-module]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2808 浏览

linux-kernel - linux内核和用户空间之间通信和同步的最佳方式

我的目标是从内核记录很多活动。为此,我需要写入基于磁盘的文件系统。

所以,我已经实现了一个字符设备驱动程序,以及一个从这个虚拟设备读取的用户空间进程。驱动程序将数据复制到用户空间缓冲区,用户进程将其写入文件。

我的问题是如何同步数据。我开始在内核实现中使用 kfifo 来实现 fifo。所以无论我想登录哪里,我都使用 kfifo API 将数据复制到 fifo 中。虚拟设备驱动程序从 fifo 读取并将其复制到用户空间。由于记录的数据很大,我需要同步,例如生产者消费者。我可以使用linux内核中的任何此类支持吗?

netlink socket 能解决这样的问题吗??

0 投票
2 回答
14094 浏览

linux - 获取 Linux 内核中的网络设备列表

我一直在查看 net/core/dev.c 和其他文件,试图找出如何获取当前配置的网络设备列表,但事实证明这有点难以找到。

最终目标是能够使用 dev.c 中的 dev_get_stats 获取网络设备统计信息,但我需要知道当前接口,以便获取 net_device 结构以传递。我必须在内核中执行此操作,因为我'正在编写一个模块,该模块添加了一个新的 /proc/ 条目,该条目与来自当前网络设备的一些统计信息相关,因此据我所知,这必须在内核中完成。

如果有人能指出我如何获得接口,将不胜感激。

0 投票
3 回答
2191 浏览

c - 为什么在 ioctl 命令中从用户空间复制结构失败?

我正在开发设备驱动程序,需要使用 IOCTL。不幸的是,我无法从用户空间复制结构。这是代码(简化,删除了错误处理):

结构

应用

内核模块

最好的问候,
奥利弗·哈纳皮

0 投票
3 回答
2022 浏览

linux-kernel - 如何在具有 bit-banging 的 Liunx 内核模块中生成 ~100kHz 时钟信号?

我正在尝试在 GPIO 引脚(ARM 平台,mach-davinci,内核 2.6.27)上生成时钟信号,该信号的频率为 100kHz。使用具有高优先级的 tasklet 来做到这一点。原理很简单,设置gpio高,udelay为5us,设置gpio低,再等5us,但是出现了奇怪的问题。首先,不能得到这个 5us 的 dalay,但没关系,看起来像硬件性能问题,所以我移到 period = 40us(给出 ~25kHz)。第二个问题是最糟糕的。每约 10 毫秒一次,udelay 的等待时间比平时长 3 倍。我认为这次是心跳,但从协议(将在此之上实现)的角度来看,这是不可接受的。有什么方法可以暂时禁用心跳程序,比如说,500ms?或者也许我从一开始就做错了?任何意见?

0 投票
2 回答
27286 浏览

linux - 如何重新加载修改过的内核模块

如何指示系统重新加载所有已更改的内核模块?(我正在开发一个包含多个模块的驱动程序。我想要一种快速且无错误的方法来重新加载所有更改的模块。)

0 投票
2 回答
2324 浏览

linux-kernel - 编译Linux内核模块(lincan)

我使用 Ubuntu 10.10 - 2.6.35.23-generic

我想编译 lincan 模块 (http://sourceforge.net/projects/ocera/),但它不像我想要的那样工作……这是我第一次编译内核模块。我这样做了:

首先将 lincan-sources 解压缩到我的主目录。然后用这个输出执行“make”:

然后我输入“make install”:

它什么也没发生。我发现没有内核模块。我做错了什么?为什么没有 autoconf.h 和其他文件?你对我有什么提示吗?谢谢!


现在我为丢失的文件(autoconf.h 和 utsrelease.h)创建了硬链接。它们位于 /usr/src/linux-headers-2.6.35.23-generic/include/generated/

现在它编译更多。这是出现的第一个错误:

0 投票
1 回答
6336 浏览

linux - Linux内核模块中的字符串操作

在为 linux 编写模块时,我很难操作字符串。我的问题是我有一个 int Array[10] ,其中有不同的值。我需要生成一个字符串才能发送到 my_read 过程中的缓冲区。如果我的数组是 {0,1,112,20,4,0,0,0,0,0} 那么我的输出应该是:

当我尝试将上述字符串放在 char[] 数组中时,一些奇怪的字符最终会出现在那里

这是代码

它解决了这个问题:

我想知道在 sprintf 中是否有一个简单的标志来乘以字符串字符。谢谢——</p>

0 投票
13 回答
23440 浏览

linux - Linux:modpost 不构建任何东西

我无法在我的机器上构建任何内核模块。每当我构建一个模块时,modpost 总是说有零个模块:

为了解决这个问题,我写了一个测试模块(hello.c):

这是该模块的 Makefile:

当我在我的机器上构建它时,我得到以下输出:

当我在另一台机器上制作模块时,它是成功的:

我查找了有关 modpost 的任何相关文档,但几乎没有找到。任何人都知道 modpost 如何决定构建什么?是否有我可能缺少的环境?

顺便说一句,这是我正在运行的:


编辑

这是使用 V=1 运行的 make:

0 投票
1 回答
813 浏览

c - 适用于 Linux 帧缓冲区的 Windows 镜像驱动程序

对于我正在编写的软件,我需要知道 linux 帧缓冲区何时更新。我需要 Windows Mirror Drivers 之类的东西(有关更多信息,请查看 Wikipedia 上的 Mirror_driver)。

环顾四周,我没有找到任何东西,所以我正在寻找一种方法来实现这一点。

从我所见,我需要编写一个在帧缓冲区特定模块之后加载的模块,并挂钩 fb ops 结构以注入自己的东西并捕获更新。

有人可以给我一个提示吗?我对内核模块编写没有太多经验。

谢谢!

0 投票
2 回答
10488 浏览

linux - 如何查找已编译内核模块的版本?

我的情况是,通过查询加载的模块或 .ko 文件来查找加载的内核模块的版本会非常方便。

有没有一种标准的方法可以在深入研究源代码的情况下做到这一点?