Raspberry Pi (Українська)

From ArchWiki
Jump to: navigation, search

З Wikipedia:

"Raspberry Pi - це одноплатний комп'ютер, розроблений британським фондом Raspberry Pi Foundation. Його головне призначення — стимулювати навчання базовим комп'ютерним наукам у школах."

Оригінальні моделі, випущені в 2012, базувалися на процесорі Broadcom SoC BCM2835 (ARM11 architecture). Модель Raspberry Pi 2, випущена в 2015, продавалася з процесором BCM2836 SoC (4-ядерному ARM Cortex-A7 architecture). В лютому 2016 випущено модель Pi 3, яка містить BCM2837 SoC (quad-core ARM Cortex-A53 architectue), вбудований модуль WiFi і Bluetooth.

Передмова

Ця стаття не є путівником по встановленню і припускає, що читач уже має встановлену систему Arch.

Note: Підтримка для архітектури ARM представлена на сторінці http://archlinuxarm.org, а не через повідомлення на офіційному форумі Arch Linux. Будь-які повідомлення, які стосуються специфічних проблем, пов'язаних з ARM, будуть закриті в зв'язку з політикою Arch Linux distribution support ONLY.

Системна архітектура

Raspberry Pi базується на ARM, а тому потребує виконувальних файлів, які зібрані для цієї архітектури. Ці файли можна знайти сторінці проекту Arch Linux ARM project, який містить порти Arch Linux для пристроїв на базі ARM. Ці пристрої мають свою спільноту і форум на їхній сторінці. Офіційний форум Archlinux не підтримує специфічні проблеми ARM. З впровадженням Raspberry Pi 2 пакунки тепер залежать від відповідної архітектури:

  • ARMv6 (BCM2835): Raspberry Pi Model A, A+, B, B+, Zero
  • ARMv7 (BCM2836): Raspberry Pi 2 (базується на моделі B+)
  • ARMv8 (BCM2837): Raspberry Pi 3

Продуктивність SD-карти

Швидкість реагування системи, особливо під час операцій, пов'язаних з інтенсивним використання диску, таких як оновлення системи, можуть дуже залежати від низької якості/повільності пристроїв SD-карт. Це проявляється як часті, часто довгі паузи, коли pacman записує файли до файлової системи. Паузи не спричинені заповненням шини RPi або RPi2, а, швидше за все, слабою пропускною здатністю повільної SD (або мікро SD) карти. Більше про це дивіться Benchmarking#Flash media.

Продуктивність і швидкість реагування системи в цілому можна поліпшити шляхом внесення змін в конфігурацію системи. Більше про це дивіться Improving performance.

Включення перевірки fsck під час запуску

Скористайтесь з порад fsck#Boot time checking. Пам'ятайте, що параметри ядра вказуються у файлі /boot/cmdline.txt.

Встановлення Arch Linux ARM

Дивіться документацію по Arch Linux ARM Pi або документацію по Arch Linux ARM Pi2 або документацію по Arch Linux ARM Pi3.

Мережа

Типова інсталяція Archlinux містить вже готові налаштування мережі в dhcp режимі за допомогою systemd-networkd. Це повинно дозволити доступ до офіційного встановлення через Secure Shell. Типова назва сервера є alarmpi. Пароль користувача root є "root", його потрібно негайно змінити і, за бажанням, налаштувати SSH keys.

Налаштування WLAN без ethernet

Користувачі, які бажають налаштувати безпровідну мережу, повинні використати демон безпровідної мережі, такий як WPA supplicant. Використайте Wireless network configuration Путівника початківця для додаткової інформації.

Аудіо

Пакунок alsa-utils має поставити потрібні програми для використання звуку. Типову гучність можна підлаштувати, використовуючи alsamixer.

Важлива зміна у ядрі Linux від версії 4.4.x для ARM щодо ALSA і потрібного модуля звуку: щоб використовувати знаряддя типу alsamixer з поточним ядром, користувачі повинні відредагувати файл /boot/config.txt, додаючи наступну стрічку:

dtparam=audio=on
Приклад: Переконайтесь, що єдине джерело звуку "PCM" не заглушене (позначено як MM, коли заглушене, то натисніть M щоб включити).

Виберіть джерело аудіо для виводу:

$ amixer cset numid=3 x

Тут x може приймати такі значення:

  • 0 для Авто
  • 1 для аналогового виводу
  • 2 для HDMI

Застереження щодо HDMI аудіо

Деякі програми вимагають налаштування файлу /boot/config.txt для форсування виводу звуку через HDMI:

hdmi_drive=2

Відео

HDMI / аналоговий вихід TV-Out

В типовій конфігурації Raspberry Pi використовує HDMI відео, якщо під'єднано HDMI монітор. В протилежному випадку для виводу відео використовується аналоговий вихід TV-Out (також відомий як композитний вихід або RCA)

Щоб перемикатися між HDMI та аналоговим TV-Out використовуйте програму

/opt/vc/bin/tvservice

Використовуйте параметр -s для перевірки статусу виводу; параметр -o виключить дисплей і параметр -p включить вихід HDMI з вибраними налаштуваннями.

Підлаштування можливо знадобиться для виправлення властивого пересканування/недосканування і легко досягається правкою файлу boot/config.txt, в якому налаштовується багато параметрів. Для корекції просто відкоментуйте відповідні стрічки і налаштуйте згідно інструкції в коментарях:

# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
overscan_right=8
overscan_top=-16
overscan_bottom=-16

Користувачам, які бажають використовувати аналогове відео, потрібно глянути на цей файл конфігурації, який містить опції для не-NTSC виводів.

Потрібне перезавантаження для впровадження змін.

Застереження щодо аналогового виводу TV-Out

Починаючи з Raspberry Pi 1 модель B+ і Raspberry Pi 2 модель B, сокет композитного відео був вилучений і замінений композитним сигналом через 3.5мм гніздо відео/аудіо. Деякі кабелі RCA не мають стандарту Raspberry Pi, в цьому випадку під'єднайте червоний або білий контакти для виводу відео.[1]

Драйвер X.org

Драйвер X.org для Raspberry Pi може бути встановлений за допомогою пакунку xf86-video-fbdev або xf86-video-fbturbo-git.

Сенсори на платі

Температура

Знімати дані з сенсора температури можна за допомогою утиліти в пакунку raspberrypi-firmware-tools. RPi пропонує сенсор на BCM2835 SoC (CPU/GPU):

$ /opt/vc/bin/vcgencmd measure_temp
temp=49.8'C

Альтернативно, можна прочитати з файлової системи:

$ cat /sys/class/thermal/thermal_zone0/temp
49768

Для зрозумілого виводу:

$ awk '{printf "%3.1f°C\n", $1/1000}' /sys/class/thermal/thermal_zone0/temp
54.1°C

Напруга

За чотирма різними напругами можна спостерігати за допомогою /opt/vc/bin/vcgencmd:

$ /opt/vc/bin/vcgencmd measure_volts <id>

Де <id> це:

  • core для напруги на ядрі
  • sdram_c для напруги на ядрі sdram
  • sdram_i для напруги I/O sdram
  • sdram_p для напруги PHY sdram

Легкий пакет для моніторингу

monitorixAUR має специфічну підтримку для RPi з версії 3.2.0. Знімки екрану доступні тут.

Розгін процесора

RPi можна розігнати, редагуючи файл /boot/config.txt, наприклад:

arm_freq=800
arm_freq_min=100
core_freq=300
core_freq_min=75
sdram_freq=400
over_voltage=0

Стрічки з *_min визначають мінімальну частоту, що використовуватиметься даною компонентою. Коли система не завантажена, частоти знижуються до мінімального значення. Перегляньте статтю Розгін на elinux щодо додаткових опцій та прикладів.

Потрібно перевантажити систему для впровадження нових налаштувань.

Налаштування розгону для годинника CPU застосовуються, коли регулятор підкручує CPU, тобто під навантаженням. Для отримання даних щодо поточної частоти CPU:

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

Прочитайте CPU frequency scaling для більшої інформації щодо регуляторів.

Приклад: Наступний скрипт покаже всі частоти, що встановлені на RPi:
#/bin/bash
for src in arm core h264 isp v3d uart pwm emmc pixel vec hdmi dpi ; do
    echo -e "$src:\t$(/opt/vc/bin/vcgencmd  measure_clock $src)"
done

Серійна консоль

Відредагуйте файл /boot/cmdline.txt, змініть loglevel на 5 для перегляду повідомлень при завантаженні:

loglevel=5

Якщо типова швидкість 115200 не працює правильно, спробуйте змінити її на 38400:

console=ttyAMA0,38400 kgdboc=ttyAMA0,38400

Запустіть сервіс getty на Pi

# systemctl start getty@ttyAMA0

Ввімкніть під час завантаження

# systemctl enable getty@ttyAMA0.service

Створення властивого сервісного посилання:

# ln -s /usr/lib/systemd/system/serial-getty@.service /etc/systemd/system/getty.target.wants/serial-getty@ttyAMA0.service

З'єднайтесь з комп'ютера:

# screen /dev/ttyUSB0 38400

Модуль камери для Raspberry Pi

Команди для модуля камери включені як частина пакунку raspberrypi-firmware-tools, який встановлено з основною системою.

$ /opt/vc/bin/raspistill
$ /opt/vc/bin/raspivid

Додайте до файлу /boot/config.txt:

gpu_mem=128
start_file=start_x.elf
fixup_file=fixup_x.dat

Можна теж додати

disable_camera_led=1

Наступні стрічки є типовою помилкою:

mmal: mmal_vc_component_enable: failed to enable component: ENOSPC
mmal: camera component couldn't be enabled
mmal: main: Failed to create camera component
mmal: Failed to run camera app. Please check for firmware updates

яку можна виправити, налаштовуючи ці значення у файлі /boot/config.txt:

cma_lwm=
cma_hwm=
cma_offline_start=

Іншу типову помилку:

mmal: mmal_vc_component_create: failed to create component 'vc.ril.camera' (1:ENOMEM)
mmal: mmal_component_create_core: could not create component 'vc.ril.camera' (1)
mmal: Failed to create camera component
mmal: main: Failed to create camera component
mmal: Only 64M of gpu_mem is configured. Try running "sudo raspi-config" and ensure that "memory_split" has a value of 128 or greater

можна виправити, додаючи наступну стрічку до файлу /etc/modprobe.d/blacklist.conf:

blacklist i2c_bcm2708

Щоб використовувати стандартні програми (такі, що використовують /dev/video0), потрібно завантажити драйвер V4L2. Це можна зробити автоматично під час завантаження, створивши файл автозавантаження:

/etc/modules-load.d/rpi-camera.conf
bcm2835-v4l2

Апаратний генератор випадкових чисел

Хоч Arch Linux ARM для Raspberry Pi має налаштований модуль bcm2708-rng для завантаження (дивіться це), однак потрібно встановити rng-tools і повідомити Апаратний Демон Ентропії RNG (rngd), в якому місці знаходиться апаратний генератор випадкових чисел.

Це можна зробити редагуванням файлу /etc/conf.d/rngd:

RNGD_OPTS="-o /dev/random -r /dev/hwrng"

і вмикаючи і запускаючи сервіс rngd.

Якщо в системі запущено haveged, то його потрібно зупинити і вимкнути, оскільки він може гризтися з rngd.

Ці зміни забезпечують передачу даних з апаратного генератора випадкових чисел до пула ентропії ядра в /dev/random. Для перевірки доступної ентропії запустіть:

# cat /proc/sys/kernel/random/entropy_avail

Число повинно бути біля 3000, тоді як перед налаштуванням rngd воно повинно бути близьке до 1000.

GPIO

SPI

Для ввімкнення пристроїв /dev/spidev* розкоментуйте наступну стрічку:

/boot/config.txt
device_tree_param=spi=on

Python

Для використання пінів GPIO з Python, використайте бібліотеку RPi.GPIO. Встановіть python-raspberry-gpioAUR з AUR.

I2C

Встановіть пакунки i2c-tools та lm_sensors.

Ввімкніть підтримку i2c, додаючи стрічку до /boot/config.txt:

 dtparam=i2c_arm=on

Налаштуйте модулі i2c-dev і i2c-bcm2708 (якщо вони не є в чорному списку для камери), щоб завантажувалися на старті:

/etc/modules-load.d/raspberrypi.conf
i2c-dev
i2c-bcm2708

Перевантажте Raspberry Pi і запустіть наступну команду для отримання адреси пристрою:

 i2cdetect -y 0

Тепер потрібно повідомити Linux про можливість використання пристрою. Замініть адрес пристрою адресою, знайденою в попередньому кроці, додаючи префікс '0x' (наприклад 0x48) і виберіть назву пристрою:

 echo <назва пристрою> <адреса пристрою> >/sys/class/i2c-adapter/i2c-0/new_device

Перевірте командою dmesg, чи появився новий пристрій:

 i2c-0: new_device: Instantiated device ds1621 at 0x48

І, остаточно, отримайте вивід з сенсора:

 sensors

QEMU

Іноді легше працювати безпосередньо в образі диска замість реальної Raspberry Pi. Це може бути досягнуто за допомогою монтування SD-картки, що містить кореневий розділ RPi і зміні кореневого каталогу. Зі зміненого оточення буде можливо запустити Pacman і встановити більше пакунків, компілювати великі бібліотеки і т.д. Так як виконувані файли для архітектури ARM, переклад на x86 необхідно виконати за допомогою QEMU.

Note: Станом на січень 2016 року, make не працюватиме в QEMU для ARM, тому неможливо побудувати пакети таким чином. Дивіться guide on the Arch Linux ARM website для побудови крос-компілятора якщо є необхідність збирати ARM-пакунки.

Встановіть binfmt-supportAUR та qemu-user-staticAUR з AUR.

Переконайтеся що ARM - x86 трансляція активна:

# update-binfmts --importdir /var/lib/binfmts/ --import
# update-binfmts --display qemu-arm

Якщо трансляція ARM - x86 не активна, увімкніть її, скориставшись update-binfmts:

# update-binfmts --enable qemu-arm

Змонтуйте SD-картку до mnt/ (назва пристрою може відрізнятися).

# mkdir mnt
# mount /dev/mmcblk0p2 mnt

Скопіюйте виконуваний файл QEMU, який буде обробляти переклад з ARM, в корінь SD-картки:

# cp /usr/bin/qemu-arm-static mnt/usr/bin

Нарешті змініть кореневу файлову систему в кореневому каталогу SD-карти, як описано в Change root#Using chroot, маючи на увазі, що qemu-arm-static повинен бути викликаний командою chroot тобто:

# chroot /mnt/arch /usr/bin/qemu-arm-static /bin/bash

Дивіться також