Создание дистрибутива
Подготовка
Сборка образов и инструментальных средств выполняется из исходных кодов с использованием системы сборки Buildroot. Архив исходных кодов содержит все необходимые компоненты для сборки дистрибутива Buildroot с поставляемыми файлами конфигурации.
Для получения образов необходимо загрузить архив tar с исходными файлами и распаковать его:
$ tar -xvzf multicore-mips-src.tar.gz
Перейти в распакованную папку:
$ cd multicore_multicore-mips-src_repo
Описание компонентов
Основные компоненты дистрибутива:
buildroot — исходный код Buildroot. Базовая версия Buildroot 2019.02 (Linux 4.14) .
Dockerfile.centos7 — файл конфигурации Docker-образа для среды сборки дистрибутива для CentOS 7.
Dockerfile.centos8stream — файл конфигурации Docker-образа для среды сборки дистрибутива для CentOS 8.
docker-build.sh — скрипт сборки Docker-образа и сборки дистрибутива в контейнере Docker.
external-common — внешнее дерево конфигурации для всех поддерживаемых платформ.
external-(chip_name) — внешнее дерево файлов конфигураций и пакетов для конкретной платформы.
Makefile — Makefile cкрипт сборки Buildroot.
Дерево исходных кодов дистрибутива:
├── buildroot
│ ├── arch
│ ├── board
│ ├── boot
│ ├── CHANGES
│ ├── Config.in
│ ├── Config.in.legacy
│ ├── configs
│ ├── COPYING
│ ├── DEVELOPERS
│ ├── dl
│ ├── docs
│ ├── fs
│ ├── linux
│ ├── Makefile
│ ├── Makefile.legacy
│ ├── output
│ ├── package
│ ├── README
│ ├── support
│ ├── system
│ ├── toolchain
│ └── utils
├── docker-build.sh
├── Dockerfile.centos7
├── Dockerfile.centos8stream
├── external-common
│ ├── Config.in
│ ├── configs
│ ├── external.desc
│ ├── external.mk
│ ├── package
│ └── toolchain
├── external-mc30sf6
│ ├── board
│ ├── Config.in
│ ├── configs
│ ├── external.desc
│ └── external.mk
├── external-mct06
│ ├── board
│ ├── Config.in
│ ├── configs
│ ├── external.desc
│ └── external.mk
├── Makefile
Сборка и настройка дистрибутива на локальном ПК (Native Buildroot build)
Конфигурация Buildroot
Для создания образов в ОС должны быть установлены некоторые пакеты. Они могут быть взяты из соответствующего файла Dockerfile.{centos8stream, centos7 и т.д.}. Файлы Docker расположены в корневом каталоге репозитория.
Конфигурация Buildroot содержится в файлах:
external-common/configs/*_defconfig — общие конфигурационные файлы.
external-mc30sf6/configs/*_defconfig — конфигурационные файлы с настройками для MC-30SF6 по умолчанию (модуль МС-30SF6).
external-mct06/configs/*_defconfig — конфигурационные файлы с настройками для MCT-06 по умолчанию (модуль MCT-06EM-6U).
Настройка и сборка Buildroot
В качестве примера приведена настройка Buildroot для выбранной платы MCT-06EM-6U:
$ make mct_06_mct_06em_6u_defconfig
$ make
Созданные образы доступны в каталоге buildroot/output/images.
Изменение конфигурации платы
В процессе сборки Buildroot можно использовать любые стандартные команды
Buildroot, такие как make source, make <package>-reconfigure,
make <package>-menuconfig или make menuconfig.
Подробнее см. The Buildroot user manual.
Сборка и настройка дистрибутива на основе Docker
Настройка среды Docker
Следует убедиться, что текущий пользователь находится в группе Docker, а также что у клиента Docker установлены настройки прокси-сервера.
Настройка и сборка Buildroot
Для настройки и сборки Buildroot следует выполнить команды:
$ export DOCKERFILE=Dockerfile.centos8stream
$ export ENABLE_NETWORK=1 # контейнеру разрешен доступ к сети
$ ./docker-build.sh make mct_06_mct_06em_6u_defconfig
$ ./docker-build.sh make
Изменение конфигурации платы (внутри Docker)
Алгоритм:
для изменения конфигурации платы следует применить defconfig для конкретной платы.
с помощью
./docker-build.sh make menuconfigосуществляется вход в меню buildroot.для сохранения отредактированной конфигурации выполняется
./docker-build.sh make savedefconfig.
Пример изменения конфигурации платы mct06em:
$ ./docker-build.sh make mct_06_mct_06em_6u_defconfig
$ ./docker-build.sh make menuconfig
$ ./docker-build.sh make savedefconfig
Для более комфортной разработки, например, ядра Linux можно, используя пакет из Buildroot, воспользоваться следующей инструкцией:
перейти в папку с распакованными исходными файлами Buildroot
multicore_multicore-mips-src_repo.создать переопределяющий файл, указывающий на локальный репозиторий:
$ echo LINUX_OVERRIDE_SRCDIR=$(pwd)/linux-multicore-4.14 > buildroot/local.mk
редактировать пакет в локальной папке, в данном случае
linux-multicore-4.14перенастроить и собрать пакет, в данном случае для ядра Linux:
$ ./docker-build.sh make linux-reconfigure $ ./docker-build.sh make linux-build
Для U-Boot и других пакетов используются аналогичные алгоритмы.
См. 8.13.6. «Using Buildroot during development» на The Buildroot user manual.
Инструменты для сборки
Описание
Buildroot включает в себя пакеты инструментов сборки:
Toolchain mipsel-elvees-elf32. Портированный набор инструментов основан на GCC для MIPS32, содержит обходные пути ошибок процессора. Архив
toolchain-mipsel-elvees-elf32/ELVEES-Mips32.GCC.linux64.*.tar.gzНе рекомендуется использовать другие наборы инструментов для MIPS32.Toolchain Linux GCC для MIPS. Набор инструментов собирается из исходных кодов во время сборки Buildroot.
Использование
С помощью добавления путей к исполняемым файлам в переменную окружения PATH различных инструментов возможно использование инструментов собранных Buildroot:
Linux MIPS toolchain:
$ export PATH=$PWD/buildroot/output/host/bin:$PATHBaremetal MIPS toolchain (если выбран, в противном случае может быть скопирован из каталога dl):
$ export PATH=$PWD/buildroot/output/host/opt/toolchain-mipsel-elvees-elf32/bin:$PATH
Поддержка CMake
Для поддержки сборки проектов на основе CMake для каждого инструмента
создается файл toolchain.cmake. Файлы toolchain.cmake присутствуют в
каталоге сборки buildroot/output/host и копируются в архив toolchain:
Linux MIPS toolchain -
buildroot/output/host/share/buildroot/toolchainfile.cmakeBaremetal MIPS toolchain -
buildroot/output/host/opt/toolchain-mipsel-elvees-elf32/share/cmake/mips_toolchain.cmake
Проекты CMake могут быть собраны с помощью стандартного механизма (см. CMake cross-compiling):
$ cmake -DCMAKE_TOOLCHAIN_FILE=<absolute-path-to-toolchain.cmake> ...
Утилита mcprog
Установка
В процессе сборки Buildroot будет распакован архив в
buildroot/output/host/opt/mcprog_elvees/. Если этого не произошло,
придется распаковать самостоятельно.
Для ручной установки требуется распаковать архив
/buildroot/dl/mcprog-elvees/mcprog_linux_*.zip.
Полная инструкция mcprog содержится в файле README.md
в составе архива.
Предупреждение
Перед первым запуском mcprog необходимо зарегистрировать устройство-адаптер USB JTAG с помощью скрипта register_USB_JTAG.sh.
Необходимо, чтобы у пользователя были root-права для выполнения скрипта.
Программирование flash-накопителя с помощью mcprog
Программирование flash накопителя запускается с host-машины
и осуществляется с помощью USB-адаптера JTAG.
Приложение mcprog запускается на host-машине,
инициализирует MPORT и MFBSP-SPI в микросхеме
и далее ожидает команды для программирования flash накопителя.
Примечание
Программируемый в SPI flash накопитель образ image-boot.img содержит spi_boot, memory-config и U-Boot.
Для микросхем МС-30SF6, MCT-06 необходимо дополнительно программировать flash накопители для корректного запуска.
Алгоритм программирования:
Необходимо перейти в директорию содержащую утилиту mcprog:
$ cd buildroot/output/host/opt/mcprog_elvees/
Выполнить команды для загрузки образа.
Команды для загрузки образа на целевую плату с помощью mcprog:
MCT-06EM-6U :
BOOT = 1: $ mcprog -e2 -b mct-06 -f <path-to>/image-boot.img 0x0 BOOT = 0: $ mcprog -e2 -b mct-06 <path-to>/boot-spi1.bin 0xbfc00000 $ mcprog -e2 -b mct-06 -f <path-to>/image-boot.img 0x0
МС-30SF6EM-6U:
$ mcprog -e2 -b mc-30sf6em <path-to>/boot-spi1.bin 0xbfc00000 $ mcprog -e2 -b mc-30sf6em -f <path-to>/image-boot.img 0x0