gpt4 book ai didi

linux - 什么 linux 内核代码创建/sys/devices/system/cpu/cpuX?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:12 27 4
gpt4 key购买 nike

我正在为 microblaze 架构开发一个 cpufreq 驱动程序(作为可加载的内核模块)。我有一些能够缩放系统时钟的 FPGA 逻辑,它工作得很好。我按照 Documentation/cpu-freq/cpu-drivers.txt 中的信息查看了 blackfin cpufreq 驱动程序中的模型。

我还对 arch/microblaze/Kconfig 进行了必要的更改,以便将 cpufreq 选项内置到内核(而不是模块)中。

当我第一次加载驱动程序时,cpufreq_register_driver() 返回 -ENODEV,这意味着它找不到 CPU。我将驱动程序标志设置为 CPUFREQ_STICKY 并且能够插入模块。

但是,此时我意识到 /sys/devices/system/cpu/cpu0 不存在(尽管 /sys/devices/system/cpu/cpufreq 在那里)。那么,这是为什么呢?内核代码的哪一部分负责创建该目录?

最佳答案

我通过查看 drivers/cpufreq/中的 cpufreq_cpu_callback() 发现了 /sys/devices/system/cpu/cpuX sysfs 条目的创建位置cpufreq.c。这调用了 get_cpu_sysdev(),我认为这是我正在寻找的元素。

这个调用在 drivers/base/cpu.c 中定义,我还注意到其中将 cpu 特定的 sysdev 条目放在一起的代码; 注册_cpu()。对于大多数架构,这在 arch/${ARCH}/kernel/setup.c 中,我以 blackfin 代码为例。

DEFINE_PER_CPU(struct cpu, cpu_data);
static int __init topology_init(void)
{
unsigned int cpu;
for_each_possible_cpu(cpu) {
register_cpu(&per_cpu(cpu_data, cpu), cpu);
}
return 0;
}

将这段代码添加到 arch/microblaze/kernel/setup.c 后,我现在有了我需要的目录,我可以使用不同的调控器来与我的 cpufreq 通信司机。现在我只需要让 sleep 1 以 1/3 的时钟速率花费 1 秒而不是 3 秒!

关于linux - 什么 linux 内核代码创建/sys/devices/system/cpu/cpuX?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13132013/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com