Intel x86では、CPUID命令でCPUの種類を得ることができるが、ARMには存在しない。
ARMではシステム制御コプロセッサのMain ID Register(MIDR)から取得する。
おまけで、System Control Register(SCTLR)も取得してみる。
pi@raspberrypi:~/armcpuinfo $ make make -C /lib/modules/5.4.83-v7+/build M=/home/pi/armcpuinfo modules make[1]: Entering directory '/home/pi/linux' CC [M] /home/pi/armcpuinfo/armcpuinfo.o Building modules, stage 2. MODPOST 1 modules CC [M] /home/pi/armcpuinfo/armcpuinfo.mod.o LD [M] /home/pi/armcpuinfo/armcpuinfo.ko make[1]: Leaving directory '/home/pi/linux'
pi@raspberrypi:~/armcpuinfo $ sudo insmod armcpuinfo.ko pi@raspberrypi:~/armcpuinfo $ sudo rmmod armcpuinfo pi@raspberrypi:~ $ dmesg | tail [ 4245.068818] armcpuinfo: loading out-of-tree module taints kernel. [ 4245.069367] armcpuinfo_init [ 4245.069379] MIDR = 410fd034 [ 4245.069388] SCTLR = 10c5383d [ 4255.571746] armcpuinfo_exit
手元のラズパイは32bitだが、64bitのAArch64では、アクセス方法が異なる。
それぞれ、アクセスするレジスタが、Main ID Register, EL1(MIDR_EL1)と、
System Control Register, EL1(SCTLR_EL1) となり、アクセス命令も変わる。
※Raspberry PiはRaspberry Pi財団の登録商標です。