问题标签 [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 投票
5 回答
2391 浏览

linux-kernel - 对于用户程序和 Linux 内核模块之间的通信,我们有哪些选择?

我是 Linux 内核模块编程的新手。从我目前阅读的材料中,我发现用户程序有 3 种方式请求服务或与 Linux 内核模块通信

  1. /dev 中的设备文件
  2. /proc 文件系统中的文件
  3. ioctl() 调用

问题:我们还有哪些其他选项可用于用户程序和 linux 内核模块之间的通信?

0 投票
2 回答
135 浏览

c - 我可以从模块中添加系统调用吗?

我可以从模块中添加系统调用吗?

0 投票
4 回答
333 浏览

linux - 在内核模块中实现 CPU 扩展

我正在寻找有关在内核模块中实现某些 CPU 扩展的信息。我发现了一些相关的东西:http://www.mirrors.docunext.com/lxr/http/source/arch/mips/kernel/unaligned.c事实上,这是我能找到的唯一接近的源代码.

基本上,我有一个使用某些 CPU 扩展构建的仅二进制共享对象,我需要在具有大部分指令集但不是花哨的新东西的稍旧的 CPU 上运行它。是的,我知道这会很慢,但总比因为 SIGILL 崩溃要好。

0 投票
6 回答
79740 浏览

makefile - 交叉编译内核模块

我正在尝试在我的 intel x86 主机上为 ARM 架构交叉编译一个 helloworld 内核(2.6.x)模块。

ARM 的 codesourcery 工具链位于:/home/ravi/workspace/hawk/arm-2009q3

内核源代码位于:/home/ravi/workspace/hawk/linux-opl1

我的制作文件:

当我运行make时,生成的 .ko 是我的主机的,这意味着 makefile 正在调用本机编译器而不是交叉编译器。我做错了什么?交叉编译器的二进制文件在我的路径中。

0 投票
2 回答
1917 浏览

linux-kernel - 如何在 PPC Linux 上运行时挂钩系统调用表?

主题: PPC 汇编语言 - Linux Loadble 内核模块

详细信息:在系统调用表挂钩中从内核调用时如何访问本地 TOC 区域 (r2)?

我已经为 Linux 编写了一个可加载的内核模块,它使用系统调用表挂钩来拦截系统调用并记录有关它们的信息,然后再将调用传递给原始处理程序。这是安全产品的一部分。我的模块运行良好,并且在生产代码中运行在各种 Linux 内核版本和发行版上,32 位和 64 位内核都在 x86 硬件上运行。

我正在尝试移植此代码以在 Linux 上为 PPC 处理器运行,但遇到了一些问题。使用 Linux 内核源代码,很容易看出系统调用表在 PPC 上的实现方式有何不同。我可以用我自己编译的处理程序中的函数地址替换表中的条目,没问题。

但是,这是我遇到的问题。PPC ABI 使用称为目录 (TOC) 地址的东西,该地址存储在 CPU 的 R2 寄存器中,并希望通过使用该寄存器中包含的地址(TOC 地址)的偏移量来寻址模块的全局和本地数据。这在进行函数调用的正常情况下工作正常,因为编译器知道在进行调用之前将模块的 TOC 地址加载到寄存器中(或者它已经存在,因为通常您的函数是由您自己的代码调用的)。

但是,当我将自己的函数的地址(在运行时从我加载的内核模块)放入系统调用表时,内核使用 R2 值调用我的处理程序,这不是我编译的 C 代码所期望的值,所以我的代码得到控制而无法访问其数据。

有人知道那里有任何示例代码显示如何处理这种情况吗?我无法重新编译内核。这应该是运行时系统调用表挂钩的简单案例,但我还没有弄清楚,或者找到任何特定于 PPC 的示例。

想法包括:

手工编码一个汇编语言存根,保存 R2 值,用我的本地 TOC 地址加载寄存器,执行我的代码,然后在调用原始处理程序之前恢复旧值。我没有 PPC 组装经验的深度来做到这一点,我也不确定它会起作用。

一些神奇的 gcc 选项可以在不使用 TOC 的情况下生成我的代码。有一个记录在案的 gcc 选项"-mno-toc"在我的 PPC6 Linux 上不起作用。看起来它可能只是系统 V.4 和嵌入式 PowerPC 的一个选项。

任何帮助是极大的赞赏 !

谢谢!

0 投票
2 回答
524 浏览

makefile - 内核模块生成文件问题

这是我第一次尝试构建内核模块。以下是制作文件。在运行 make 命令时。我得到错误

/bin/sh:语法错误:“(”意外

make: *** [全部] 错误 2

0 投票
3 回答
3448 浏览

windows - 没有设备的设备驱动程序?

我正在创建一个需要使用一些内核级模块的应用程序,为此我将应用程序分为 2 个:一个用户级程序和一个内核级程序。

在阅读了有关设备驱动程序并浏览了一些教程之后,我有点困惑。

是否有一个设备驱动程序没有与之关联的任何特定设备?除了在内核模式下工作的设备驱动程序(内核代码或其他东西)之外,还有其他东西吗?

防病毒程序和其他此类应用程序如何在内核模式下工作?设备驱动程序是正确的方式还是我错过了什么?

0 投票
7 回答
20059 浏览

linux-kernel - 如何在 linux 内核 2.6 中使用 CryptoAPI

我一直在寻找一段时间,但没有找到足够的文档/示例来说明如何使用 linux 附带的 CryptoAPI 创建系统调用/在内核领域。

如果有人知道好的来源,请告诉我,我想知道如何仅在内核空间内执行 SHA1 / MD5 和 Blowfish / AES。

0 投票
1 回答
1599 浏览

kernel - 在 FreeBSD 中通过 KLD 创建新的系统调用

有没有关于通过内核可加载模块向 FreeBSD 添加系统调用的好的(入门级)教程?具体来说,方法的所需形式、从流程中获取信息等。

0 投票
1 回答
396 浏览

c - 在 sysfs 中创建属性

我只是想向 /sys 文件系统中的设备添加一个简单的属性。看起来很简单,但这里这里提到的辅助方法都不是从内核导出的,所以我不能从模块中使用它们?我必须遗漏一些东西,任何人都可以提供一些见解吗?