Знакомимся с Raspberry Pi

Дата публикации 13 янв 2018 | Редактировалось 14 янв 2018
Предисловие

Наступал новый 2018 год. Кто-то собрался уезжать праздновать его наступление в тёплые края за границу, а кто-то остался праздновать новый год дома, в серых стенах каменного Санкт-Петербурга. Пожалуй, несомненно то, что новогодние праздники – особенная пора, от которой ждут волшебства, единения с семьёй и друзьями, и, разумеется, подарков, ведь все мы в той или иной степени в душе немного дети. Просто те, что помладше, ждут Деда Мороза, а те, что постарше, идут за подарками в магазин сами. Вот и я решил зайти на eBay за подарком самому себе на новый год.
Дело в том, что сам по себе настольный компьютер на базе архитектуры Intel x86 уже не вызывает большого удивления, однако всё больше и больше появляется энтузиастов, ковыряющих различные SoC-решения, которые зачастую базируются на архитектуре ARM либо MIPS. А учитывая то, что относительно незадолго до новогодних праздников ко мне на почту прилетело письмо с вопросом о том, буду ли я поддерживать архитектуру ARM в одном из своих проектов, я однозначно решил найти себе платформу на базе ARM. И одной из самых популярных, на мой взгляд, является платформа Raspberry Pi, которая к этому моменту уже успела выйти в третьей версии.

Комплектация

Вот он, мой подарок на Новый год! Изучив подробно предложения на eBay, я остановился на варианте стоимостью в $77, который включает в себя:
  • компьютер Raspberry Pi 3 Model B;
  • медные радиаторы для пассивного охлаждения чипов;
  • прозрачный пластиковый корпус;
  • MicroSD-карта SanDisk Ultra ёмкостью 16 Гбайт с предустановленной операционной системой;
  • мини-клавиатура совмещённая с тачпадом, работающая по радиоканалу;
  • блок питания, дающий 5 вольт постоянного напряжения и максимальный ток 2,5 ампер;
  • usb-шнур с выключателем для питания платформы, который подключается к блоку питания;
  • синий патч-корд с разъёмами RJ-45 для проводного ethernet;
  • HDMI-кабель для подключения монитора.
Разумеется, хотелось ещё и какой-нибудь мини-экран, чтобы не ворочать головой к телевизору и не переключать постоянно основной монитор с DVI на HDMI и обратно. Поэтому я нашёл очень забавный семидюймовый HDMI-дисплей разрешением 1024x600 пикселей, который, помимо всего, ещё и имеет ёмкостную сенсорную поверхность. И такое чудо обошлось всего лишь в какие-то 50$.
Итого мы имеем компьютер по цене дешёвого мобильника, с достаточно внушительными характеристиками:
  • процессор – Broadcom BCM2837 на базе архитектуры Cortex-A53 (ARM v8);
  • тактовая частота – 1200 МГц;
  • количество ядер – 4 физических ядра;
  • объём памяти – 1 Гб SDRAM;
  • видео – Broadcom Videocore 4, видеопамять выделяется из ОЗУ;
  • разъёмы:
    • 4 разъёма USB 2.0;
    • разъём RJ 45 (ethernet);
    • разъём HDMI;
    • разъём 3.5 mm Jack, комбинированный с композитным видеовыходом;
    • разъём для подключения камеры CSI;
    • разъём для подключения дисплея DSI;
    • разъём для карты MicroSD;
    • 40-пиновый разъём GPIO;
    • разъём для питания, оформленный в виде micro USB.
Но меня в первую очередь интересует именно процессор и его набор команд, а остальное – по мере желания и возможностей.

Первый взгляд

Новогодние праздники прошли, а я довольный вернулся из почтового отделения с коробками, в которых лежали долгожданные компьютер и экран. На самом деле, я ожидал, что коробки будут несколько больше, но производители действительно не обманули, заявив, что компьютер по размерам не больше кредитной карточки. Упаковано всё достаточно аккуратно, без множества вычурных бумажек, хотя, честно, хотелось увидеть какой-нибудь многостраничный рекламный буклетик. Всё по-минимуму, сам компьютер лежит в такой бумажной коробочке:
[​IMG]
Рисунок 1. Коробочка Raspberry Pi.
Не буду долго рассказывать про распаковку, этим занимаются отдельные люди. В целом, всё без проблем размещается на одном столе.
[​IMG]
Рисунок 2. Вся комплектация одним снимком.
И, прежде, чем что-либо подключать, на всякий случай сделаем резервную копию флеш-карты.
Смотрим по dmesg устройство, которое было подключено к кард-ридеру:
Код (Text):
  1.  
  2. [ 6262.662987] sd 8:0:0:2: [sdf] 31116288 512-byte logical blocks: (15.9 GB/14.8 GiB)
  3. [ 6262.663993] sd 8:0:0:2: [sdf] Write Protect is on
  4. [ 6262.663995] sd 8:0:0:2: [sdf] Mode Sense: 03 00 80 00
  5. [ 6262.671625]  sdf: sdf1 sdf2
  6.  
Отлично, снимаем копию утилитой dd куда-нибудь в рабочий каталог:
Код (Text):
  1.  
  2. dd if=/dev/sdf of=/home/work/rpi/20180113-native.img
  3. 31116288+0 записей получено
  4. 31116288+0 записей отправлено
  5. 15931539456 байт (16 GB, 15 GiB) скопирован, 819,005 s, 19,5 MB/s
  6.  
В целом, скорость около 20 Мбайт в секунду, не супер-быстро, но и не медленно.
Теперь давайте смонтируем разделы sdf1 и sdf2 и посмотрим, что на них.
Код (Text):
  1.  
  2. mkdir /mnt/1
  3. mkdir /mnt/2
  4. mount /dev/sdf1 /mnt/1
  5. mount: /dev/sdf1 is write-protected, mounting read-only
  6. mount /dev/sdf2 /mnt/2
  7. mount: /dev/sdf2 is write-protected, mounting read-only
  8.  
Странно. Почему-то карточка защищена от записи. Демонтируем разделы и cмотрим на саму карту…
Код (Text):
  1.  
  2. umount /mnt/1
  3. umount /mnt/2
  4.  
Вытаскиваем карту, осматриваем, вставляем. Теперь в dmesg:
Код (Text):
  1.  
  2. [ 8202.595233] sd 8:0:0:2: [sdf] 31116288 512-byte logical blocks: (15.9 GB/14.8 GiB)
  3. [ 8202.596229] sd 8:0:0:2: [sdf] Write Protect is off
  4. [ 8202.596230] sd 8:0:0:2: [sdf] Mode Sense: 03 00 00 00
  5. [ 8202.603872]  sdf: sdf1 sdf2
  6.  
По всей видимости, проблема в контактах кард-ридера. Тем не менее, теперь мы можем исследовать разделы:
Код (Text):
  1.  
  2. mount /dev/sdf1 /mnt/1
  3. mount /dev/sdf2 /mnt/2
  4.  
Код (Text):
  1.  
  2. df -h
  3. Файловая система       Размер Использовано  Дост Использовано% Cмонтировано в
  4. ...
  5. /dev/sdf1                512M         117M  396M           23% /mnt/1
  6. /dev/sdf2                 27M         396K   26M            2% /mnt/2
  7.  
Смотрим содержимое разделов:
Код (Text):
  1.  
  2. ls -1 /mnt/1
  3. bcm2709-rpi-2-b.dtb
  4. bcm2710-rpi-3-b.dtb
  5. bootcode.bin
  6. cmdline.txt
  7. config.txt
  8. fixup.dat
  9. kernel.img
  10. overlays
  11. start.elf
  12. SYSTEM
  13. System Volume Information
  14.  
По всей видимости, первый раздел содержит EFI. Второй же раздел, как видим, пуст:
Код (Text):
  1.  
  2. ls -l /mnt/2
  3. итого 13
  4. drwx------  2 root root 12288 мар  1  2016 lost+found
  5. -rw-r--r--. 1 root root     0 мар  1  2016 .please_resize_me
  6.  
Теперь мы готовы запустить сам микрокомпьютер и посмотреть, что произойдёт.
Код (Text):
  1.  
  2. umount /mnt/1
  3. umount /mnt/2
  4.  
Собираем тестовый стенд. В первую очередь вставляем SD-карту в соответствующий слот, подключаем мини-клавиатуру к порту USB, соединяем устройство с тачскрином проводом HDMI, и, помимо этого, ещё дополнительным USB-проводом, чтобы было можно пользоваться тачскрином. Также кидаем идущий в комплекте сетевой патч-корд от микрокомпьютера до роутера.
[​IMG]
Рисунок 3. Взаимное подключение устройств.
Включаем питание, и… ничего, экран мигнул, потом заполнился чёрным, и перестал что-либо показывать. По всей видимости, что-то с конфигурацией, поэтому приходится всё-таки подключить свой основной рабочий монитор. И теперь, похоже, понятно, в чём дело.
[​IMG]
Рисунок 4. Экран приветствия от openELEC.
[​IMG]
Рисунок 5. Интерфейс openELEC.
Как видим, по умолчанию на карте был записан образ openELEC, то есть программное обеспечение для медиацентра. Нам же это совсем не подходит, поэтому будем ставить свой полноценный Linux-дистрибутив. Для этого начнём с официально поддерживаемого сообществом дистрибутива Raspbian, базирующегося на Debian Linux.

Ставим Raspbian

Скачиваем образ диска утилитой wget:
Код (Text):
  1.  
  2. wget https://downloads.raspberrypi.org/raspbian_latest
  3. 2018-01-13 01:31:58 (2,31 MB/s) - «raspbian_latest» сохранён [1764972666/1764972666]
  4.  
Распаковываем:
Код (Text):
  1.  
  2. unzip raspbian_latest
  3. Archive:  raspbian_latest
  4.   inflating: 2017-11-29-raspbian-stretch.img
  5.  
Смотрим реальный размер образа:
Код (Text):
  1.  
  2. du -hs 2017-11-29-raspbian-stretch.img
  3. 4,6G    2017-11-29-raspbian-stretch.img
  4.  
Итого имеем образ размером 4.6 Гбайт. Теперь нам предстоит залить его на SD-карту. Официальная документация рекомендует писать блоками по 4 мегабайта, что мы и сделаем.
Код (Text):
  1.  
  2. dd if=2017-11-29-raspbian-stretch.img of=/dev/sdf bs=4M conv=fsync
  3. 1173+0 записей получено
  4. 1173+0 записей отправлено
  5. 4919918592 байт (4,9 GB, 4,6 GiB) скопирован, 464,473 s, 10,6 MB/s
  6.  
На запись ушло где-то около восьми минут на скорости 10 Мбайт в секунду. Похоже, SD-карта действительно держит скорость соответственно заявленному десятому классу, китайцы не обманули.
На всякий случай говорим системе произвести сканирование партиций на разделе:
Код (Text):
  1.  
  2. partprobe /dev/sdf
  3.  
Получаем перечень партиций:
Код (Text):
  1.  
  2. ls -1 /dev/sdf*
  3. /dev/sdf
  4. /dev/sdf1
  5. /dev/sdf2
  6.  
В данном случае, как и в предыдущем, две партиции. Давайте посмотрим, что на них:
Код (Text):
  1.  
  2. mount /dev/sdf1 /mnt/1
  3. mount /dev/sdf2 /mnt/2
  4.  
Содержимое первого раздела:
Код (Text):
  1. ls -1 /mnt/1
  2. bcm2708-rpi-0-w.dtb
  3. bcm2708-rpi-b.dtb
  4. bcm2708-rpi-b-plus.dtb
  5. bcm2708-rpi-cm.dtb
  6. bcm2709-rpi-2-b.dtb
  7. bcm2710-rpi-3-b.dtb
  8. bcm2710-rpi-cm3.dtb
  9. bootcode.bin
  10. cmdline.txt
  11. config.txt
  12. COPYING.linux
  13. fixup_cd.dat
  14. fixup.dat
  15. fixup_db.dat
  16. fixup_x.dat
  17. issue.txt
  18. kernel7.img
  19. kernel.img
  20. LICENCE.broadcom
  21. LICENSE.oracle
  22. overlays
  23. start_cd.elf
  24. start_db.elf
  25. start.elf
  26. start_x.elf
Содержимое второго раздела.
Код (Text):
  1. ls -1 /mnt/2
  2. bin
  3. boot
  4. dev
  5. etc
  6. home
  7. lib
  8. lost+found
  9. media
  10. mnt
  11. opt
  12. proc
  13. root
  14. run
  15. sbin
  16. srv
  17. sys
  18. tmp
  19. usr
  20. var
Как видно, в первом случае это также загрузочный раздел, во втором – основной раздел операционной системы. Отлично, давайте посмотрим, как эти разделы были смонтированы:
Код (Text):
  1. mount | grep /dev/sdf
  2. /dev/sdf1 on /mnt/1 type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
  3. /dev/sdf2 on /mnt/2 type ext4 (rw,relatime,data=ordered)
В первом случае видим, что используется vfat, что справедливо для раздела EFI, во втором случае – вполне себе современная ext4.
Демонтируем разделы, вставляем SD-карту в слот мини-компьютера и включаем кнопку питания.
Код (Text):
  1. umount /mnt/1
  2. umount /mnt/2
При первом старте операционная система сама расширяет корневой раздел до максимального значения и повторно перезагружается. Время загрузки – считанные секунды, отличный пример пользователям настольных систем на базе процессоров Intel, ведь есть куда стремиться.
Так или иначе, мы сходу попадаем в графический интерфейс Raspbian:
[​IMG]
Рисунок 6. Raspbian в комплектации по умолчанию.
Проверяем работу мини-клавиатуры – система адекватно реагирует на нажатия клавиш и прикосновение к тачпаду. Однако всё же пользоваться ей не совсем удобно, поэтому я вынужден подключить к устройству дополнительно клавиатуру и мышь, которые так же распознаются и работают вполне адекватно.
Разумеется, в первую очередь у меня возникло желание сделать скриншот. Однако, когда я нажал клавишу Print Screen, ничего не произошло. Чуть позже я понял, что скриншоты просто сохраняются как отдельные файлы в домашний каталог. Вот, собственно говоря, один из них.
[​IMG]
Рисунок 7. Первый скриншот.
Ура, теперь можно отложить фотоаппарат подальше. По свойствам скриншота видно, что система стартует в разрешении 1824x984, что несколько меньше FullHD (1920x1080), но с первого раза в глаза не бросается, ведь есть куда смотреть и помимо этого.
Первым делом я решил запустить терминал и убедиться, что под корневую систему отдана действительно вся флеш-карта:
Код (Text):
  1. df -h
  2. Filesystem      Size  Used Avail Use% Mounted on
  3. /dev/root        15G  4.1G  9.9G  30% /
  4. devtmpfs        460M     0  460M   0% /dev
  5. tmpfs           464M     0  464M   0% /dev/shm
  6. tmpfs           464M   18M  446M   4% /run
  7. tmpfs           5.0M  4.0K  5.0M   1% /run/lock
  8. tmpfs           464M     0  464M   0% /sys/fs/cgroup
  9. /dev/mmcblk0p1   41M   21M   21M  51% /boot
  10. tmpfs            93M     0   93M   0% /run/user/1000
Как видим, корневой раздел монтируется со специального устройства /dev/root, в то время как для загрузки используется обычная партиция, представленная устройством /dev/mmcblk0p1. При этом, сам терминал выглядит достаточно симпатично:
[​IMG]
Рисунок 8. Окно терминала
В общем, первое впечатление можно озвучить одним междометием - «вау!»

Конфигурируем Raspbian

Отлично. Теперь надо выполнить первоначальную конфигурацию Raspbian. Для этого находим в меню соответствующий пункт, который запускает приложение-конфигуратор:
[​IMG]
Рисунок 9. Окно приложения Raspberry Pi Configuration.
Конечно, интерфейс не блещет обилием настроек, но основные и самые важные с его помощью можно сделать. Для начала изменяем пароль, заданный по умолчанию, на свой при помощи кнопки «Change Password...». Это будет необходимо при дальнейшей удалённой работе с устройством. Также я решил изменить имя хоста на «rpi3b». Во вкладке «Interfaces» я разрешил SSH, который идёт из коробки. Очень важно настроить параметры локали и раскладки клавиатуры во вкладке «Localisation», так как по умолчанию стоят настройки английской раскладки вместо привычной нам американской.
[​IMG]
Рисунок 10. Вкладка «Localisation»
Теперь настраиваем WiFi. Для этого редактируем соответствующий конфигурационный файл:
Код (Text):
  1. nano /etc/wpa_supplicant/wpa_supplicant.conf
Содержимое файла должно иметь приблизительно следующий вид:
Код (Text):
  1. country=RU
  2. ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
  3. update_config=1
  4.  
  5. network={
  6.     ssid="homelinux"
  7.     scan_ssid=1
  8.     psk="password"
  9. }
Сохраняем содержимое файла и запускаем переконфигурацию интерфейса:
Код (Text):
  1. wpa_cli -i wlan0 reconfigure
Убеждаемся, что компьютер подключился к WiFi:
Код (Text):
  1. /sbin/ifconfig
  2. eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
  3.         inet 192.168.0.162  netmask 255.255.255.0  broadcast 192.168.0.255
  4.         inet6 fe80::83aa:5565:8698:e6f6  prefixlen 64  scopeid 0x20<link>
  5.         ether b8:27:eb:ec:98:f8  txqueuelen 1000  (Ethernet)
  6.         RX packets 12790  bytes 15196006 (14.4 MiB)
  7.         RX errors 0  dropped 0  overruns 0  frame 0
  8.         TX packets 8322  bytes 940424 (918.3 KiB)
  9.         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  10.  
  11. lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
  12.         inet 127.0.0.1  netmask 255.0.0.0
  13.         inet6 ::1  prefixlen 128  scopeid 0x10<host>
  14.         loop  txqueuelen 1  (Local Loopback)
  15.         RX packets 0  bytes 0 (0.0 B)
  16.         RX errors 0  dropped 0  overruns 0  frame 0
  17.         TX packets 0  bytes 0 (0.0 B)
  18.         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  19.  
  20. wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
  21.         inet 192.168.0.183  netmask 255.255.255.0  broadcast 192.168.0.255
  22.         inet6 fe80::c1b4:3674:4dbe:643  prefixlen 64  scopeid 0x20<link>
  23.         ether b8:27:eb:b9:cd:ad  txqueuelen 1000  (Ethernet)
  24.         RX packets 20  bytes 3445 (3.3 KiB)
  25.         RX errors 0  dropped 0  overruns 0  frame 0
  26.         TX packets 23  bytes 3922 (3.8 KiB)
  27.         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
Как видим, сеть подхватилась, всё замечательно, и патчкорд нам теперь использовать совсем необязательно.

Собираем информацию

Что ж, теперь важно собрать информацию о новоприобретённой железке. Для этого выполним ряд команд. Прежде всего, узнаем версию операционной системы:
Код (Text):
  1. cat /etc/issue
  2. Raspbian GNU/Linux 9 \n \l
и ядра:
Код (Text):
  1. uname -a
  2. Linux raspberrypi 4.9.59-v7+ #1047 SMP Sun Oct 29 12:19:23 GMT 2017 armv7l GNU/Linux
Как видим, несмотря на то что процессор базируется на Cortex-A53, то есть архитектуре ARM 8, которая, в свою очередь, является уже 64-разрядной, операционная система всё же работает на базе 32-раздрядного ядра. Это говорит о том, что программировать в ближайшее время придётся всё же с использованием набора команд ARM 7, нежели ARM 8, которые претерпели достаточно внушительные изменения.
Теперь выведем информацию о самом процессоре:
Код (Text):
  1. cat /proc/cpuinfo
  2. processor    : 0
  3. model name    : ARMv7 Processor rev 4 (v7l)
  4. BogoMIPS    : 38.40
  5. Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
  6. CPU implementer    : 0x41
  7. CPU architecture: 7
  8. CPU variant    : 0x0
  9. CPU part    : 0xd03
  10. CPU revision    : 4
  11.  
  12. processor    : 1
  13. model name    : ARMv7 Processor rev 4 (v7l)
  14. BogoMIPS    : 38.40
  15. Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
  16. CPU implementer    : 0x41
  17. CPU architecture: 7
  18. CPU variant    : 0x0
  19. CPU part    : 0xd03
  20. CPU revision    : 4
  21.  
  22. processor    : 2
  23. model name    : ARMv7 Processor rev 4 (v7l)
  24. BogoMIPS    : 38.40
  25. Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
  26. CPU implementer    : 0x41
  27. CPU architecture: 7
  28. CPU variant    : 0x0
  29. CPU part    : 0xd03
  30. CPU revision    : 4
  31.  
  32. processor    : 3
  33. model name    : ARMv7 Processor rev 4 (v7l)
  34. BogoMIPS    : 38.40
  35. Features    : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
  36. CPU implementer    : 0x41
  37. CPU architecture: 7
  38. CPU variant    : 0x0
  39. CPU part    : 0xd03
  40. CPU revision    : 4
  41.  
  42. Hardware    : BCM2835
  43. Revision    : a22082
  44. Serial        : 0000000019ec98f8
Как видим, процессор распознаётся как процессор архитектуры ARM 7 (что неудивительно, если сделать поправку на ядро операционной системы), имеет четыре ядра, каждое из которых поддерживает ряд следующих расширений:
  • half – поддержка чтения и записи данных размером с половину машинного слова;
  • thumb – поддержка набора сокращённых thumb-команд, в котором каждая команда кодируется всего лишь шестнадцатью битами;
  • fastmult – поддержка умножения 32-битных чисел с расширением до 64 бит;
  • vfp – поддержка векторизованных инструкций с числами одинарной точности (ранний SIMD) – Vectorized Floating Point;
  • edsp – поддержка расширений цифровой обработки сигналов (DSP);
  • neon – поддержка нового набора SIMD-расширений NEON;
  • vfpv3 – поддержка VFP версии 3;
  • tls – наличие регистра TLS (Thread Local Storage);
  • vfpv4 – поддержка VFP версии 4;
  • idiva – поддержка инструкций SDIV и UDIV в режиме ARM;
  • idivt – поддержка инструкций SDIV и UDIV в режиме Thumb;
  • vfpd32 – поддержка 32 D-регистров со стороны VFP;
  • lpae – поддержка расширенного физического адреса (Large Physical Address Extension), позволяющая адресовать больше 4 Гбайт физического адресного пространства в 32-разрядном режиме;
  • evtstrm – использование потока событий ядра с использованием общего системного таймера;
  • crc32 – поддержка инструкций, ускоряющих подсчёт контрольных сумм CRC32.
Из всего этого набора наибольший интерес, разумеется, представляют расширения vfp различных версий, edsp и neon, с которыми я непременно ознакомлюсь в процессе изучения архитектуры ARM.
Что касается памяти – то её действительно 1 Гбайт, 64 Мбайт из которых отданы под видеопамять:
Код (Text):
  1. free
  2.               total        used        free      shared  buff/cache   available
  3. Mem:         949580       98792      456552       39892      394236      758952
  4. Swap:        102396           0      102396
Если посмотреть на предустановленный набор средств, то он рассчитан на каких-то новичков. Мы же люди серьёзные, и нам нужны серьёзные средства разработки. Проверяем, есть ли таковые:
Код (Text):
  1. gcc --version
  2. gcc (Raspbian 6.3.0-18+rpi1) 6.3.0 20170516
  3. Copyright (C) 2016 Free Software Foundation, Inc.
  4. This is free software; see the source for copying conditions.  There is NO
  5. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Вот это удивляет не меньше – GCC версии 6.3 уже из коробки. Однако не хватает моего любимого файлового менеджера. Давайте его поставим штатными средствами дистрибутива семейства Debian:
Код (Text):
  1. apt-get install mc
Всё замечательно, и теперь мы наблюдаем наш файловый менеджер во всей красе:
[​IMG]
Рисунок 11. файловый менеджер Midnight Commander.

Сенсорный экран

А что же всё-таки с нашим мини-экраном? Давайте попробуем его завести. Выключаем систему, подключаем всё по изначальной схеме. Простое подключение экрана здесь не поможет, необходимо провести дополнительную настройку, отредактировав файл /boot/config.txt и прописать в него следующие параметры:
Код (Text):
  1. hdmi_group=2
  2. hdmi_mode=87
  3. hdmi_cvt=1024 600 60 0 0 0
  4. hdmi_force_hotplug=1
Первый параметр hdmi_group задаёт группу HDMI-выхода. Могут быть использованы следующие значения:
  • 0 – автоматическое определение по EDID;
  • 1 – CEA (Consumer Electronics Association) – стандарт, используемый обычно в телевизорах;
  • 2 – DMT (Display Monitor Timings) – стандарт, обычно используемый мониторами.
В зависимости от параметра hdmi_group устанавливается следующий параметр hdmi_mode – целое число, означающее режим работы графической системы. Однако в нашем случае дисплей имеет нестандартное разрешение, и поэтому мы вынуждены прибегнуть к вручную задаваемым параметрам графического режима, а параметр hdmi_mode в связи с этим выставить в значение 87.
Чтобы явно задать параметры графического режима, нужно прописать параметр hdmi_cvt, который представлен шестью числами в следующем порядке:
  • ширина экрана в пикселах, в нашем случае 1024;
  • высота экрана в пикселах, в нашем случае 600;
  • частота обновления кадров, в нашем случае 60;
  • соотношение сторон: 1 – 4:3, 2 – 14:9, 3 – 16:9, 4 – 5:4; 5 – 16:10, 6 – 15:9, в нашем случае явно не задаётся;
  • наличие краёв в изображении: 0 – отсутствуют, 1 – присутствуют;
  • развёртка: 0 – прогрессивная развёртка; 1 – черезстрочная развёртка;
  • яркость: 0 – обычная; 1 – пониженная.
Осталось разобраться с последним параметром – hdmi_force_hotplug. Если этот параметр выставлен в 1, то графическая подсистема считает, что к HDMI-порту дисплей подключен всегда и использует параметры именно заданного графического режима.
Теперь выключаем операционную систему, подключаем дисплей, и включаем снова. Теперь всё работает, как и ожидалось.
[​IMG]
Рисунок 12. Операционная система Raspbian на тачскрине.

Заключение

В целом, поигравшись несколько часов, не могу не отметить, что платформа Raspberry Pi 3 произвела на меня куда более положительные впечатления, нежели я ожидал. Штатная операционная система Raspbian достаточно легковесна и шустра и не имеет каких-либо проблем с установкой дополнительного программного обеспечения. Тачскрин также успешно завёлся. Немного, конечно, расстроило, что для Raspberry Pi 3 пока нет официально поддерживаемой 64-разрядной операционной системы, но, тем не менее, это не умаляет всей интересности проекта. Следите за обновлениями!

4 6.134
SadKo

SadKo
Владимир Садовников

Регистрация:
4 июн 2007
Публикаций:
8

Комментарии


      1. SadKo 17 апр 2018
        UbIvItS, планировал.
        Пока руки не доходят, слишком много приходится делать помимо этого.
        Я вообще хотел цикл статей по ARM написать, как человек, вникающий в это всё дело.
        UbIvItS нравится это.
      2. UbIvItS 16 апр 2018
        Хорошая статья +1 :) токЪ один вопрос: на кой чёрт нужен эфи 7 впрочем, СадКо, есть и второй вопрос: ты другие дистры ставил на сию махинку 777
      3. SadKo 24 янв 2018
        Клавиатура, на самом деле, очень крутая, если хочешь посидеть на диване и посмотреть кино с компьютера. Этакий мини-пульт, с которого можно делать всё что угодно с компом.
      4. im. 24 янв 2018
        Такое же добро лежит на столе и такая же миниатюрная клавиатура имеется, но её лучше сменить на что-то более пригодное.
        Качественная проработанная статья!