小编0x0*_*7FC的帖子

Linux内核如何确定__init调用的顺序?

__init在驱动程序module_init和内核的其他函数中,内核中有许多调用实例.我怀疑的是内核如何确定__init调用的顺序.更重要的是,它如何确定驱动程序module_init调用的顺序?

linux kernel-module linux-kernel

8
推荐指数
1
解决办法
3432
查看次数

C中整数的大小

可能重复:
int的大小是否取决于编译器和/或处理器?

Integer的大小是依赖于编译器还是依赖于OS或处理器?如果我在32位机器或64位机器上运行的32位操作系统或64位操作系统上使用gcc怎么办(在这种情况下只有64位操作系统).

c int gcc

4
推荐指数
2
解决办法
3万
查看次数

如何在cpufreq.c文件中扩展"for_each_possible_cpu"?

我正在浏览driver/cpufreq/cpufreq.c以了解它是如何工作的.我遇到了一段我无法理解的代码.

cpufreq_core_init:

for_each_possible_cpu(cpu) {
        per_cpu(cpufreq_policy_cpu, cpu) = -1;
        init_rwsem(&per_cpu(cpu_policy_rwsem, cpu));
}
Run Code Online (Sandbox Code Playgroud)

当我浏览定义的宏时,

#define for_each_possible_cpu(cpu) for_each_cpu((cpu), cpu_possible_mask)

#define per_cpu(var, cpu) \
        (*SHIFT_PERCPU_PTR(&(var), per_cpu_offset(cpu)))

#define init_rwsem(sem)                                         \
do {                                                            \
        static struct lock_class_key __key;                     \
                                                                \
        __init_rwsem((sem), #sem, &__key);                      \
} while (0)
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 如何for_each_possible_cpu扩展?
  2. 为什么还有两个人#defines在里面打电话?
  3. 为什么per_cpu输出等于-1?

c linux-device-driver linux-kernel

3
推荐指数
2
解决办法
1492
查看次数

工作队列的这些标志是什么意思?

在研究工作队列时,我遇到了内核中定义的工作队列标志和常量。我有以下疑问,我无法理解。

  1. 排水和救援人员在这里到底是什么意思?

    WQ_DRAINING             = 1 << 6, /* internal: workqueue is draining */
    WQ_RESCUER              = 1 << 7, /* internal: workqueue has rescuer */
    
    Run Code Online (Sandbox Code Playgroud)
  2. 为未绑定工作队列定义的 CPU 数量是 4。如果我有一个八核处理器会怎样。无界 wq 将如何绑定到 cpus。他们如何决定运行哪些 CPU,因为他们现在有 8 个 cpu 而不是 4 个 cpu。是这样,它们可以在 8 个或仅 4 个特定 cpu 中的任何一个上运行吗?

    WQ_MAX_UNBOUND_PER_CPU = 4, /* 4 * #cpus for unbound wq */

c scheduled-tasks linux-kernel interrupt-handling workqueue

3
推荐指数
1
解决办法
1542
查看次数

当RAM完全填满并且新进程想要在嵌入式设备上运行时会发生什么?

我想知道当我尝试在没有交换分区或交换文件的运行Linux的嵌入式主板上运行新进程时会发生什么.通常对于PC上的Linux,它会从RAM中换出页面,从而为新进程释放内存.现在,嵌入式主板(例如任何开发板),运行没有交换的Linux想要运行一个新的进程,RAM完全满了,它如何运行一个新的进程?

这些电路板将具有寿命有限的闪存,因此即使我们实施交换也不能频繁交换.

linux embedded memory-management

2
推荐指数
1
解决办法
1796
查看次数