Human Readable Decoding of /proc/cpuinfo for Arm Processors

One of the most common way to get CPU information is to check the content of /proc/cpuinfo. For example, this is the output I get from running the command on NanoPi NEO (Allwinner H3) board:


Many fields are self-explanatory, but what about CPU implementer and CPU part numbers? Those are values stored in Arm’s CPUID Base Register, and 0x41 looks up to Arm implementer, while 0xc07 refers to Cortex A7. But I had to look it up to find out.

One solution would be to decode those values in the kernel, but the developers won’t do that probably because it may break user-space programs that rely on hexadecimal values. So instead,

In the meantime, I could try it out by compiling the code myself:


Let’s now run our freshly compiled lscpu to see if an Arm Cortex A7 processor is detected:


It works as ARM Cortex-A7 revision 5 is shown. It does not follow Arm’s new lower case logo / name, but who cares 🙂 We can see most of the information provided by /proc/cpuinfo and more, but the BogoMIPS number is different, and the last three lines with Hardware, Revision and Serial are not shown.

It’d be particular interesting to test it on products or boards with processors featuring custom Arm cores such as you should get values like “Qualcomm Krait” or “Marvell PJ4/PJ4b”.

Share this:

Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress

ROCK Pi 4C Plus
Subscribe
Notify of
guest
The comment form collects your name, email and content to allow us keep track of the comments placed on the website. Please read and accept our website Terms and Privacy Policy to post a comment.
15 Comments
oldest
newest
manuti
6 years ago

Nice, really interesting to check all this Android TV with Amlogic SoC and know info without open the box.

Jason
Jason
5 years ago

you could try installing the app Termux, which simulates a Debian-type Linux system. It works on Android 5.1 and up.

theguyuk
theguyuk
6 years ago

Perhaps Linux and Android could take example from Windows and have a systems device program built in, to show hardware info.

I expect such a suggestion to have command line enthusiasts spitting their dummies out. Yet this is 2018, coding by hand in hex, moved on, the command line community, need to move on as well. The word of computing has got big and the one size fits all model is to anal.

Sandbender
Sandbender
6 years ago
CampGareth
CampGareth
6 years ago

@theguyuk
Though we can make a human-readable readout available, it can never be the only thing available. Ultimately everything’s still a bunch of 1s and 0s so some part of my PC can only process the hexadecimal form.

fossxplorer
fossxplorer
6 years ago

Ran it on a RK3328 SoC:
# ./lscpu
Architecture: aarch64
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
Vendor ID: ARM
Model: 4
Model name: Cortex-A53
Stepping: r0p4
CPU max MHz: 1296.0000
CPU min MHz: 408.0000
BogoMIPS: 48.00
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32
root@rock64:~/tmp/util-linux#

tkaiser
tkaiser
6 years ago

Weird, a tool suited for human beings displays this BogoMIPS BS (especially on ARM): en.wikipedia.org/wiki/BogoMips#Timer-based_delays

@fossxplorer
If you compare the Flags above with the following is this the same? Which kernel version are you running?

Joe Bleau
Joe Bleau
6 years ago

r-pi 3 B: Architecture: armv7l Byte Order: Little Endian CPU(s): 4 On-line CPU(s) list: 0-3 Thread(s) per core: 1 Core(s) per socket: 4 Socket(s): 1 Vendor ID: ARM Model: 4 Model name: Cortex-A53 Stepping: r0p4 CPU max MHz: 1200.0000 CPU min MHz: 600.0000 BogoMIPS: 76.80 Flags: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 uname -a: Linux pi7 4.9.59-v7+ #1047 SMP Sun Oct 29 12:19:23 GMT 2017 armv7l GNU/Linux grep ‘^Features’ /proc/cpuinfo: Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 Features : half thumb… Read more »

Steve G
Steve G
6 years ago

Sheevaplug Armv5 # cat /proc/cpuinfo processor: 0 model name: Feroceon 88FR131 rev 1 (v5l) BogoMIPS: 400.00 Features: swp half thumb fastmult edsp CPU implementer: 0x56 CPU architecture: 5TE CPU variant: 0x2 CPU part: 0x131 CPU revision: 1 Hardware: Marvell Kirkwood (Flattened Device Tree) Revision: 0000 Serial: 0000000000000000 root@buster:/opt/util-linux# uname -a Linux buster 4.14.0-3-marvell #1 Debian 4.14.13-1 (2018-01-14) armv5tel GNU/Linux root@buster:/opt/util-linux# ./lscpu Architecture: armv5tel Byte Order: Little Endian CPU(s): 1 On-line CPU(s) list: 0 Thread(s) per core: 1 Core(s) per socket: 1 Socket(s): 1 Vendor ID: Marvell Model: 1 Model name: Feroceon 88FR131 Stepping: 0x2 CPU max MHz: 1200.0000 CPU min… Read more »

Steve G
Steve G
6 years ago

QEMU-aarch64 [Cortex53] root@busteraarch64:/opt/src/util-linux# cat /proc/cpuinfo processor: 0 BogoMIPS: 125.00 Features: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid CPU implementer: 0x41 CPU architecture: 8 CPU variant: 0x0 CPU part: 0xd03 CPU revision: 4 processor: 1 BogoMIPS: 125.00 Features: fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid CPU implementer: 0x41 CPU architecture: 8 CPU variant: 0x0 CPU part: 0xd03 CPU revision: 4 root@busteraarch64:/opt/src/util-linux# uname -a Linux busteraarch64 4.14.0-3-arm64 #1 SMP Debian 4.14.13-1 (2018-01-14) aarch64 GNU/Linux root@busteraarch64:/opt/src/util-linux# ./lscpu Architecture: aarch64 Byte Order: Little Endian CPU(s): 2 On-line CPU(s) list: 0,1 Thread(s) per core: 1 Core(s) per socket: 2 Socket(s): 1… Read more »

Riku Voipio
Riku Voipio
6 years ago

For the compilation instrucions, you can build just lscpu from the source tree:

make lscpu

util-linux 2.32 was just released, so you may want to nag your favourite distros to update util-linux.

tkaiser
tkaiser
6 years ago

@Riku Voipio
What @Steve G posted above:

Do you consider this being a bug?

Riku Voipio
Riku Voipio
6 years ago

@tkaiser
That doesn’t say “0 CPU(s) online”, but that “cpu number 0 is online”.

Jason
Jason
5 years ago

Here is the result from my Odroid XU3 (Samsung Exynos 5422 SOC)

$ ./lscpu
Architecture: armv7l
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 2
Vendor ID: ARM
Model: 3
Model name: Cortex-A7
Stepping: r0p3
CPU max MHz: 1800.0000
CPU min MHz: 200.0000
BogoMIPS: 36.00
Flags: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm

Khadas VIM4 SBC