Первые впечатления от Raspberry Pi и как я устанавливал на него FreeBSD

12 января 2016

По-видимому, в прошлом году я был хорошим котиком, так как Дедушка Мороз положил мне под елку коробочку с Raspberry Pi. В этой заметке я поделюсь своими первыми впечатлениями от использования данного одноплатного компьютера, расскажу, как мне удалось запустить на нем FreeBSD, а также как я отважно рисковал здоровьем в процессе написания поста.

Итак, держим в руках новенький Raspberry Pi. Вставляем идущую в комплекте карту microSD (Raspberry Pi с нее загружается), втыкаем витую пару, включаем в розетку или USB-хаб (питается малина по USB). Еще можно подключить монитор по HDMI. Включаем. Чтобы определить, какой IP себе взяла малина по DHCP, смотрим в веб-панельку роутера или в arp -an. В качестве альтернативного варианта можно воспользоваться Nmap. Отключаем малину от сети, говорим что-то типа:

nmap -Pn -p 22 192.168.0.0/24 | grep -B3 open | grep 'Nmap scan'

Затем подключаем малину, повторяем команду, смотрим diff.

Raspberry Pi при первом включении:

Raspberry Pi

Как я позже выяснил, это Raspberry Pi 2 Model B.

Говорим:

ssh-copy-id pi@10.0.0.110
ssh -X pi@10.0.0.110

… где 10.0.0.110 — это IP-адрес, который получила малина. По умолчанию используется пароль raspberry. Его неплохо бы сразу сменить.

Попадаем во вполне обычный Debian Linux (на самом деле Raspbian) под пользователем с правом на sudo.

Я увидел такое сообщение:

NOTICE: the software on this Raspberry Pi has not been fully
configured. Please run 'sudo raspi-config'

Ну ОК:

sudo raspi-config

Программа имеет интерфейс на curses и предлагает сделать разные вещи, например «Expand Filesystem, Ensures that all of the SD card storage is available to the OS», сменить пароль по умолчанию, настроить локаль и таймзону. Там же есть настройки для оверклокеров. Полезная штука. После окончания настройки программа предложит перезагрузиться. Не вижу причин отказываться.

На борту был обнаружен Python двух версий — 2.7.3 и 3.2.3, Perl 5.14.2, а также gcc 4.6.3 (можно обновить до 4.8.2), gdb и даже git. Я, разумеется, первым делом запустил bash под gdb, нажал Ctr+C и ввел disassemble. Действительно ARM, все без обмана. Согласно dmesg:

CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c5387d

В каталоге python_games есть скрипт launcher.sh, который позволяет запустить разные забавные игрушки. Вы ведь заметили, что выше мы пробросили иксы по SSH? Мне особенно понравилась игра про прыгающих белочек, где нужно есть белочек меньше тебя размером.

Раз это Debian, ничто не мешает установить пару дополнительных пакетов, как обычно:

sudo apt-get update
sudo apt-get install vim htop

У меня htop показал аж целых 4 ядра и 863 Мб оперативки, из которых 30 Мб было занято. Команда df сообщила, что SD-карта имеет объем 7.2 Гб из которых 2.4 Гб уже заняты.

Эксперимента ради можно воспроизвести какой-нибудь mp3 (в Raspberry Pi есть разъем для наушников):

omxplayer test.mp3

Звуковая карта явно фиговая — заметны лишние фоновые шумы, которых нет на записи. Если же воспроизводить звук не через omxplayer, а, скажем, через mpg123, звук еще хуже.

Что еще расстроило, малина поддерживает только OpenGL ES 2.0. Поэтому мои поделки на OpenGL под ней не заведутся. Вообще, судя по быстрому гуглению, на данный момент существует только два микрокомпьютера с поддержкой OpenGL ES 3.0 — это Inforce 6540 SBC и ODROID-XU4.

Интересно, а можно ли поставить на малину FreeBSD? Я смутно припоминаю, что слышал про соответствующий проект — RaspBSD. Порывшись в ящиках стола, я нашел лишнюю microSD карту. При выборе образа RaspBSD важно не ошибиться с моделью малины. У меня Raspberry Pi 2, но сначала я по ошибке скачал образ для Raspberry Pi (A & B) и не мог понять, почему он не загружается.

Запись образа на microSD производится так:

wget http://download.raspbsd.org/FreeBSD-armv6-11.0-RPI2-291824.img.gz
gunzip FreeBSD-armv6-11.0-RPI2-291824.img.gz
sudo umount /dev/mmcblk0p1
sudo dd bs=1M if=FreeBSD-armv6-11.0-RPI2-291824.img of=/dev/mmcblk0

После включения Raspberry Pi с новой картой microSD сначала какое-то время горит красный светодиод. Понять, что ОС загрузилась, можно по погасшему красному светодиоду и миганию индикаторов на сетевой карте.

Теперь можно ломиться по ssh. Логин и пароль — raspberry. Внутри нас ждет вполне обычная FreeBSD 11.0-CURRENT. Рутом становимся, просто сказав su. Что приятно во FreeBSD, голая система ест в два раза меньше памяти, чем Raspbian. Также по умолчанию в ней нет никаких Perl, Python, gcc или CMake. Как следствие, на SD-карте используется в 4 раза меньше места, всего лишь 578 Мб. Больше места остается для чего-то действительно полезного.

На этой фотографии Raspberry Pi работает уже под FreeBSD:

Корпус и внешняя зарядка для Raspberry Pi

Как видите, здесь малина облачена в корпус. К тому же, питается она от UPS, роль которого играет портативный аккумулятор.

Важно! Работая с голой Raspberry Pi, я при всей своей осторожности на второй день все-таки умудрился немного порезаться. Поэтому советую сразу собрать корпус, если он шел в комплекте. Заодно будете меньше трогать электронику своими жирными руками. Корпус, кстати, довольно забавный. Например, в нем предусмотрены отверстия, за которые малину можно повесить на стене при помощи гвоздей или шурупов, как картину. А еще корпус довольно хрупкий. Я, опять же, при всей осторожности, умудрился немного повредить одну из деталей. Сможете разглядеть на фотографии, какую именно?

На следующем снимке представлены экран и беспроводная клавиатура с точпадом для Raspberry Pi, которые я докупил впоследствии:

Экран и беспроводная клавиатура с точпадом для Raspberry Pi

Несмотря на наличие какого-то описания этих девайсов на сайте магазина, судя по самим девайсам и коробкам от них, это какой-то китайский noname.

Тачпад эмулирует клик (касание), правый клик (касание двумя пальцами) и колесико (специальная зона справа). Клавиатура беспроводная, заряжается от USB. У нее был обнаружен баг, по крайней мере мне это кажется багом. Когда клавиатура на зарядке и в состоянии off, она работает, как включенная.

Еще забавный баг с клавиатурой. Не знаю, то ли маркировка на ней не очень правильная, то ли драйвер у малины такой странный, но чтобы ввести @, нужно нажать не Shift+2, а Shift+", там где буква Э. А чтобы ввести #, нужно нажать |. Тильда вводится нажатием Shift+|. Обратный слэш и палка вводятся нажатием Fn+O и Fn+P. Согласно тому, что написано на самой клавиатуре, эти сочетания должны вводить больше и меньше, но для этих символов есть отдельные и вполне рабочие кнопки.

Экран питается по USB. По идее он должен также быть и тачскрином, если запитать его от малины. Но у меня при подключении по USB к малине он начинает мигать черным и белым, и больше ничего не работает. Также есть какой-то косяк с разрешением экрана при запуске иксов — работает только 640x480, существенная часть экрана справа при этом не используется. Если воткнуть Raspberry Pi через HDMI в нормальный монитор, то все ОК.

До сих пор не уверен, то ли магазин торгует подделками, то ли устройства не предназначены для Raspberry Pi 2. В любом случае, если будете покупать что-то для малины, будьте начеку!

Не могу вновь не порадоваться тому, как бережно малина относится к ресурсам. Всего лишь 30 Мб кушается сразу после запуска системы, 60 Мб после запуска Lxde, 150 Мб — когда начинаешь ходить браузером по интернетам. Для сравнения, Ubuntu с браузером Chromium почти сразу отъедают под свои нужды 2 Гб оперативки.

Что дальше делать с Raspberry Pi пока не очень понятно. Можно тестировать свой код на ARM или попрактиковаться в ассемблере под эту архитектуру. Можно настроить в качестве тихой торрентокачалки или исключительно дешевого веб-сервера. Можно проверять восстановление своего приложения после выдергивания питания у сервера из розетки. Можно собрать кластер из нескольких таких штук и попытаться распараллеливать какие-то вычисления или тестировать распределенные алгоритмы. Условно говоря, одна малина стоит 25$, имеет 1 CPU и 1 Гб памяти. За 2500$ можно получить систему со 100 CPU и 100 Гб памяти! Под виртуалками такое уже не потестишь. Можно закинуть малину вместе с портативной зарядкой во вражеский лагерь и использовать в качестве backconnect backdoor’a. Но самое интересное, как мне кажется — это докупать дополнительных модулей и писать на Python что-нибудь с их использованием, какое-нибудь распознавание образов, управление гусеницами и вот это все.

Дополнение: Еще вас могут заинтересовать посты GPIO-пины Raspberry Pi и их использование из Python, Превращаем Raspberry Pi в беспроводной роутер и VisionFive 2: одноплатный компьютер на базе RISC-V.

Метки: , , , .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.