Дистрибутив ОС GNU/Linux на базе Buildroot для 1892ВМ14Я. Руководство программиста¶
О документе¶
Документ описывает дистрибутив операционной системы GNU/Linux на базе Buildroot для микросхемы 1892ВМ14Я (MCom-02), процедуру сборки и прошивки образа SD-карты с операционной системой и настройки операционной системы (далее — «ОС»).
Документ описывает дистрибутив версии 3.1.
Общие сведения¶
Дистрибутив ОС GNU/Linux для MCom-02 предназначен для распространения исходных кодов ОС, инструментального ПО и скриптов сборки ОС.
Особенности дистрибутива:
Поддержка модулей на базе микросхемы 1892ВМ14Я:
- Салют-ЭЛ24Д1 r1.3;
- Салют-ЭЛ24Д1 r1.4;
- Салют-ЭЛ24Д1 r1.5;
- Салют-ЭЛ24Д1 r1.5 с установленным навигационным радиомодулем RF2Chan v2;
- Салют-ЭЛ24Д2 r1.1;
- Салют-ЭЛ24ОМ1 r1.1 с установленным Салют-ЭЛ24ПМ1 r1.1 или Салют-ЭЛ24ПМ1 r1.2;
- Салют-ЭЛ24ОМ1 r1.2 с установленным Салют-ЭЛ24ПМ1 r1.2, Салют-ЭЛ24ПМ2 r1.0 или Салют-ЭЛ24ПМ2 r1.1.
Основные компоненты (подробнее см. Состав дистрибутива ОС):
- система сборки Buildroot,
- загрузчик U-Boot,
- ядро Linux,
- внешнее дерево Buildroot
external-mcom02
,
Компоненты дистрибутива основаны на соответствующих версиях из публичных репозиториев с https://github.com/elvees.
Архив дистрибутива содержит все компоненты — при сборке дистрибутива с поставляемыми файлами конфигурации поддержки MCom-02 не требуется доступ в интернет.
Компоненты дистрибутива предоставляются в исходных кодах. Исключения:
- библиотека пространства пользователя драйвера Mali GPU, демо-приложения GPU;
- инструментальное ПО DSP DELcore-30M;
- прошивки микросхем контроллеров установленных на модулях (например, Wi-Fi).
Результатом сборки дистрибутива являются (подробнее см. Сборка дистрибутива):
- Образ SD-карты, содержащий ОС GNU/Linux. Образ SD-карты унифицирован и совместим со всеми поддерживаемыми модулями.
- Образы загрузчика U-Boot для всех поддерживаемых модулей.
Поддержка сборки дистрибутива в CentOS 7 и в Docker-контейнере.
Дистрибутив содержит следующие файлы конфигурации поддержки MCom-02:
mcom_defconfig
— конфигурация дистрибутива по умолчанию.mcommin_defconfig
— минимальная конфигурация для загрузки ОС.
Особенности файла конфигурации
mcom_defconfig
:- Назначение конфигурации — демонстрация и тестирование интерфейсов MCom-02 и поддерживаемых модулей.
- Имя пользователя, пароль —
root
,root
. - Корневая файловая система основана на BusyBox, оболочка — Bash, система инициализации — systemd.
- Middleware: Python 3, GStreamer, ALSA, FFmpeg, Bluez, libdrm.
- Стандартные бенчмарки и тесты: coremark, ramspeed, memtester, fio, dhrystone, bonnie, hdparm, i2c-tools, iperf и т.п.
- Пакеты поддержки Mali GPU: модуль пространства ядра, библиотеки пространства пользователя, mcom-mali-demos. Аппаратное ускорение Qt на GPU.
- Пакет поддержки SpaceWire — mcom-libswic.
- Поддержка DSP DELcore-30M:
- Пакет утилит и демонстрационных приложений — mcom-delcore30m-tests.
- Инструментальное ПО для DSP (компилятор, линковщик).
- Пакеты реализации OpenVX и демонстраций OpenVX: openvx, openvx-demo.
- Пакеты реализации навигационного решения GNSS:
- rf2chan-v2-gnss — модуля ядра для поддержки радиомодуля RF2Chan v2.
- mcom-talita — драйвер пространства пользователя с реализацией навигационного решения.
- Поддержка U-Boot из целевой ОС:
fw_setenv
,fw_printenv
— утилиты установки и чтения переменных окружения U-Boot.mcom02-fw-update
— утилита прошивки образов U-Boot.
- Поддержка файла идентификации ОС /etc/os-release.
- udev-правила и systemd-сервисы для инициализации 6LoWPAN, ALSA, CAN, SPI, Wi-Fi.
- Сетевой адрес получается по DHCP. Имя хоста по умолчанию —
mcom02
. - По умолчанию включен SSH.
Подготовка ПЭВМ¶
Аппаратные требования к ПЭВМ¶
ПЭВМ должна иметь конфигурацию:
- не менее 4 ГиБ ОЗУ, 20 ГиБ свободного места на НЖМД или твердотельном накопителе;
- на ПЭВМ должен быть установлен кард-ридер SD-карт;
Для работы с модулем требуется дополнительное оборудование:
- microUSB-USB кабель;
- патч-корд Cat5e;
- MicroSD-карта;
- опционально: USB-флеш-накопитель.
Программные требования к ПЭВМ¶
Операционная система ПЭВМ — CentOS 7.8 x86-64.
Для прошивки образов и работы с UART пользователь должен быть добавлен в группы disk, dialout.
Для сборки дистрибутива в ОС ПЭВМ должны быть установлены RPM-пакеты, перечисленные в файле
Dockerfile
(см. Скрипты сборки в Docker-контейнере):sudo yum install <packages-from-dockerfile> -y
Примечание
Для установки пакетов на ПЭВМ должен быть настроен доступ в интернет.
Внимание
Начиная с версии Buildroot v3.2 требуется наличие GCC компилятора >= v5.
Для GCC >= v5 необходимо установить репозиторий
centos-release-scl-rh
, RPM-пакетdevtoolset-9
и настроить переменную окруженияPATH
. Подробнее см. соответствующие команды в файлеDockerfile
.Для работы с терминалом UART должны быть установлены RPM-пакеты
minicom
иputty
.В зависимости от модели используемого USB-UART переходника необходима установка драйверов.
При сборке дистрибутива в Docker-контейнере требуется дополнительная настройка ПЭВМ, подробнее см. Сборка в контейнере Docker.
Состав дистрибутива ОС¶
Дерево исходных кодов дистрибутива представлено на диаграмме:
├── buildroot/
│ ├── ...
│ ├── dl/
│ └── output/
│ └── ...
├── Dockerfile
├── external-common/
├── external-mcom02/
├── Makefile
├── Makefile.docker
├── Makefile.u-boot
└── u-boot/
Компоненты исходного кода представлены в главах:
Buildroot¶
Пакет состоит из компонентов:
buildroot
Исходные коды системы сборки Buildroot. Базовая версия Buildroot — 2018.02. Некоторые рецепты пакетов Buildroot изменены.
Buildroot сконфигурирован файлом конфигурации
external-mcom02/configs/mcom_defconfig
. В директорииbuildroot/dl
содержатся архивы исходных кодов всех пакетов данной конфигурации.Архив
buildroot/dl/linux-mcom02*.tar.gz
— исходные коды ядра Linux 4.4.189.2.external-common
- Внешнее дерево пакетов Buildroot независимых от архитектуры. Дерево оформлено в соответствии с описанием Buildroot br2-external tree.
external-mcom02
- Внешнее дерево пакетов Buildroot для поддержки MCom-02.
Makefile
- Скрипт сборки Buildroot. Скрипт устанавливает переменную
BR2_EXTERNAL
с указанием до директорийexternal-*
и вызываетmake
в директорииbuildroot
. Т.о. при вызовеmake
в корневой директории дистрибутива доступны все стандартные цели Buildroot, например:make help
— вывод справки по целям Buildroot.
Результатом сборки Buildroot являются образ SD-карты и инструментальные средства Buildroot SDK для ПЭВМ (подробнее см. Артефакты сборки).
Загрузчик U-Boot¶
Загрузчик состоит из компонентов:
u-boot
- Исходные коды загрузчика U-Boot версии 2019.01.0.9. Описание загрузчика см. документ «Загрузчик U-Boot для 1892ВМ14Я. Руководство программиста».
Makefile.u-boot
- Скрипт сборки образов U-Boot всех поддерживаемых модулей. Для сборки U-Boot скрипт использует инструментальные средства Buildroot SDK.
Результатом сборки U-Boot являются образы перечисленные в главе Артефакты сборки.
Скрипты сборки в Docker-контейнере¶
Состав скриптов:
Dockerfile
- Файл конфигурации Docker-образа для среды сборки дистрибутива.
Makefile.docker
- Скрипт сборки Docker-образа и сборки дистрибутива в контейнере Docker.
Состав образа SD-карты¶
Схема разбиения образа SD-карты представлена в таблице 1.
Область | Начало (байт) | Размер (байт) | Примечание |
---|---|---|---|
MBR | 0 | 512 | |
Раздел root | 1 МиБ | 1 ГиБ | Раздел с файловой системой EXT4 с корневой файловой системой rootfs |
На разделе root содержится скомпилированное ядро Linux — файл /boot/zImage
.
Сборка дистрибутива¶
Перед сборкой дистрибутива необходимо:
Разархивировать архив дистрибутива (
<package-name>
— имя архива без расширенияtar.bz2
)tar xf <package-name>.tar.bz2
Предупреждение
Требования к полному путю к архиву и имени архива:
- должны использовать только ASCII-символы (не должны содержать символов кириллицы),
- не должны содержать пробелов.
Сменить текущую рабочую директорию в распакованную директорию:
cd <package-name>
Сборка дистрибутива выполняется в ОС ПЭВМ или в контейнере Docker.
Артефакты сборки¶
Результатом сборки дистрибутива являются:
Образ SD-карты
buildroot/output/images/mcom02-buildroot-sdcard.img
, состав образа описан в главе Состав образа SD-карты.Инструментальные средства Buildroot SDK для ПЭВМ — в директории
buildroot/output/host
.Образы SPI флеш-памяти
uboot-images/*.img
. Соответствие модулей и образов загрузчика:mcom02-salute-el24d1-r1.3-uboot.img
— Салют-ЭЛ24Д1 r1.3;mcom02-salute-el24d1-r1.4-uboot.img
— Салют-ЭЛ24Д1 r1.4;mcom02-salute-el24d1-r1.5-uboot.img
— Салют-ЭЛ24Д1 r1.5;mcom02-salute-el24d1-r1.5-rf2chan-uboot.img
— Салют-ЭЛ24Д1 r1.5 c навигационным радиомодулем RF2Chan v2;mcom02-salute-el24d2-r1.1-uboot.img
— Салют-ЭЛ24Д2 r1.1;mcom02-salute-el24pm1-r1.1-1.2-om1-r1.1-1.2-uboot.img
— Салют-ЭЛ24ОМ1 с Салют-ЭЛ24ПМ1;mcom02-salute-el24pm2-r1.2-om1-r1.1-1.2-uboot.img
— Салют-ЭЛ24ОМ1 с Салют-ЭЛ24ПМ2.
Совместимость ревизий модулей ОМ и ПМ приведена в Таблице совместимости.
Сборка в ОС ПЭВМ¶
Выполнить команду для сборки Buildroot и образа SD-карты:
make
Длительность сборки составляет около 150 минут и зависит от производительности CPU ПЭВМ.
Результатом сборки являются образ SD-карты и Buildroot SDK.
Собрать образ U-Boot:
Выполнить команду для вывода справки по целям скрипта, запомнить цель соответствующую используемому модулю:
make -f Makefile.u-boot help
Выполнить команду для сборки U-Boot. Пример команды сборки загрузчика модуля Салют-ЭЛ24Д1 r1.5:
make -f Makefile.u-boot saluted1-r15
Результатом сборки данного примера является файл
uboot-images/mcom02-salute-el24d1-r1.5-uboot.img
.
Сборка в контейнере Docker¶
Сборка в контейнере Docker предназначена для организации воспроизводимой сборки (например, непрерывной интеграции) и не рекомендуется для разработки и отладки скриптов сборки.
Предупреждение
В случае если сборка Buildroot была выполнена в контейнере, то повторные запуски
сборки (после реконфигурации, изменения исходных кодов пакетов) также должны выполняться в контейнере.
Повторный запуск сборки Buildroot в ОС ПЭВМ будет завершаться ошибкой. Для очистки генерируемых
промежуточных файлов Buildroot необходимо выполнить make clean
.
Причины:
- Рабочая директория Buildroot на файловой системе ОС ПЭВМ и на файловой системе контейнера имеет различные пути.
- При сборке скрипты Buildroot устанавливают абсолютные пути в генерируемых скриптах сборки.
Для сборки в контейнере Docker необходимо:
Установить и настроить сервис Docker:
- Установить Docker версии 17.07 или выше на ПЭВМ согласно инструкции Get Docker CE for CentOS.
- Добавить текущего пользователя в группу docker согласно инструкции Post-installation steps for Linux.
- Настроить прокси для сервиса Docker (при необходимости) согласно инструкции Control Docker with systemd.
- Настроить прокси для клиента Docker (при необходимости) согласно инструкции Configure the Docker client.
Запустить сборку образа Docker:
make -f Makefile.docker checkenv image
Проверить, что образ создан командой
docker images | grep buildroot
. Пример вывода:elvees mcom02-buildroot-centos-v1.0 ad261c2c728c 26 hours ago 533MB
Запустить сборку Buildroot и образа SD-карты в контейнере:
make -f Makefile.docker build CONTAINER_CMD="make"
Запустить сборку образов U-Boot всех поддерживаемых модулей в контейнере:
make -f Makefile.docker build CONTAINER_CMD="make -f Makefile.u-boot"
Результатом сборки являются образы, перечисленные в главе Артефакты сборки.
Подготовка носителя ОС¶
Прошивка SD-карты¶
Для записи образа на SD-карту необходимо:
Извлечь SD-карту из считывателя карт ПЭВМ и считать список устройств командой:
ls -la /dev/sd*
Установить SD-карту в кард-ридер ПЭВМ и повторно считать список устройств командой
ls -la /dev/sd*
. Вычесть из списка устройств после установки SD-карты список устройств до установки карты и получить устройство/dev/sdX
и/или список устройств/dev/sdX1, /dev/sdX2...
(где 1, 2, … номера разделов SD-карты). В случае, если получен список устройств, то получить устройство/dev/sdX
отбрасыванием последней цифры из устройства соответствующего первому разделу SD-карты/dev/sdX1
.Записать образ на SD-карту:
sudo dd if=buildroot/output/images/mcom02-buildroot-sdcard.img of=/dev/sdX bs=4M sudo sync
Извлечь SD-карту из считывателя карт ПЭВМ.
Прошивка eMMC¶
Для прошивки образа в память eMMC на модулях Салют-ЭЛ24ПМ1 и Салют-ЭЛ24ПМ2 выполнить:
Запустить модуль. Загрузка системы должна быть произведена с SD-карты.
Подключиться к модулю по терминалу UART и считать его IP-адрес командой
ifconfig
, значение IP-адреса сохранить на ПЭВМ в переменнойTARGET_IP_ADDR
:TARGET_IP_ADDR=<IP-адрес-модуля>
В терминале на ПЭВМ установить переменную с путём до файла образа:
IMG_PATH=<путь-до-файла-образа-SD-карты>
Выполнить на ПЭВМ команду:
ssh root@$TARGET_IP_ADDR dd of=/dev/mmcblk0 bs=4M conv=fsync < $IMG_PATH
При необходимости проверить корректность записи образа, для этого на ПЭВМ выполнить команду:
IMG_SIZE=$(stat -c%s "$IMG_PATH") ssh root@$TARGET_IP_ADDR "dd if=/dev/mmcblk0 bs=4M count=$(($IMG_SIZE / 1024 / 1024 / 4)) | head -c $IMG_SIZE | md5sum"
Полученную MD5-сумму сравнить с MD5-суммой записанного файла образа.
Прошивка SPI флеш-памяти¶
Прошивка SPI флеш-памяти через BootROM¶
Прошивка SPI флеш-памяти модуля образом загрузчика U-Boot через BootROM выполняется в случае, если загрузчик повреждён или не прошит. Операция трудозатратна: требуются ручные циклы переключения питания и изменение состояния переключателей BOOT на модуле.
Прошивка выполняется утилитами из пакета MCom-02 flash tools согласно инструкции на GitHub.
Прошивка SPI флеш-памяти из ОС модуля¶
Для прошивки SPI флеш-памяти из ОС модуля используется утилита mcom02-fw-update
: необходимо
скопировать образ с ПЭВМ на ФС устройства (например, командой scp
) и выполнить на устройстве:
mcom02-fw-update <image-file>
Предупреждение
Во время исполнения процесс прошивки не должен прерываться.
Для прошивки с восстановлением переменных окружения U-Boot используется опция -r
:
mcom02-fw-update -r <image-file>
Подсказка
Для печати и установки переменных окружения загрузчика U-Boot в ОС модуля используются
утилиты fw_printenv
и fw_setenv
соответственно.
Настройка ОС¶
Увеличение объема ОЗУ¶
Доступный объем ОЗУ по умолчанию равен 1 ГиБ для модулей Салют-ЭЛ24Д1 и Салют-ЭЛ24Д2, 2 ГиБ — для модулей Салют-ЭЛ24ОМ1. Для увеличения объема ОЗУ до 2 ГиБ необходимо активировать второй контроллер DDR (если применимо для данного модуля).
Включение контроллера DDR выполняется установкой значения enable
для переменной окружения
ddrctl_cmd
в режиме монитора загрузчика
(подробнее см. «Загрузчик U-Boot для 1892ВМ14Я. Руководство программиста»):
setenv ddrctl_cmd enable
saveenv
Включение драйвера framebuffer vpoutfb¶
По умолчанию образ SD-карты собирается с выключенным модулем ядра vpoutfb для
модулей Салют-ЭЛ24Д1 и Салют-ЭЛ24Д2. При необходимости включение произвести путем удаления
строки modprobe.blacklist=vpoutfb
из переменной окружения cmdline
в режиме монитора загрузчика
(подробнее см. «Загрузчик U-Boot для 1892ВМ14Я. Руководство программиста»)
Настройка сети¶
По умолчанию ОС настроена на получение сетевого адреса по DHCP.
Настройка параметров сети задаётся в конфигурационных файлах /etc/systemd/network/*.network
и /usr/lib/systemd/network/*.network
на корневой файловой системе.
Полная документация по настройке сети доступна в документации systemd.
Имя хоста по умолчанию — mcom02. Для изменения имени хоста необходимо отредактировать
конфигурационные файлы /etc/hostname
и /etc/hosts
на корневой файловой системе.
Настройка 6LoWPAN¶
Сетевой интерфейс 6LoWPAN обеспечивает взаимодействие по протоколу IPv6 через сеть стандарта IEEE 802.15.4.
Параметры сетевого интерфейса задают командой ip
. Для автоматической настройки интерфейса
используется сервис systemd lowpan.service
(выключен по умолчанию).
Для изменения IP, выставляемого сервисом, необходимо изменить файл:
external-mcom02/overlay/elvees/usr/lib/systemd/system/lowpan.service
в директории исходных кодов на ПЭВМ;или
/usr/lib/systemd/system/lowpan.service
на файловой системе на целевой платформе и перезапустить сервис:systemctl daemon-reload systemctl restart lowpan
Параметры запуска Linux¶
Параметры запуска Linux задаются с помощью переменных окружения загрузчика (подробнее см. «Загрузчик U-Boot для 1892ВМ14Я. Руководство программиста»).
Совет
При работе с Салют-ЭЛ24ОМ1 для изменения загрузочного устройства на карту памяти microSD
необходимо установить переменную окружения загрузчика boot_targets
в значение
legacy_mmc1 mmc1
.
Дополнительные параметры запуска Linux необходимо передавать через переменную окружения
cmdline
загрузчика.
Параметры запуска Linux описаны в Kernel Parameters.
Добавление программ в образ SD-карты¶
Система сборки Buildroot поддерживает добавление в сборку программ и библиотек пользователя.
Подробная документация находится в директории buildroot/docs
.
Возможно добавление программ на базе стандарта компьютерного зрения OpenVX (см. «ELVEES OpenVX SDK для 1892ВМ14Я. Руководство программиста»).
Управление выводами GPIO из пространства пользователя¶
Управление выводами GPIO СнК осуществляется с помощью служебных файлов в /sys/class/gpio
(подробнее см. GPIO Sysfs Interface for Userspace).
Управление выводом GPIO может быть недоступно, если он используется драйвером.
В соответствии с руководством пользователя на СнК выводы GPIO делятся на 4 группы: GPIOA, GPIOB, GPIOC, GPIOD. В Linux выводы GPIO обозначаются номерами. Соответствие базовых номеров для каждой группы приведено в таблице 2. Внутри групп номера идут по порядку. Например, вывод GPIOA5 соответствует номеру 480 + 5 = 485 в Linux.
Группа | Базовый номер в Linux |
---|---|
GPIOA | 480 |
GPIOB | 448 |
GPIOC | 416 |
GPIOD | 384 |
Разметка свободной области SD-карты и монтирование в /data
¶
Для создания раздела из свободной области SD-карты и монтирования
в директорию /data
необходимо:
Выполнить команду:
create-data-partition && echo "Partition successfully created"
Разметку считать завершённой успешно в случае вывода в терминал скриптом сообщения:
Partition successfully created
Запуск модуля¶
Для запуска модуля необходимо выполнить следующие действия:
Установить SD-карту в слот MicroSD модуля.
Установить переключатель BOOT модуля в положение, соответствующее загрузке из SPI флеш-памяти (подробнее см. Руководство пользователя на модуль).
Подключить модуль к источнику питания (подробнее см. Руководство пользователя на модуль).
Открыть терминал UART модуля, или установить соединение по протоколу SSH (логин:
root
, пароль:root
).Выполнить команду
uname -a
. Считать модуль готовым к использованию при выводе в терминал сообщения:Linux mcom02 4.1.41.3 #1 SMP Fri Sep 1 17:08:44 MSK 2017 armv7l GNU/Linux
Примечание
systemd инициализирует пользовательское пространство параллельно процедуре инициализации устройств (к примеру, терминал инициализируется до загрузки всех модулей ядра). Это может привести к проблемам запуска, на ранних этапах, приложений, взаимодействующих с устройствами. Рекомендации по ожиданию устройств описаны в systemd-udev-settle.service.
Сообщения системному программисту¶
Отладочный модуль выводит в терминал UART сообщения о ходе загрузки. Пример вывода в терминал при успешной загрузке:
DDR retention disabled
U-Boot SPL 2017.07.0.3 (Sep 01 2017 - 17:12:01)
DDR controllers init started
DDR controller #0 init done
DDR controller #1 init done
Trying to boot from SPI
U-Boot 2017.07.0.3 (Sep 01 2017 - 17:12:01 +0300), Build: v2.5-2017-09-01
CPU: MCom-compatible
Model: Salute-EL24OM1 r1.1
I2C: ready
DRAM: 2 GiB
MMC: sdhci0@3800b000: 0, sdhci1@3800d000: 1
SF: Detected m25p32 with page size 256 Bytes, erase size 64 KiB, total 4 MiB
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
DDR controller #1 disabled
Hit any key to stop autoboot: 0
switch to partitions #0, OK
mmc0(part 0) is current device
reading zImage
3310424 bytes read in 211 ms (15 MiB/s)
## Flattened Device Tree blob at 7f768140
Booting using the fdt blob at 0x7f768140
Loading Device Tree to 4fff8000, end 4ffffbcd ... OK
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
[ 0.000000] Booting Linux on physical CPU 0x0
[ 0.000000] Linux version 4.1.41.3 (jenkins_drap@leo-pc.elvees.com)
(gcc version 5.2.0 (Buildroot 2015.08.1) ) #1 SMP Fri Sep 1 17:08:44 MSK 2017
...
Welcome!
mcom02 login: