Qual modelo de Raspberry Pi eu estou executando?

28

Existe uma maneira de determinar se o atual Raspberry Pi é um 2 modelo B e 3 com o Raspbian Jessie Lite 8.0 ?

Isso ocorre porque eu tenho um documento específico bootstrap.shescrito em Bash onde ele precisa definir o atributo txpowerpara um dongle USB Wi-Fi (aqui, Raspberry Pi 2) usando um driver de chipset Ralink RT5370 .

Defino os atributos Wireless usando iwconfig(que, sei, está obsoleto, mas atualmente ele faz o trabalho, por isso não o estou alterando).

Como no Raspberry Pi 3, o chipset Wi-Fi interno é um bcmchipset baseado em que não permitirá a execução do seguinte comando:

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

Com o Raspberry Pi 3, o comando mencionado acima funciona apenas removendo dBmo comando mencionado acima:

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

Gostaria de adicionar uma verificação se o modelo Raspberry Pi é 2 ou 3 usando o Bash.

Alguma dica?

Caso alguém queira passar pelo bootstrap.sh: Bootstrapping for TWIN

Notas

  • Eu verifiquei que nãodBm é necessário , também no caso do Raspberry Pi 2 com o chipset Ralink, portanto, por não ambiguidade, pode-se usar o mesmo comando para o viz Raspberry Pis .

    iwconfig wlan0 mode ad-hoc channel 6 essid myadhoc txpower 0
  • É interessante notar que, para dongles USB Wi-Fi externos, é necessário executar o seguinte (para Raspberry Pi 2 ):

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

    enquanto que para os módulos Wi-Fi embutido (framboesa Pi 3) não é nenhuma necessidade para ifconfig up and down. Apenas o iwconfigcomando direto funciona.

Shan-Desai
fonte
4
A melhor abordagem é testar o que você deseja fazer, em vez de procurar modelos (como será o Raspberry Pi 5?). Nesse caso, verifique se há um chipset Ralink RT5370 e configure-o de acordo. Da mesma forma com o driver Wifi incorporado.
Thorbjørn Ravn Andersen
Possível duplicata da versão do SO instalada
Milliways

Respostas:

40
cat /proc/device-tree/model

retorna algo como

Raspberry Pi 3 Model B Rev 1.2
SBF
fonte
21

Por tipo de CPU

Você pode verificar a versão RPi com o comando uname,. As diferentes versões do RPi possuem arquiteturas de CPU diferentes. O RPi 2 tem um braço7, enquanto o 3 tem um braço8.

uname -m

Por revisão de hardware

Se você precisar ser mais específico, poderá verificar a entrada de revisão na saída de cat /proc/cpuinfo. Se você deseja exatamente o número da revisão, o seguinte comando deve ser feito:

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

Números de revisão

Esta página possui um gráfico útil que eu copiei aqui.

insira a descrição da imagem aqui

Jacobm001
fonte
11
Eu já passei /proc/cpuinfoantes. Parece a melhor opção, já uname -mque não conta muito.
Shan-Desai
11
@ Shan-Desai: não tenho certeza se você o viu antes da edição, mas acabei de incluir um comando que extrairá apenas as informações de revisão do arquivo proc. Espero que ajude.
Jacobm001
11
Sim, eu tentei o que você mencionou. A comparação foi entre um v1.1 Pi 2 Modelo e Pi 3 Modelo B o mais engraçado, porém, é que os meus Pi 3 mostra ainda armv7l em cimauname -m
Shan-Desai
2
Você quer dizer / proc / cpuinfo not / cpu / procinfo #
user253751
unamelistará apenas a arquitetura de destino para a qual o linux foi construído e não é confiável para determinar o tipo de CPU. O Raspbian RPI3 atual é executado no modo de 32 bits. ele listará armv7, se você usar um linux AARCH64( arm64), dirá armv8, se você usar o antigo raspbian RPI1, dirá armv6.
crasic 27/09/17
6

Existem muitos métodos (de confiabilidade variável) para determinar isso. Um dos mais completos e confiáveis ​​é o gpio -vque produz a seguinte saída.

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.

Isso pode ser feito de maneira mais elegante, escrevendo um programa simples, usando as funções fornecidas por wiringpi. Estes estão bem documentados e a fonte está prontamente disponível.

O script em /raspberrypi//a/85016/8697 mostra informações abrangentes sobre seu Pi e SO.

Milliways
fonte
2

Criei um script bash que fornecerá as informações do modelo com base na revisão.

Se você melhorar, por favor me avise.

#!/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
fonte
Caso contrário, a estrutura seria muito mais eficiente.
Jacobm001
4
Uma declaração de switch seria melhor.
21717 Shan-Desai
2

Não tenho representante suficiente para comentar a resposta de @ Andy Delgado, mas aqui está uma versão diferente de seu código usando alguns recursos mais recentes do 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})"
}

Além: REVISIONSé definida no interior de uma função desde que usá-lo sobre sshou sejassh some-host "$(declare -f); check_pi_version"

Takle
fonte
-2

Maneira simples : dmesg | grep "Machine model:"

lemassykoi
fonte
Estranho, isso não gera nada quando eu tento!
goldilocks
@goldilocks Exibe [Tue Apr 11 15:59:32 2017] Machine model: Raspberry Pi 3 Model B Rev 1.2no meu Pi. Pode não ser o método mais robusto.
Milliways
@ Milliways A razão de não fazer isso por mim é que o sistema está funcionando há muito tempo. Isso é de inicialização e dmesgé um buffer circular. Portanto, essa é uma metodologia falha.
goldilocks
@goldilocks Presumivelmente, o OP só quer saber após a inicialização. É improvável que mude ;-) Existem quase certamente métodos melhores para resolver o problema do OP.
Milliways
a melhor solução na minha opinião. funciona perfeitamente no Raspberry Pi 2 e 3, executando o Raspbian. Eu testei em um Pi que é executado desde 8 dias. As outras soluções neste segmento exigiam novas ferramentas (gpio) ou você precisa mapear o código de revisão da CPU para uma tabela de pesquisa (e mantê-lo). esse é o único comando que informa exatamente o nome, ou seja, Machine model: Raspberry Pi 2 Model B Rev 1.1sem raiz também.
31717 Eugen