问题标签 [kmalloc]

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 投票
1 回答
1504 浏览

memory - 在最新内核中使用 GFP_ZERO 的“正确”方法是什么?

我发现在 linux 3.0+GFP_ZERO上不再在标头中定义。

我在 gfp.h 中发现的只是,

我已经检查了那些“导出的”位掩码,一次使用GFP_ZERO

作者说Do not use this directly,那么,我应该如何将页面归零,

kmalloc + memset我现在唯一的选择吗?

0 投票
0 回答
359 浏览

c - 禁用oom Killer会影响kmalloc()分配的区域吗?

我的 Linux 内核版本是 2.6.34.13
CPU 是 Powerpc。

我想在用户进程和内核模块中完全禁用 OOM-killer。

通过配置以下参数,我禁用了 oom 杀手。

vm.overcommit_memory = 2
vm.overcommit_ratio = 100

在这种情况下,malloc()返回可用地址,直到分配了所有(物理内存 + 交换)区域。如果所有区域都已分配,它将返回 NULL 并且 OOM 杀手将不会执行。

但是,kmalloc()使用 GFP_KERNEL 参数怎么样?如果 ZONE_NORMAL 区域被完全分配,kmalloc()返回 NULL?和OOM杀手不执行?

0 投票
0 回答
254 浏览

c - dentry_open() 中的 kmalloc:内核恐慌

我正在研究内核 linux 2.6.34.14。

我在结构文件中(在 include/linux/fs.h 中)添加了一个指向之前定义的结构的指针,以这种方式:

之后,我需要在 open.c 中分配我的结构并在 dentry_open (fs/open.c) 中执行此操作。

用这段代码我想说:如果调用 open 时有一个特定的标志,那么在结构中分配结构和缓冲区。

问题如下:

我编译了新内核,一切都很好。我尝试进入该内核,但收到消息“内核恐慌 - 未同步:试图杀死 init”。

为什么?我哪里错了?

0 投票
1 回答
1995 浏览

c - kmalloc() 可以返回无效内存吗?

我正在编写一个 linux 内核模块,我在其中实现了一个链表。我知道 linux 内核中有一个列表 API,但是当我实现它时,我不知道它是如何实现的,它使用 kmalloc() 处理原始指针。运行几个小时后,内核崩溃,并且在崩溃日志中显示“General Protection Fault”。日志还显示它是从我的搜索链表功能中发生的。显然搜索功能如下所示,没有逻辑错误。

很明显,插入函数在逻辑上也是完美无缺的。由于一般保护错误通常发生在发生无效内存访问并且我从未使用过由kmalloc(). 现在我的问题是,如果我使用由 kmalloc 分配的内存,那么有可能使用无效内存,我应该在使用前检查吗?

崩溃日志的分数在这里:

插入时,我检查了 kmalloc 分配的内存:

0 投票
3 回答
100 浏览

c - 无法访问结构数据

在头文件中:

在内核模块中,

// 初始化

但是,当我们尝试:

我们会得到这个错误:error: incompatible types when assignment to type 'contain' from type 'void *'</p>

上述错误由@SunEric 和@Sakthi Kumar 解决。

现在看来还可以。它会构建,但是当它运行到该部分时,它会声明内核堆栈已损坏。尝试执行后:

[更新:已解决]

@Sakthi Kumar 通过以下方式解决了它:

0 投票
2 回答
393 浏览

c - 在c中将内存声明为结构

我在一个文件中有一个结构 abc

我在其他文件中使用这个结构如下: struct abc *t = kmalloc(sizeof(struct abc)); kmalloc 相当于 malloc

然后出现以下错误:

我哪里错了?

0 投票
1 回答
3157 浏览

c - 在设备驱动程序中使用 kmalloc

0 投票
1 回答
387 浏览

memory-management - kmallc 和 vmalloc 返回逻辑地址?

虽然 kmalloc 和 vmalloc 上已经有很多线程在运行,但我没有得到确切的答案,所以我把它放在这里。

据我所知,

kmalloc :它是内核 API,它分配物理以及虚拟连续的内存。

vmalloc :它是内核 API,它分配物理上不连续但实际上是连续的内存。

现在我的问题是:在这两种情况下(kmalloc 或 vmalloc)地址或说两个 API 返回的指针是逻辑地址正确吗?

在 linux 内核中,内存管理对我来说一直是灰色的部分,所以如果我的理解有误,请纠正我。

0 投票
1 回答
245 浏览

c - 将值列表传递给内核空间

我正在做一个 linux 项目。我需要从用户空间程序将整数值列表传递给内核。我为此实现了一个系统调用。在用户空间程序中,我有以下代码。的值num_values是从命令行参数获得的。

然后,我调用了我的系统调用,

内核中的系统调用' set_wcet_val'实现如下:

}

值“ num_values”已正确复制到“ index”。问题是我检查时只打印了前两个数据dmesg。如果num_values是 3,我将得到第三个数据的随机正值。如果num_values为 4,则第三个数据为随机正值,第四个数据为负值。对于num_values> 4,来自第三个数据的所有值都为零。在所有情况下,只有前两个值被正确复制。这种奇怪行为的原因是什么?

0 投票
2 回答
378 浏览

memory-management - 为什么物理上连续的内存区域比虚拟连续的内存更有效。?

据说物理连续内存区域比虚拟连续内存更有效,因为 Robert Love 的书说内核不需要为物理连续内存设置页表条目。

但是内核不是在所有情况下都需要页表吗?因此,在虚拟连续内存的情况下,它需要创建哪些页表条目。