问题标签 [kernel]

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 投票
13 回答
8181 浏览

c - 使用 Linux 内核中的模块覆盖功能

在没有详细说明原因的情况下,我正在寻找一种干净的(尽可能)方法来替换可加载模块中的内核函数和系统调用。我最初的想法是写一些代码来覆盖一些函数,它会取原来的函数(也许,如果可能的话,调用函数),然后添加一些我自己的代码。关键是我编写的函数必须具有原始函数的名称,因此其他代码在尝试访问它时会访问我的。

我可以通过将我的代码放入适当的函数中轻松(相对地)直接在内核中执行此操作,但我想知道是否有人知道一点 C 魔法,它不一定是可怕的内核(或 C)编码实践,可以实现同样的结果。

#defines 和 typedefs 的想法浮现在脑海,但我无法在脑海中完全破解它。

简而言之:有没有人知道一种有效地覆盖 Linux 内核(从模块)中的功能的方法?

编辑:既然有人问过,我基本上想从内核中记录某些功能(创建/删除目录等) ,但为了理智,一个可加载的模块似乎是有意义的,而不是必须写一个大补丁内核代码并在每次更改时重新编译。向内核添加少量代码是可以的,但我想将大部分工作卸载到模块中。

0 投票
2 回答
471 浏览

c - 虚拟区域到页面

在 Linux 内核中,给定task_structsmm我可以访问进程的vm_area_structs 列表。给定这些vm_area_structs,我如何获得struct page实际对应于这个 vma 的 s?

我尝试在 mm/memory.c 等中寻找函数,但不知所措。

编辑:想法是找出 vma 中的哪些页面当前在内存中,哪些不在内存中。但我希望有人告诉我该怎么做,因为这是我需要自己弄清楚的家庭作业的一小部分。但我似乎无法弄清楚如何找到与这个 vma 对应的页面。如果我能找到这些页面,我想我可以检查它们是否有有效的 pfn。

0 投票
2 回答
12042 浏览

operating-system - 多核/多 CPU 机器中的中断如何工作?

我最近开始深入研究低级操作系统编程。我(非常缓慢)目前正在阅读两本较旧的书籍,XINU 和 Build Your Own 32 Bit OS,以及一些优秀的 SO 人在我之前的问题中建议的一些资源,How to get started in operating system development

可能只是我还没有在任何这些资源中遇到过它,但这可能是因为这些资源中的大多数是在无处不在的多核系统之前编写的,但我想知道中断在多核/多处理器系统中是如何工作的。

例如,假设 DMA 想要发出文件读取操作完成的信号。哪个处理器/内核确认已发出中断信号?是启动文件读取的处理器/内核吗?是哪个处理器/内核先到达它?

0 投票
5 回答
5367 浏览

linux - Linux 内核 /proc FIFO/管道

我目前正在尝试创建一个内核模块,该模块将根据内核事件生成数据并将它们推送到文件中。在读到这很糟糕(我同意)之后,我决定将数据放在 /proc 文件中,用户程序可以在必要时从中提取数据会更有意义。然而,这个想法导致了各种各样的问题,特别是何时以及如何清除这个文件。所以我想......“为什么我不在 /proc 中创建一个命名管道并从中读取呢?”

我已经掌握了为 proc 文件设置读取函数和写入函数的一般要点,但我仍然在如何处理这个问题上遇到概念上的问题。也就是说,我将如何编写这样一个函数来获取任意数据并将其从内核写入这样的管道?有谁知道如何将数据从内核空间推送到命名管道?最后,它不一定/proc 文件(特别是如果我这样做是错误的),但这是我得出的结论。然后我必须弄清楚如何从用户空间程序附加到它,但我觉得这是一个单独的问题。

0 投票
3 回答
19248 浏览

linux - 你如何诊断内核oops?

给定一个 linux 内核 oops,您如何诊断问题?在输出中,我可以看到一个堆栈跟踪,它似乎提供了一些线索。是否有任何工具可以帮助找到问题?您遵循哪些基本程序来追踪它?

0 投票
3 回答
1529 浏览

winapi - 在 win32 中找出进程在内核中花费时间的原因

我正在 WinXp VmWare 会话中编译一个 vc8 C++ 项目。在 RedHat VmWare 会话中,它比 gcc3.2 慢得多,所以我正在查看任务管理器。这就是说我的编译过程中有很大一部分花费在内核中。这对我来说听起来不对。

Win32 是否有 strace 的等价物?至少可以让我大致了解正在调用哪些内核函数。可能有一些突出的东西是罪魁祸首。

0 投票
6 回答
105999 浏览

c++ - __gxx_personality_v0 有什么用?

这是来自操作系统开发站点的二手问题,但它让我感到好奇,因为我在任何地方都找不到合适的解释。

使用 gcc 编译和链接独立 C++ 程序时,有时会出现如下链接器错误:

这显然是因为该符号是在 libstdc++ 中定义的,而独立环境中缺少该符号。解决这个问题只需要在某个地方定义这个符号:

这很好,但我不喜欢神奇地起作用的东西......所以问题是,这个符号的目的是什么?

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 投票
5 回答
4034 浏览

linux - 如何从 Linux 内核进行 UDP 广播?

我正在开发一个实验性的Linux 内核模块,所以......

如何从 Linux 内核进行UDP 广播?

0 投票
3 回答
12344 浏览

linux - 如何安排 Makefile 来编译具有多个 .c 文件的内核模块?

如何安排 Makefile 来编译具有多个 .c 文件的内核模块?

这是我当前的 Makefile。它是由KDevelop自动生成的