My attempt at gathering information on how to detect exactly which Raspberry Pi model we are running on for https://github.com/jperkin/node-rpio. The goal is to come up with an optimal way of detecting the host across a wide range of hardware and OS.
Name (Rev) | cpuinfo |
/proc/device-tree/model |
device-tree/soc/ranges |
OS |
---|---|---|---|---|
B (1.0) | 0002 |
Raspberry Pi Model B |
7e000000 20000000 01000000 |
7 |
B (1.0) | 0002 |
Raspberry Pi Model B Rev 1 |
7e000000 20000000 02000000 |
10 |
B (1.0) | 0003 |
Raspberry Pi Model B |
7e000000 20000000 01000000 |
7 |
B (1.0) | 0003 |
Raspberry Pi Model B Rev 1 |
7e000000 20000000 02000000 |
10 |
B+ (1.2) | 0010 |
Raspberry Pi Model B Plus Rev 1.2 |
7e000000 20000000 02000000 |
10 |
CM (1.0) | 0014 |
Raspberry Pi Compute Module Rev 1.0 |
7e000000 20000000 02000000 |
10 |
Zero W (1.1) | 9000c1 |
Raspberry Pi Zero W Rev 1.1 |
7e000000 20000000 02000000 |
9 |
2 B (1.1) | a01041 |
Raspberry Pi 2 Model B Rev 1.1 |
7e000000 3f000000 01000000 |
9 |
2 B (1.1) | a01041 |
Raspberry Pi 2 Model B Rev 1.1 |
7e000000 3f000000 01000000 |
10 |
CM 3 (1.0) | a020a0 |
Raspberry Pi Compute Module 3 Rev 1.0 |
7e000000 3f000000 01000000 |
10 |
CM 3+ (1.0) | a02100 |
Raspberry Pi Compute Module 3 Plus Rev 1.0 |
7e000000 3f000000 01000000 |
10 |
2 B (1.2) | a22042 |
Raspberry Pi 2 Model B Rev 1.2 |
7e000000 3f000000 01000000 |
8 |
3 B (1.2) | a02082 |
Raspberry Pi 3 Model B Rev 1.2 |
7e000000 3f000000 01000000 |
10 |
3 B (1.3) | a020d3 |
Raspberry Pi 3 Model B Plus Rev 1.3 |
7e000000 3f000000 01000000 |
9 |
4 B 2GB (1.1) | b03111 |
Raspberry Pi 4 Model B Rev 1.1 |
7e000000 00000000 fe000000 |
10 |
4 B 4GB (1.1) | c03111 |
Raspberry Pi 4 Model B Rev 1.1 |
7e000000 00000000 fe000000 |
10 |
4 B 8GB (1.4) | d03114 |
Raspberry Pi 4 Model B Rev 1.4 |
7e000000 00000000 fe000000 |
20 |
- Is there any way to detect rev 1.0 vs rev 2.0 with the original Model B when running 7? Only newer releases identify the revision in
/proc/device-tree/model
. Just assume/proc/cpuinfo?
.
The following script can be used to generate the data (assuming Raspbian or similar).
#!/bin/bash
. /etc/os-release
printf "cpuinfo:\t%s\n" "$(awk '/^Revision/ { print $NF }' /proc/cpuinfo)"
printf "dtmodel:\t%s\n" "$(</proc/device-tree/model)"
set -- $(xxd -l 16 -g 4 < /proc/device-tree/soc/ranges)
printf "socranges:\t%s %s %s\n" $2 $3 $4
printf "os:\t\t%s\n" "$VERSION_ID"
Thanks both!