¿Qué modelo de Raspberry Pi estoy usando?

28

¿Hay alguna manera de determinar si el Raspberry Pi actual es un Modelo 2 B y 3 con Raspbian Jessie Lite 8.0 ?

Esto se debe a que tengo un particular bootstrap.shescrito en Bash donde necesita establecer el atributo txpowerpara un dongle USB Wi-Fi (aquí, Raspberry Pi 2) usando un controlador de chipset Ralink RT5370 .

Configuré los atributos inalámbricos usando iwconfig(lo cual, sé que está en desuso, pero actualmente hace el trabajo, así que no lo estoy cambiando).

Dado que, en Raspberry Pi 3, el conjunto de chips de Wi-Fi interno es un conjunto bcmde chips basado en el que no permitirá que se ejecute el siguiente comando:

iwconfig wlan0 mode ad-hoc channel 6 essid myadhoc txpower 0dBm

Con Raspberry Pi 3, el comando mencionado anteriormente funciona simplemente eliminando dBmdel comando mencionado anteriormente:

iwconfig wlan0 mode ad-hoc channel 6 essid myadhoc txpower 0

Me gustaría agregar un cheque si el modelo Raspberry Pi es 2 o 3 usando Bash.

¿Alguna pista?

En caso de que alguien quiera pasar por bootstrap.sh: Bootstrapping for TWIN

Notas

  • Verifiqué que nodBm es necesario , también en el caso de Raspberry Pi 2 con el chipset Ralink , por lo tanto, para no ser ambiguos, se puede usar el mismo comando para ambos Raspberry Pis viz.

    iwconfig wlan0 mode ad-hoc channel 6 essid myadhoc txpower 0
  • Es interesante observar que para los dongles USB con Wi-Fi externo, se debe realizar lo siguiente (para Raspberry Pi 2 ):

    ifconfig wlan0 down
    iwconfig wlan0 mode ad-hoc channel 6 essid myadhoc txpower 0
    ifconfig wlan0 up

    mientras que para los módulos de Wi-Fi incorporados (Raspberry Pi 3) no hay necesidad de hacerlo ifconfig up and down. Solo funciona el iwconfigcomando directo .

Shan-Desai
fuente
44
El mejor enfoque es probar lo que desea hacer en lugar de buscar modelos (¿cómo se verá la Raspberry Pi 5?). En este caso, vea si hay un Chipset Ralink RT5370 y configúrelo en consecuencia. De la misma manera con el controlador Wifi incorporado.
Thorbjørn Ravn Andersen

Respuestas:

40
cat /proc/device-tree/model

devuelve algo como

Raspberry Pi 3 Model B Rev 1.2
SBF
fuente
21

Por tipo de CPU

Se puede comprobar la versión RP _ con el comando, uname. Las diferentes versiones de RPi tienen diferentes arquitecturas de CPU. El RPi 2 tiene un brazo7, mientras que el 3 tiene un brazo8.

uname -m

Por revisión de hardware

Si necesita ser más específico, puede verificar la entrada de revisión desde la salida de cat /proc/cpuinfo. Si solo desea precisar el número de revisión, el siguiente comando debería hacerlo:

cat /proc/cpuinfo | grep 'Revision' | awk '{print $3}'

Números de revisión

Esta página web tiene un gráfico útil que he copiado aquí.

ingrese la descripción de la imagen aquí

Jacobm001
fuente
1
Lo atravesé /proc/cpuinfoantes. Parece la mejor opción, ya uname -mque no dice mucho.
Shan-Desai
1
@ Shan-Desai: no estoy seguro si lo viste antes de la edición, pero acabo de incluir un comando que extraerá solo la información de revisión del archivo de proceso. Espero que ayude.
Jacobm001
1
Sí, probé el que mencionaste. La comparación fue entre un v1.1 Pi Modelo 2 y Pi 3 Modelo B lo curioso sin embargo es que mis Pi 3 sigue mostrando armv7l sobreuname -m
Shan-Desai
2
Te refieres a / proc / cpuinfo not / cpu / procinfo
user253751
unamesolo enumerará la arquitectura de destino para la que se creó Linux, y no es confiable para determinar el tipo de CPU. Raspbian RPI3 actual se ejecuta en modo de 32 bits. enumerará armv7, si usa un AARCH64( arm64) linux, dirá armv8, si usa el antiguo raspbian RPI1, dirá armv6.
crasic
6

Existen muchos métodos (de confiabilidad variable) para determinar esto. Uno de los más completos y confiables es el gpio -vque produce el siguiente resultado.

gpio version: 2.44
Copyright (c) 2012-2017 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

Raspberry Pi Details:
  Type: Pi 3, Revision: 02, Memory: 1024MB, Maker: Embest 
  * Device tree is enabled.
  *--> Raspberry Pi 3 Model B Rev 1.2
  * This Raspberry Pi supports user-level GPIO access.

Esto podría hacerse de manera más elegante escribiendo un programa simple, utilizando las funciones proporcionadas por wiringpi. Estos están bien documentados y la fuente está fácilmente disponible.

El script en /raspberrypi//a/85016/8697 muestra información completa sobre su Pi y OS.

Milliways
fuente
2

Creé un script bash que proporcionará la información del modelo basada en la Revisión.

Si lo mejora, avíseme.

#!/bin/bash
# which_pi.bash
# BASH Script to display Pi Hardware version based on info found in /proc/cpuinfo
# Andy Delgado - April 11, 2017
# Info gleaned from
# http://www.raspberrypi-spy.co.uk/2012/09/checking-your-raspberry-pi-board-version

REVCODE=$(sudo cat /proc/cpuinfo | grep 'Revision' | awk '{print $3}' | sed 's/^ *//g' | sed 's/ *$//g')

if [ "$REVCODE" = "0002" ]; then
    PIMODEL="Raspberry Pi Model B Rev 1, 256 MB RAM"
fi

if [ "$REVCODE" = "0003" ]; then
    PIMODEL="Raspberry Pi Model B Rev 1 ECN0001, 256 MB RAM"
fi

if [ "$REVCODE" = "0004" ]; then
    PIMODEL="Raspberry Pi Model B Rev 2, 256 MB RAM"
fi

if [ "$REVCODE" = "0005" ]; then
    PIMODEL="Raspberry Pi Model B Rev 2, 256 MB RAM"
fi

if [ "$REVCODE" = "0006" ]; then
    PIMODEL="Raspberry Pi Model B Rev 2, 256 MB RAM"
fi

if [ "$REVCODE" = "0007" ]; then
    PIMODEL="Raspberry Pi Model A, 256 MB RAM"
fi

if [ "$REVCODE" = "0008" ]; then
    PIMODEL="Raspberry Pi Model A, 256 MB RAM"
fi

if [ "$REVCODE" = "0009" ]; then
    PIMODEL="Raspberry Pi Model A, 256 MB RAM"
fi

if [ "$REVCODE" = "000d" ]; then
    PIMODEL="Raspberry Pi Model B Rev 2, 512 MB RAM"
fi

if [ "$REVCODE" = "000e" ]; then
    PIMODEL="Raspberry Pi Model B Rev 2, 512 MB RAM"
fi

if [ "$REVCODE" = "000f" ]; then
    PIMODEL="Raspberry Pi Model B Rev 2, 512 MB RAM"
fi

if [ "$REVCODE" = "0010" ]; then
    PIMODEL="Raspberry Pi Model B+, 512 MB RAM"
fi

if [ "$REVCODE" = "0013" ]; then
    PIMODEL="Raspberry Pi Model B+, 512 MB RAM"
fi

if [ "$REVCODE" = "900032" ]; then
    PIMODEL="Raspberry Pi Model B+, 512 MB RAM"
fi

if [ "$REVCODE" = "0011" ]; then
    PIMODEL="Raspberry Pi Compute Module, 512 MB RAM"
fi

if [ "$REVCODE" = "0014" ]; then
    PIMODEL="Raspberry Pi Compute Module, 512 MB RAM"
fi

if [ "$REVCODE" = "0012" ]; then
    PIMODEL="Raspberry Pi Model A+, 256 MB RAM"
fi

if [ "$REVCODE" = "0015" ]; then
    PIMODEL="Raspberry Pi Model A+, 256 MB or 512 MB RAM"
fi

if [ "$REVCODE" = "a01041" ]; then
    PIMODEL="Raspberry Pi 2 Model B v1.1, 1 GB RAM"
fi

if [ "$REVCODE" = "a21041" ]; then
    # a21041 (Embest, China)
    PIMODEL="Raspberry Pi 2 Model B v1.1, 1 GB RAM"
fi

if [ "$REVCODE" = "a22042" ]; then
    PIMODEL="Raspberry Pi 2 Model B v1.2, 1 GB RAM"
fi

if [ "$REVCODE" = "90092" ]; then
    PIMODEL="Raspberry Pi Zero v1.2, 512 MB RAM"
fi

if [ "$REVCODE" = "90093" ]; then
    PIMODEL="Raspberry Pi Zero v1.3, 512 MB RAM"
fi

if [ "$REVCODE" = "0x9000C1" ]; then
    PIMODEL="Raspberry Pi Zero W, 512 MB RAM"
fi

if [ "$REVCODE" = "a02082" ]; then
    PIMODEL="Raspberry Pi 3 Model B, 1 GB RAM"
fi

if [ "$REVCODE" = "a22082" ]; then
    PIMODEL="Raspberry Pi 3 Model B, 1 GB RAM"
fi

echo "$PIMODEL ($REVCODE)"
Andy Delgado
fuente
Una estructura más si fuera mucho más eficiente.
Jacobm001
44
Una declaración de cambio sería mejor.
Shan-Desai
2

No tengo suficiente representante para comentar sobre la respuesta de @Andy Delgado, pero heres una versión diferente de su código usando algunas características de bash más nuevas.

function check_pi_version() {
  local -r REVCODE=$(awk '/Revision/ {print $3}' /proc/cpuinfo)
  local -rA REVISIONS=(
    [0002]="Model B Rev 1, 256 MB RAM"
    [0003]="Model B Rev 1 ECN0001, 256 MB RAM"
    [0004]="Model B Rev 2, 256 MB RAM"
    [0005]="Model B Rev 2, 256 MB RAM"
    [0006]="Model B Rev 2, 256 MB RAM"
    [0007]="Model A, 256 MB RAM"
    [0008]="Model A, 256 MB RAM"
    [0009]="Model A, 256 MB RAM"
    [000d]="Model B Rev 2, 512 MB RAM"
    [000e]="Model B Rev 2, 512 MB RAM"
    [000f]="Model B Rev 2, 512 MB RAM"
    [0010]="Model B+, 512 MB RAM"
    [0013]="Model B+, 512 MB RAM"
    [900032]="Model B+, 512 MB RAM"
    [0011]="Compute Module, 512 MB RAM"
    [0014]="Compute Module, 512 MB RAM"
    [0012]="Model A+, 256 MB RAM"
    [0015]="Model A+, 256 MB or 512 MB RAM"
    [a01041]="2 Model B v1.1, 1 GB RAM"
    [a21041]="2 Model B v1.1, 1 GB RAM"
    [a22042]="2 Model B v1.2, 1 GB RAM"
    [90092]="Zero v1.2, 512 MB RAM"
    [90093]="Zero v1.3, 512 MB RAM"
    [0x9000C1]="Zero W, 512 MB RAM"
    [a02082]="3 Model B, 1 GB RAM"
    [a22082]="3 Model B, 1 GB RAM"
  )

  echo "Raspberry Pi ${REVISIONS[${REVCODE}]} (${REVCODE})"
}

Aparte: REVISIONSse define dentro de una función ya que la uso sobre sshiessh some-host "$(declare -f); check_pi_version"

Takle
fuente
-2

Manera simple : dmesg | grep "Machine model:"

lemassykoi
fuente
¡Extraño, esto no genera nada cuando lo intento!
Ricitos de oro
@goldilocks Muestra [Tue Apr 11 15:59:32 2017] Machine model: Raspberry Pi 3 Model B Rev 1.2en mi Pi. Puede no ser el método más robusto.
Milliways
@Milliways La razón por la que no hace esto por mí es que el sistema ha estado funcionando demasiado tiempo. Eso es de arranque, y dmesges un búfer circular. Por lo tanto, esta es una metodología defectuosa.
Ricitos de oro
@goldilocks Presumiblemente, el OP solo quiere saber después del arranque. Es poco probable que cambie ;-) Es casi seguro que hay mejores métodos para resolver el problema de OP.
Milliways
La mejor solución en mi opinión. funciona perfectamente en Raspberry Pi 2 y 3, ejecutando Raspbian. Lo probé en un Pi que funciona desde hace 8 días. Las otras soluciones en este hilo requieren nuevas herramientas (gpio) o debe asignar el código de revisión de la CPU a una tabla de búsqueda (y mantenerlo). ese es el único comando que le dice exactamente el nombre, es decir Machine model: Raspberry Pi 2 Model B Rev 1.1, sin root también.
Eugen