Linux内核怎么生成cpuinfo的,Linux内核如何获取有关处理器和内核的信息?

简短的回答

内核采用专用CPU指令cpuid并在内部保存结果结构 - cpuinfo_x86用于x86

龙答案

内核源为y我们最好的朋友。 从入口点开始 - 文件/proc/cpuinfo。 作为任何proc文件,它必须在内核的某个地方创建,并用一些file_operations声明。这在fs/proc/cpuinfo.c完成。有趣的部分是seq_open,使用参考一些cpuinfo_op。此操作在arch/x86/kernel/cpu/proc.c中声明,我们在其中看到一些show_cpuinfo函数。该功能位于line 57的同一个文件中。

在这里你可以看到声明的第一行作为struct cpuinfo_x86

64 seq_printf(m, "processor\t: %u\n"

65 "vendor_id\t: %s\n"

66 "cpu family\t: %d\n"

67 "model\t\t: %u\n"

68 "model name\t: %s\n",

69 cpu,

70 c->x86_vendor_id[0] ? c->x86_vendor_id : "unknown",

71 c->x86,

72 c->x86_model,

73 c->x86_model_id[0] ? c->x86_model_id : "unknown");

结构c。该结构在arch/x86/include/asm/processor.h中声明。如果你搜索的引用上的结构,你会发现功能cpu_detect和函数调用函数cpuid最后将其解析为native_cpuid,看起来像这样:

189 static inline void native_cpuid(unsigned int *eax, unsigned int *ebx,

190 unsigned int *ecx, unsigned int *edx)

191 {

192 /* ecx is often an input as well as an output. */

193 asm volatile("cpuid"

194 : "=a" (*eax),

195 "=b" (*ebx),

196 "=c" (*ecx),

197 "=d" (*edx)

198 : "" (*eax), "2" (*ecx)

199 : "memory");

200 }

在这里,你看到的汇编指令cpuid。而这个小东西确实有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值