Quale modello di Raspberry Pi sto usando?


28

C'è un modo per determinare se l'attuale Raspberry Pi è un modello 2 B e 3 con Raspbian Jessie Lite 8.0 ?

Questo perché ho bootstrap.shscritto un particolare in Bash in cui è necessario impostare l'attributo txpowerper un dongle USB Wi-Fi (qui, Raspberry Pi 2) usando un driver per chipset Ralink RT5370 .

Ho impostato gli attributi Wireless usando iwconfig(che, so, è deprecato, ma attualmente fa il lavoro, quindi non lo sto cambiando).

Poiché, in Raspberry Pi 3, il chipset Wi-Fi interno è un bcmchipset basato su che non consente l'esecuzione del comando seguente:

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

Con Raspberry Pi 3 il comando di cui sopra funziona semplicemente rimuovendo dBmdal comando di cui sopra:

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

Vorrei aggiungere un controllo se il modello Raspberry Pi è 2 o 3 usando Bash.

Qualche suggerimento?

Nel caso, qualcuno vuole passare attraverso bootstrap.sh: Bootstrapping per TWIN

Gli appunti

  • Ho verificato che nondBm è necessario , anche nel caso del Raspberry Pi 2 con il chipset Ralink, quindi per non ambiguità si può usare lo stesso comando sia per il Raspberry Pis, sia per il Viz .

    iwconfig wlan0 mode ad-hoc channel 6 essid myadhoc txpower 0
  • È interessante notare che per i dongle USB Wi-Fi esterni è necessario eseguire le seguenti operazioni (per Raspberry Pi 2 ):

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

    mentre per quanto riguarda incorporati moduli Wi-Fi (Raspberry Pi 3) non v'è alcuna necessità di ifconfig up and down. iwconfigFunziona solo il comando semplice .


4
L'approccio migliore è testare la cosa che vuoi fare invece di cercare modelli (come sarà il Raspberry Pi 5?). In questo caso, vedere se esiste un chipset Ralink RT5370 e configurarlo di conseguenza. Allo stesso modo con il driver Wifi integrato.
Thorbjørn Ravn Andersen,



Risposte:


40
cat /proc/device-tree/model

restituisce qualcosa di simile

Raspberry Pi 3 Model B Rev 1.2

21

Per tipo di CPU

Si potrebbe verificare la versione RPI con il comando, uname. Le diverse versioni di RPi hanno architetture CPU diverse. L'RPi 2 ha un arm7, mentre il 3 ha un arm8.

uname -m

Con revisione hardware

Se devi essere più specifico, puoi controllare la voce di revisione dall'output di cat /proc/cpuinfo. Se si desidera esattamente il numero di revisione, è necessario il seguente comando:

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

Numeri di revisione

Questa pagina web ha un utile diagramma che ho copiato qui.

inserisci qui la descrizione dell'immagine


1
Ci sono passato /proc/cpuinfoprima. Sembra l'opzione migliore, dal momento uname -mche non dice molto.
Shan-Desai,

1
@ Shan-Desai: non sono sicuro di averlo visto, prima della modifica, ma ho appena incluso un comando che estrarrà solo le informazioni di revisione dal file proc. Spero che sia d'aiuto.
Jacobm001

1
Sì, ho provato quello che hai menzionato. Il confronto era tra un Pi 2 Modello v1.1 e Pi 3 Modello B, la cosa divertente è che il mio Pi 3 mostra ancora armv7l suuname -m
Shan-Desai

2
Intendi / proc / cpuinfo not / cpu / procinfo
user253751

unameelencherà solo l'architettura di destinazione per cui è stato creato Linux ed è inaffidabile per determinare il tipo di CPU. L'attuale RPI3 Raspbian viene eseguito in modalità a 32 bit. elencherà armv7, se usi un AARCH64( arm64) linux ti dirà armv8, se usi il vecchio raspbian RPI1 dirà armv6.
Crasic,

6

Esistono molti metodi (di varia affidabilità) per determinarlo. Uno dei più completi e affidabili è quello gpio -vche produce il seguente output.

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.

Questo potrebbe essere fatto in modo più elegante scrivendo un semplice programma, usando le funzioni fornite da wiringpi. Questi sono ben documentati e la fonte è prontamente disponibile.

Lo script in /raspberrypi//a/85016/8697 mostra informazioni complete su Pi e OS.


2

Ho creato uno script bash che fornirà le informazioni sul modello in base alla revisione.

Se lo rendi migliore, fammi sapere.

#!/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)"

Un altro se la struttura sarebbe molto più efficiente.
Jacobm001

4
Un'istruzione switch sarebbe migliore.
Shan-Desai,

2

Non ho abbastanza rappresentante per commentare la risposta di @Andy Delgado, ma ecco una versione diversa del suo codice che utilizza alcune nuove funzionalità bash.

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})"
}

A parte: REVISIONSè definito all'interno di una funzione poiché la uso su sshiessh some-host "$(declare -f); check_pi_version"


-2

Modo semplice: dmesg | grep "Machine model:"


Strano, questo non produce nulla quando lo provo!
Riccioli d'oro

@goldilocks Visualizza [Tue Apr 11 15:59:32 2017] Machine model: Raspberry Pi 3 Model B Rev 1.2sul mio Pi. Potrebbe non essere il metodo più efficace.
Milliways,

@Milliways Il motivo per cui non lo fa per me è che il sistema è attivo da troppo tempo. dmesgViene da boot ed è un buffer circolare. Quindi, questa è una metodologia imperfetta.
Riccioli d'oro

@goldilocks Presumibilmente l'OP vuole sapere solo dopo l'avvio. È improbabile che cambi ;-) Esistono quasi certamente metodi migliori per risolvere il problema OP.
Milliways,

la migliore soluzione secondo me. funziona perfettamente su Raspberry Pi 2 e 3, eseguendo Raspbian. L'ho provato su un Pi che funziona da 8 giorni. Le altre soluzioni in questo thread richiedevano nuovi strumenti (gpio) oppure è necessario mappare il codice di revisione della cpu su una tabella di ricerca (e mantenerlo). questo è l'unico comando che ti dice esattamente il nome, cioè Machine model: Raspberry Pi 2 Model B Rev 1.1senza root.
Eugen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.