Yocto: свой образ Linux для Mango Pi MQ-Pro (RISC-V)
Продолжаю осваивать MangoPi MQ-Pro
Ранее я уже устанавливал на него ОС Ubuntu Server 22.10
Пробовал и Armbian предлагаемый на официальной странице продукта.
Решил проверить возможность собрать свой собственную ОС и помощью Yocto
Плату уже добавили в исходный код meta-riscv
Приступаем к сборке
Создаем рабочий каталог
mkdir yocto
cd yocto/
Производим загрузку yocto project
git clone git://git.yoctoproject.org/poky.git
cd poky/
Загружаем дополнительные слои необходимые для сборки
git clone https://github.com/riscv/meta-riscv.git
git clone git://git.openembedded.org/meta-openembedded
Создаю рабочий каталог для сборки прошивки
cd ..
mkdir mangopi_mqpro
cd mangopi_mqpro/
Инициализируем базовую конфигурацию
source ../poky/oe-init-build-env ./
Теперь необходимо подключить дополнительные слои
vi conf/bblayers.conf
Указываем все слои которые будем использовать в сборке
# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"
BBPATH = "${TOPDIR}"
BBFILES ?= ""
BBLAYERS ?= " \
${HOME}/yocto/poky/meta \
${HOME}/yocto/poky/meta-poky \
${HOME}/yocto/poky/meta-yocto-bsp \
${HOME}/yocto/poky/meta-riscv \
${HOME}/yocto/poky/meta-openembedded/meta-oe \
${HOME}/yocto/poky/meta-openembedded/meta-networking \
${HOME}/yocto/poky/meta-openembedded/meta-python \
"
Вносим дополнения в конфигурацию
vi conf/local.conf
Указываем модель и список дополнительных пакетов включаемых в сборку
MACHINE ??= "mangopi-mq-pro"
IMAGE_INSTALL:append = " wpa-supplicant linux-firmware rtl8723ds libgpiod libgpiod-tools libgpiod-dev dhcpcd chrony python3 python3-pip vim htop stress-ng tzdata openssh"
Запускаем сборку
bitbake core-image-full-cmdline
После сборки производим запись образа системы на microSD карту
sudo bmaptool copy tmp/deploy/images/mangopi-mq-pro/core-image-full-cmdline-mangopi-mq-pro.wic.gz /dev/sdc
Дополнительные настройки
Чтобы заработал WiFi необходимо произвести пару манипуляций
Редактируем конфигурацию сети
vi /etc/network/interfaces
Включаем автостарт и указываем корректный драйвер
# Wireless interfaces
auto wlan0
iface wlan0 inet dhcp
wireless_mode managed
wireless_essid any
#wpa-driver wext
wpa-driver nl80211
wpa-conf /etc/wpa_supplicant.conf
Редактируем конфигурацию беспроводного соединения
vi /etc/wpa_supplicant.conf
Указываем точку доступа и пароль
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1
network={
ssid="YOUR_SSID"
psk="YOUR_PASS"
#key_mgmt=NONE
}
Пробуем управлять gpio через phyton
python3 -m pip install -U --user pip gpiod
Запускаем тест
python3 -m gpiod.test.blink 0 114
Пример простого скрипта
# GPIO used PD18
import gpiod
import time
chip = gpiod.chip(0)
led = chip.get_line(114)
config = gpiod.line_request()
config.consumer = "Blink"
config.request_type = gpiod.line_request.DIRECTION_OUTPUT
led.request(config)
print(led.consumer)
while True:
led.set_value(0)
time.sleep(1)
led.set_value(1)
time.sleep(1)