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)

Опубликовано: