MCom-03 (СКИФ) ALT Linux 2022.02

Обзор

MCom-03 ALT Linux — сборка операционной системы ALT Linux с поддержкой модулей на базе микросхемы 1892ВА018 (aka СКИФ, aka MCom-03). При включении питания модуля запускается рабочее окружение Xfce с выводом на HDMI-монитор. Управление ОС выполняется через терминал или через мышь, клавитуатуру, подключенные к модулю.

Пользователи ОС:

  • пользователь elvees, пароль elvees,

  • суперпользователь: root, пароль elvees.

Поддерживаемые модули:

  • ROCK Pi N10 с установленным ELV-MC03-SMARC r1.1,

  • ТрастФон_ОПН r1.0 с установленным ТрастФон_ПМ r1.0.

Изменения в сборке

Общие изменения:

  • В данном документе добавлена глава Сборка исходных кодов.

  • Linux: Исправлены ошибки инициализации PCIe-карт.

  • Linux: Исправлена ошибка неработоспособности Ethernet 100 Мб/с.

  • Linux: Добавлен драйвер pinctrl для LSPERIPH0, LSPERIPH1.

  • Linux: Добавлена базовая поддержка управления частотами.

  • Linux: Для уменьшения тока потребления отключены тактовые частоты неиспользуемых блоков подсистемы SDR.

  • Linux: Уточнены тайминги I2C.

  • U-Boot: Уточнены тайминги I2C.

  • U-Boot: Добавлен драйвер NAND Flash Controller (NFC).

  • U-Boot: Включен драйвер QSPI. Добавлена поддержка переменных окружения в QSPI0.

  • U-Boot: Изменён порядок загрузки: сперва проверяется extlinux.conf с SDMMC1, затем с SDMMC0.

Изменения для ROCK Pi N10 с установленным ELV-MC03-SMARC r1.1:

  • ddrinit: Добавлено включение питания PMIC DDR1 на ELV-MC03-SMARC.

  • Linux: Добавлена поддержка разъёма PCIe M.2 на ROCK Pi N10.

Изменения для ТрастФон:

  • Добавлена поддержка LTE-модема в режиме voice call.

Важно

Ядро Linux данной сборки несовместимо с загрузчиком U-Boot предыдущих версий. Для корректной работы требуется перепрошивка QSPI и eMMC/SD-карты модуля.

Состав сборки

Сборка MCom-03 ALT Linux состоит из бинарных образов:

  • mcom03-altlinux-rockpi-sdcard-*.img.bz2 — образ SD-карты для модуля ROCK Pi N10 с установленным ELV-MC03-SMARC r1.1, в extlinux.conf настроено монтирование rootfs с eMMC;

  • mcom03-altlinux-sdcard-*.img.bz2 — образ SD-карты для модуля ТрастФон_ОПН с установленным ТрастФон_ПМ, в extlinux.conf настроено монтирование rootfs с SD-карты;

  • mcom03-rockpi-sbl-mips-boot-order.bin — образ QSPI0 для модуля ELV-MC03-SMARC r1.1;

  • mcom03-trustphonepm-sbl-mips-*.bin — образ QSPI0 для модуля ТрастФон_ПМ r1.0.

Примечание

Возможен запуск образов SD-карты на других модулях на базе MCom-03: после прошивки SD-карты необходимо изменить устройство для загрузки корневой файловой системы (параметр ядра root в файле extlinux.conf).

Образы размещены на сайте https://dist.elvees.com/mcom03/altlinux/2022.02.

Состав образа SD-карты

Образ SD-карты состоит из GPT-разделов boot (FAT32) и root (EXT4).

Раздел boot содержит файлы:

  • extlinux/extlinux.conf — конфигурационный файл схемы U-Boot Generic Distro,

  • alt/Image — образ ядра Linux,

  • *.dtb-файлы для поддерживаемых модулей и комбинаций с подключенными устройствами (CSI-камера, DSI-дисплей и т.д.).

Раздел root содержит корневую файловую систему (rootfs) ALT Linux. Корневая файловая система разработана следующим образом:

  • Установлен ALT Linux P9 из образа slinux-9.1-aarch64.tar.xz (при установке созданы пользователи, настроен часовой пояс и т.д.).

  • Добавлены файлы:

    • /lib/modules/* — модуля ядра Linux.

    • /usr/bin/modetest — стандартное приложение вывода шаблона на HDMI-монитор.

    • /usr/bin/mcom03-demo-video.sh — скрипт вывода видеофайла на HDMI-монитор без X-сервера.

    • /usr/sbin/mcom03-pixclk-pll-restart.sh — скрипт перезапуска PLL3 подсистемы Media MCom-03.

    • /usr/sbin/mcom03-hdmi-setup.sh — скрипт-обёртка перезапуска PLL3, скрипт опрашивает подтверждения стабильности вывода видео на HDMI-монитор (подробнее см. Поддержка HDMI).

    • /usr/sbin/devmem — бинарная утилита-аналог утилиты devmem из BusyBox.

    • /usr/share/pixmaps/gradient.png — изображение для проверки стабильности вывода на HDMI-монитор.

  • Из стандартных репозиториев ALT Linux установлены дополнительные пакеты (mpv).

  • Установлен пакет МойОфис myoffice-standard-documents-2020.03.1.25.0-0.aarch64.rpm.

  • На рабочем столе созданы ярлыки для запуска приложений Firefox, mpv, МойОфис, mcom03-hdmi-setup.sh.

Исходные коды

Репозитории с исходными кодам базовых компонентов доступны на https://github.com/elvees.

Версии базовых компонентов сборки, из которых собраны бинарные образы:

  • arm-trusted-firmware — d688da5f694b24c47c2b11eda78d9e4c28314de5,

  • ddrinit — 24bf7fe0a9c67244d8f6ebcb8a32291d0c60a54f,

  • linux — e50cee65781d866a573c83850870be19fa3a98ed,

  • mcom03-sbl — 800e6fc2b68b7d277f06e93bd861f77146c12765,

  • uboot — 222ea584b0077f6eaa99af963cbf827913c7cbfc.

Поддержка HDMI

При включении/сбросе СнК видео на HDMI может не выводиться или выводиться испорченным. Для перезапуска HDMI требуется перезапуск процессора или перенастройка PLL СнК. Перенастройка PLL выполняется скриптом mcom03-hdmi-setup.sh (установлен в ОС).

Поддержка DDR

LPDDR4 533 МГц (1066 MT/s), из-за ограничений ПО в Linux доступно суммарно 2 ГБ.

Обзор загрузки ОС (boot flow)

MCom-03 запускается в режиме QSPI0 XIP. Память QSPI0 содержит образы SBL, ddrinit, TF-A, U-Boot. SD-карта содержит ядро, DTB, extlinux.conf, подробнее см. Состав образа SD-карты.

U-Boot поддерживает загрузку Linux по схеме Generic Distro с использованием файла extlinux.conf:

  • U-Boot перебирает источники загрузки SDMMC0, SDMMC1, USB (порядок может отличаться в зависимости от используемой версии U-Boot),

  • U-Boot запускает ядро в соответствии с первым обнаруженным extlinux.conf (копирует DTB и ядро в ОЗУ, передаёт управление ядру).

Последовательность загрузки приведена на диаграмме:

digraph G {

  node [ shape = box, style = filled, width=2.5, height=0.4]

  poweron [label = "User Power On", fillcolor=darkolivegreen1]
  sbl1 [label = "SBL @ RISC0 (QSPI0 XIP)", fillcolor=azure2]
  ddrinit [label = "DDR init @ CPU (SPRAM)", fillcolor=lightsalmon]
  sbl2 [label = "SBL @ RISC0 (QSPI0 XIP)", fillcolor=azure2]
  tfa [label = "TF-A @ CPU (DDR)", fillcolor=lightsalmon]
  uboot [label = "U-Boot @ CPU (DDR)", fillcolor=lightsalmon]
  linux [label = "Linux @ CPU (DDR)", fillcolor=lightsalmon]

  poweron -> sbl1 -> ddrinit -> sbl2 -> tfa -> uboot -> linux
}

Последовательность загрузки Linux (в скобках указан источник исполнения)

Поддержка ELV-MC03-SMARC r1.1

В ОС Linux поддерживаются следующие интерфейсы и компоненты модуля:

  • HDMI, поддерживается только видео, см. Поддержка HDMI,

  • eMMC (SDMMC0),

  • I2C0,

  • I2C1,

  • I2C2,

  • I2C3,

  • GBE0,

  • GBE1,

  • MIPI DSI,

  • PCIe A 4x (PCIe1),

  • SATA (SATA-контроллер подключен к контроллеру PCIe0 MCom-03),

  • SDIO (SDMMC1),

  • Serial I2C EEPROM (I2C2),

  • SER0,

  • SER1 (UART0),

  • SER2,

  • SER3,

  • USB0, USB1, USB2, USB4, USB5 поддерживается USB 2.0 (USB1 с поддержкой хаба),

  • USB3 поддерживается USB 3.0 (USB0).

Примечание:

  • Наименования интерфейсов приведены в соответствии со спецификацией SMARC 2.1.

  • В скобках указаны контроллеры MCom-03.

Прошивка eMMC

Память eMMC доступна как стандартное блочное устройство Linux /dev/mmcblk0p2. eMMC может прошиваться тем же образом, что и SD-карта.

Для прошивки достаточно:

  • загрузить Linux с карты памяти SD;

  • скопировать образ для прошивки eMMC на SD-карту;

  • прошить eMMC командой dd (см. howto-flash-sd);

  • обновить корневую файловую систему в extlinux.conf на eMMC.

Поддержка ROCK Pi N10

В ОС Linux поддерживаются следующие интерфейсы и компоненты модуля:

  • Ethernet (1 Гб/с),

  • HDMI, поддерживается только видео, см. Поддержка HDMI,

  • I2C0,

  • I2C1,

  • I2C2,

  • I2C3,

  • microSD (подключен к SDIO SMARC-модуля),

  • PCIe M.2 (подключен к PCIe_A 4x SMARC-модуля),

  • UART2 (подключен к SER1 SMARC-модуля),

  • USB 2.0 (2 порта),

  • USB 3.0 (1 порт).

Запуск ОС

Для запуска ОС необходимо:

  1. Установить джампер режима Boot 0 (QSPI0).

  2. Подключить переходник USB-to-UART к UART2 модуля (пример подключения), подключить переходник к ПК.

  3. Подключить HDMI-дисплей к модулю.

  4. Подключить блок питания USB type C.

  5. На ПК открыть терминал, залогиниться (пользователь/пароль — см. intro).

  6. Если на HDMI-дисплей не выводится видео, выполнить перезапуск HDMI, см. Поддержка HDMI.

Инструкции

Сборка исходных кодов

Для сборки образа QSPI0 SBL или ядра Linux используется тулчейны и скрипты из Buildroot с поддержкой микросхемы https://dist.elvees.com/mcom03/buildroot/.

Для сборки с произвольными версиями базовых компонентов необходимо:

  1. Скачать и распаковать исходные коды Buildroot, например:

    wget https://dist.elvees.com/mcom03/buildroot/20220216/rockpi/rockpi-defconfig-src.tar.gz
    tar -xf rockpi-defconfig-src.tar.gz
    cd rockpi-defconfig-src
    
  2. Склонировать в произвольную директорию перечисленные выше компоненты (U-Boot, Linux, mcom03-sbl):

    git clone https://github.com/elvees/....
    
  3. Создать файл buildroot/local.mk. В файле добавить строки с путями до склонированных репозиториев:

    ARM_TRUSTED_FIRMWARE_OVERRIDE_SRCDIR = <abspath to local TF-A>
    DDRINIT_OVERRIDE_SRCDIR = <abspath to local ddrinit>
    LINUX_OVERRIDE_SRCDIR = <abspath to local Linux>
    MCOM03_SBL_OVERRIDE_SRCDIR = <abspath to local mcom03-sbl>
    UBOOT_OVERRIDE_SRCDIR = <abspath to local U-Boot>
    

    Подробнее про local.mk см. «8.14.6. Using Buildroot during development» в главе https://buildroot.org/downloads/manual/manual.html#_advanced_usage.

  4. Запустить сборку (образы собираются в директории buildroot/output/images):

    make
    
    # or to build in docker
    ENABLE_NETWORK=1 ./docker-build.sh make
    

Прошивка SD-карты

Прошивка SD-карты выполняется на ПК:

  1. Определить имя устройства SD-карты на ПК (извлечь SD-карту из считывателя карт ПЭВМ, считать список устройств командой ls -la /dev/sd*, установить SD-карту в ПК, повторно считать список устройств, обнаружить новое устройство /dev/sdX).

  2. Записать образ на SD-карту:

    sudo dd if=mcom03-altlinux-sdcard-...img of=/dev/sdX bs=4M && sync
    
  3. Для загрузки с SD-карты в extlinux.conf SD-карты требуется изменить путь до корневой файловой системы:

    • root=/dev/sda2 — на модуле ТрастФон_ПМ,

    • root=/dev/mmcblk1p2 — на модуле ELV-MC03-SMARC.

Прошивка QSPI-памяти

Прошивка QSPI-памяти выполняется с ПК. Python-пакет утилит для прошивки QSPI-памятей mcom03-flash-tools и инструкция по прошивке расположены по адресу https://github.com/elvees/mcom03-flash-tools.

Образы прошивок для QSPI-памятей соответствующих модулей перечислены в Состав сборки.