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

linux - 如何知道是否有(编译入/内核模块)设备驱动程序控制正在运行的 linux 上的设备?

我如何知道正在运行的 Linux 上是否支持某个设备,如果支持,哪个设备驱动程序控制它?例如,lspci在服务器 (PowerEdge 2900) 上提供:

我怎样才能找到:

  1. 哪个设备驱动程序(内核模块)控制每个设备?
  2. 哪个设备由内核中编译的设备驱动程序控制而不是作为模块)
  3. 哪个设备没有设备驱动程序(编译或作为模块编译)?

这个脚本(改编自“Linux Kernel in a Nutshell”中的另一个脚本)部分解决了 #1:

但它存在一些问题:

  1. 我不知道转换 为 的自动方式/sys/devices/pci0000:00/0000:00:1e.0/0000:10:0d.0 --> pci:v00001002d0000515Esv00001028sd000001B1bc03sc00i0010:0d.0 VGA compatible controller: ATI Technologies Inc ES1000 (rev 02)

  2. 在某些情况下,这些设备是 MB 内部的,我什至不知道如何找到设备的真实名称。例如:

和许多其他人。

  1. 当设备驱动程序被编译(或不存在)时,响应是FATAL: Module _XXXX_ not found.指示设备没有模块。

在某些情况下,驱动程序被编译在(例如)

在其他情况下,驱动程序根本不存在。但我不知道如何区分。

有人知道吗?

0 投票
3 回答
121237 浏览

kernel - 如何配置 modprobe 来查找我的模块?

我正在尝试让内核模块在启动时加载。

如果我运行insmod /path/to/module.ko,它工作正常。但是每次重新启动时都必须重复此操作。

如果我运行modprobe /path/to/module.ko,它找不到模块。我知道 modprobe 使用了一个配置文件,但是即使将 /path/to/module.ko 添加到 /etc/modules 后,我也无法让它加载模块。

什么是正确的配置?

0 投票
6 回答
48415 浏览

file-io - Linux 内核模块中的文件 I/O

我正在编写一个需要打开和读取文件的 Linux 内核模块。实现这一目标的最佳方法是什么?

0 投票
3 回答
34603 浏览

c - Linux Kernel Programming: "Unable to handle kernel NULL pointer dereference"

I'm writing a Linux module and getting:

What does it mean?

0 投票
7 回答
62386 浏览

linux - 有没有办法弄清楚什么是使用 Linux 内核模块?

如果我加载一个内核模块并用 列出加载的模块lsmod,我可以获得模块的“使用计数”(引用该模块的其他模块的数量)。不过,有没有办法弄清楚什么在使用模块?

问题是我正在开发的一个模块坚持它的使用计数是 1,因此我不能rmmod用来卸载它,但它的“by”列是空的。这意味着每次我想重新编译和重新加载模块时,我都必须重新启动机器(或者,至少,我想不出任何其他方法来卸载它)。

0 投票
3 回答
3058 浏览

linux - 是否可以通过 LKM 添加系统调用?

我想通过 LKM 添加一个新的系统调用,但我不知道该怎么做。也就是说,我知道如果我想添加一个全新的系统调用,我可以查看 sys_call_table 并找到一个sys_ni_syscall并替换它,但我很好奇是否可以实际添加sys_call_table. 我意识到这可能是不可能的,因为它是一个固定大小的数组,但我想知道是否有任何其他聪明的方法来添加系统调用而不覆盖未使用的系统调用号。

0 投票
3 回答
5491 浏览

linux - 内核和用户应用程序之间的通信方法

一般是 Linux 编程的新手。

我正在尝试通过共享内存与内核模块通信,但无法调用用户应用程序中使用的函数,例如 shmget(); 我已经在内核模块源代码中安装了 kernel-headers 和 kernel-devel,并包含了,但是这些头文件不包含任何函数。

是否有在内核中使用共享内存的标准方法?

此外,任何有关如何在相同情况下使用套接字的提示都会有很大帮助。

使用发行版:CentOS 5.2 内核:2.6.18-92.1.22.e15

提前致谢。

//添加//为了澄清,我正在尝试制作一个具有典型嵌入式Linux项目共同特征的演示。最终目标是将其移植到 LynxOS 上,看看在大型项目中这样做会出现什么样的问题。

目前演示的主要特点是多进程、管道、消息队列、共享内存、套接字、多线程。

它有一个用户应用程序和一个可加载的内核模块相互通信。用户应用程序内两个进程之间的管道和消息,以及用户应用程序和内核模块之间的共享内存和套接字。

如果我正在做一些偏离课程的事情,请告诉我。

0 投票
3 回答
12541 浏览

linux-kernel - 如何在 /proc/driver 下创建 proc 条目?

我想在目录下创建一个文件/proc/driver。我想使用类似proc_root_driver(或提供的其他东西)的宏,而不是明确使用“驱动程序/模块名称”。我使用create_proc_entry

谷歌搜索后,我发现了使用的建议proc_root_driver,但是当我使用它时,我得到了错误

此函数中未声明 proc_root_driver

而且,proc_root_driver在 linux/proc_fs.h 中不可用。

我试图声明这样的结构:

编译错误消失了,但文件没有出现在/proc/driveror下/proc。我怎样才能在其中创建一个条目/proc

0 投票
5 回答
24536 浏览

c++ - linux内核模块链接器警告:“***警告:[] 未定义!” - 有什么办法可以摆脱它们?

在编译相互依赖的 Linux 内核模块时,链接器会给出未定义的符号警告,例如

一旦使用 insmod 或 modprobe 将模块插入内核,未解析的符号就会被解析。不过,有什么办法可以摆脱链接器警告吗?

我已经阅读了关于这个问题的 3 个 Google SERP - 似乎没有人知道答案。当您构建内核模块时,这些链接器警告是否应该是这种方式?

0 投票
3 回答
1019 浏览

open-source - 有使用 SANOS 操作系统内核的经验吗?

当我遇到SANOS时,我正在浏览一个开源内核,这感觉像是值得作为开源保持活力的东西。为了使其达到现代标准,需要进行以下增强:

  • 支持多个 CPU/内核
  • 添加 IPv6(目前仅支持 IPv4)
  • 能够运行 8192 个并发线程
  • 能够支持 JDK 1.6 所需的附加仿真

所以,我有以下问题:

  1. 这里有没有人想分享他们使用 sanos 的经验?
  2. 什么是吸引其他愿意贡献时间以使其变得更好的人的最方便的方法?
  3. 它在哪些方面比 BSD 和/或 Linux 中使用的内核更好?
  4. 将 Ruby 移植到这个平台有什么好处吗?