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

З 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

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

- Raspberry Pi - Офіційна веб-сторінка
- RPi Config - Excellent source of info relating to under-the-hood tweaks.
- RPi vcgencmd usage - Overview of firmware command vcgencmd.
- Arch Linux ARM on Raspberry PI - A FAQ style site with hints and tips for running Arch Linux on the RPi
- [2] - A really opionionated guide how to setup a RPi with Arch Linux

Category:

- ARM architecture (Українська)