Какую модель Raspberry Pi я использую?

28

Есть ли способ определить, является ли текущий Raspberry Pi либо 2-й моделью B и 3 с Raspbian Jessie Lite 8.0 ?

Это связано с тем, что у меня есть отдельная статья,bootstrap.sh написанная на Bash, где он должен установить атрибут txpowerдля USB-ключа Wi-Fi (здесь Raspberry Pi 2) с использованием драйвера чипсета Ralink RT5370 .

Я установил атрибуты Wireless с помощью iwconfig(который, я знаю, устарел, но в настоящее время он выполняет свою работу, поэтому я не меняю его).

Поскольку в Raspberry Pi 3 внутренний чипсет Wi-Fi представляет собой bcmнабор микросхем на основе, который не позволяет выполнить следующую команду:

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

С Raspberry Pi 3 вышеупомянутая команда работает, просто удаляя dBmиз вышеупомянутой команды:

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

Я хотел бы добавить проверку, является ли модель Raspberry Pi 2 или 3, используя Bash.

Есть намеки?

В случае, если кто-то хочет пройти через bootstrap.sh: Bootstrapping для TWIN

Заметки

  • Я проверил, что dBmэто не требуется , также в случае Raspberry Pi 2 с набором микросхем Ralink, поэтому для не однозначности можно использовать одну и ту же команду для обоих Raspberry Pis, а именно.

    iwconfig wlan0 mode ad-hoc channel 6 essid myadhoc txpower 0
  • Интересно отметить, что для внешних USB-ключей Wi-Fi необходимо выполнить следующее (для Raspberry Pi 2 ):

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

    в то время , как для встроенных модулей Wi-Fi (Raspberry Pi 3) нет никакой необходимости для ifconfig up and down. Просто простая iwconfigкоманда работает.

Shan-Десаи
источник
4
Лучший подход - проверить, что вы хотите сделать, вместо того, чтобы искать модели (как будет выглядеть Raspberry Pi 5?). В этом случае посмотрите, есть ли набор микросхем Ralink RT5370, и выполните соответствующие настройки. То же самое со встроенным драйвером Wi-Fi.
Турбьёрн Равн Андерсен
Связанный: raspberrypi.stackexchange.com/q/1826/19949
Ганима
связанные: raspberrypi.stackexchange.com/q/100076/19949
Ганима
Возможная
копия

Ответы:

40
cat /proc/device-tree/model

возвращает что-то вроде

Raspberry Pi 3 Model B Rev 1.2
SBF
источник
21

По типу процессора

Вы можете проверить версию RPi с помощью команды uname. Разные версии RPi имеют разные архитектуры ЦП. RPi 2 имеет arm7, тогда как 3 имеет arm8.

uname -m

По версии оборудования

Если вам нужно быть более конкретным, вы можете проверить запись ревизии по выводу cat /proc/cpuinfo. Если вы хотите просто указать номер ревизии, выполните следующую команду:

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

Номера редакций

На этой веб-странице есть удобная таблица, которую я скопировал здесь.

введите описание изображения здесь

Jacobm001
источник
1
Я прошел /proc/cpuinfoраньше. Вроде как лучший вариант, так uname -mкак мало что говорит.
Шань-Десаи
1
@ Shan-Desai: не уверен, что вы видели это до редактирования, но я просто включил команду, которая будет извлекать только информацию о ревизии из файла proc. Надеюсь, это поможет.
Jacobm001
1
Да, я попробовал тот, который вы упомянули. Сравнение было между v1.1 Pi 2 модели и Pi 3 Модель B забавная вещь , однако, что мой Pi 3 все еще показывает armv7l наuname -m
Shan-Десаи
2
Вы имеете в виду / proc / cpuinfo, а не / cpu / procinfo
user253751
unameбудет только перечислять целевую архитектуру, для которой был построен linux, и является ненадежным для определения типа процессора. Текущий RPI3 Raspbian работает в 32-битном режиме. он будет отображать список armv7, если вы используете Linux AARCH64( arm64), он скажет armv8, если вы используете старый RPI1 raspbian, он скажет armv6.
авария
6

Есть много методов (различной надежности), чтобы определить это. Одним из наиболее полных и надежных является gpio -vследующий результат.

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.

Это можно сделать более элегантно, написав простую программу, используя функции, предоставляемые wiringpi. Они хорошо документированы, и источник легко доступен.

Скрипт в /raspberrypi//a/85016/8697 показывает исчерпывающую информацию о вашем Pi и ОС.

Milliways
источник
2

Я создал bash-скрипт, который будет предоставлять информацию о модели на основе Revision.

Если вы сделаете это лучше, пожалуйста, дайте мне знать.

#!/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)"
Энди Дельгадо
источник
Иначе, если структура была бы намного более эффективной.
Jacobm001
4
Переключатель был бы лучше.
Шань-Десаи
2

У меня недостаточно представителя, чтобы комментировать ответ @Andy Delgado, но здесь представлена ​​другая версия его кода с использованием некоторых новых функций 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})"
}

В стороне: REVISIONSопределяется внутри функции, так как я использую ее, sshт.е.ssh some-host "$(declare -f); check_pi_version"

Takle
источник
-2

Простой способ : dmesg | grep "Machine model:"

lemassykoi
источник
Странно, это ничего не выдает, когда я пытаюсь это сделать!
Златовласка
@goldilocks Показывает [Tue Apr 11 15:59:32 2017] Machine model: Raspberry Pi 3 Model B Rev 1.2на моем Пи. Возможно, не самый надежный метод.
Milliways
@ Milliways Причина, по которой он этого не делает для меня, в том, что система работает слишком долго. Это от загрузки, и dmesgэто круговой буфер. Следовательно, это ошибочная методология.
Златовласка
@goldilocks Предположительно, ОП хочет знать только после загрузки. Это вряд ли изменится ;-) Есть почти наверняка лучшие методы решения проблемы ОП.
Milliways
лучшее решение на мой взгляд. отлично работает на Raspberry Pi 2 и 3, работает Raspbian. Я проверил его на Pi, который работает с 8 дней. Другие решения в этой теме требовали либо новых инструментов (gpio), либо вы должны сопоставить код ревизии ЦП с таблицей поиска (и поддерживать ее). это единственная команда, которая сообщает вам точное имя, т.е. Machine model: Raspberry Pi 2 Model B Rev 1.1без корня.
Евгений