问题标签 [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 回答
34769 浏览

linux - 如何使用 ioctl() 来操作我的内核模块?

所以我正在尝试编写一个使用 linux/timer.h 文件的内核模块。我让它只在模块内部工作,现在我正试图让它从用户程序中工作。

这是我的内核模块:

更具体地说,我希望我的用户程序调用 TimerSetup() 函数。我知道我需要使用 ioctl(),但我不确定如何在我的 MODULE 文件中指定 TimerSetup() 应该可以通过 ioctl() 调用。

另外,我的第二个问题:我能够使用正确的主编号将我的模块和 mknod 插入 /dev/mytimer。但是当我尝试打开()它以便从中获取文件描述符时,它一直返回-1,我认为这是错误的。我确保权限很好(事实上,我把它设为 777 只是为了确定)......它仍然不起作用......我错过了什么吗?

这是用户程序以防万一:

0 投票
2 回答
3188 浏览

linux - linux/timer.h setup_timer() 过期功能不起作用?

所以我的 setup_timer() 中的 TimerExpire 函数会引起巨大的恐慌(将在下面发布),而对 TimerExpire() 的常规函数​​调用实际上会打印出我的输入。

有人知道为什么吗?

这是错误输出(顺便说一下,这是在一个 gumstix verdex 模拟器上,它是一个 linux 内核):

0 投票
1 回答
102 浏览

module - 我的模块在哪里?

我制作了一个内核模块并使用下面的代码尝试制作 /dev/mytimer 条目。

我在 /dev 中没有看到我的模块为 /dev/mytimer... 但是当我 时lsmod,我在列表中看到它作为条目 mytimer。

我在哪里以及如何找到我的模块?有没有办法把它放在 /dev 中?

谢谢!

0 投票
1 回答
704 浏览

c - 错误地传递参数?C 问题

当计时器计时结束时最终调用我的 TimerExpire 函数时,它会打印出乱码。有谁知道为什么?但是我在 IOCTL_MAKE_TIMER 中的 printk 函数打印正确,所以我认为这是因为我传入的数据错误。

setup_timer() 的工作原理是在第一个参数中设置计时器,告诉它调用第二个参数指定的函数,并将数据(第三个参数)传递给该函数。

在我的例子中,它调用 TimerExpire(char* data) 函数,传递给它 final_arg,它是一个 char* 到 kern_arg。我什至尝试将 kern_arg 直接传递给函数......也给了我胡言乱语。

以前(昨天),我有 char* kern_arg,而不是 char kern_arg[],效果很好,但我认为它不安全。

如果有人能提供一些见解,那将是惊人的!谢谢!

0 投票
1 回答
446 浏览

process - 告诉 proc_entry->write_proc 使用带参数的 ioctl?

我已经看到了一些执行此操作的示例代码:

但是,在我的模块中,我使用了 ioctls 而不是读写。这是我的 ioctl 函数原型:

对于读取,我的“fcn”是 IOCTL_GET_TIMER,对于写入,我的“fcn”是 IOCTL_SET_TIMER。

无论如何要做这样的事情:

但不传入“args”参数?

或者更简单的方法是只编写 module_read 和 module_write 函数,然后让它们调用 ioctl?

谢谢你们的帮助!

0 投票
2 回答
5661 浏览

linux - Linux内核——通过模块动态添加系统调用

有没有办法添加系统调用动态,例如通过模块?我找到了可以使用模块覆盖现有系统调用的地方,只需更改sys_call_table[]数组即可在安装模块时获取我的覆盖函数而不是本机函数,但是您可以使用新的系统调用和模块来做到这一点吗?

0 投票
2 回答
953 浏览

linux-kernel - 用户模式 ​​Linux - 安装模块错误

我正在尝试在用户模式 ​​Linux 中的模块上运行“make”来安装一个简单的 makefile。这是我的制作文件:

当我在用户模式 ​​Linux 中运行它时,出现以下错误:

问题是没有文件存在于/lib/modules/. 没有 2.6.28 或 build 的目录。根据我的阅读,这些应该是指向的符号链接/usr/src,但在 下/usr/src,我也看不到任何文件。

0 投票
0 回答
637 浏览

linux-kernel - 如何在用户模式 ​​Linux 中编译模块

为用户模式 ​​Linux 编译模块很困难。我只需要一种基本方法来在用户模式 ​​linux 中编译一个非常基本的模块,但似乎无法让它工作。我查看了有关 UML 的 sourceforge 的操作方法,但没有运气。任何人都有一个可行的例子来说明它需要什么?

谢谢!

0 投票
3 回答
4547 浏览

linux-kernel - 更改中断描述符表

我正在使用 Linux 2.6.26 内核版本,并且正在尝试使用内核模块更改中断描述符表。我只是想在这里更改页面错误表条目。因此,我制作了原始 IDT 的副本并仅对缺页表条目进行更改。ISR 的目标是在调用原始页面错误处理程序之前打印出页面错误的信息。但是一旦我用 insmod 加载内核就会崩溃,即它专门用“loadIDTR”函数崩溃了。通过进一步调试,我发现如果我加载 IDTR 不更改任何条目,它可以正常工作。我没主意了。

我已经粘贴了下面的代码

0 投票
3 回答
10891 浏览

linux-kernel - Linux 内核模块 - 创建 proc 文件 - proc_root 未声明的错误

我从这个 URL 复制并粘贴代码,用于使用内核模块创建和读取/写入 proc 文件,并得到 proc_root 未声明的错误。这个相同的例子在几个网站上,所以我认为它有效。任何想法为什么我会收到此错误?我的makefile是否需要不同的东西。下面也是我的makefile:

创建基本 proc 文件的示例代码(直接复制和粘贴以完成初始测试): http ://tldp.org/LDP/lkmpg/2.6/html/lkmpg.html#AEN769

我正在使用的Makefile :