Создание дистрибутива

Первые действия

Сборка образов и инструментальных средств выполняется из исходных кодов с использованием системы сборки 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-mct04
│   ├── 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-mc30sf6/configs/*_defconfig — конфигурационные файлы с настройками для MC-30SF6 по умолчанию ( модуль МС-30SF6 )

  • external-mct04/configs/*_defconfig — конфигурационные файлы с настройками для MCT-04 по умолчанию ( модуль MCT-04EM-3U )

  • external-mct06/configs/*_defconfig — конфигурационные файлы с настройками для MCT-06 по умолчанию ( модуль MCT-06EM-6U )

  • external-common/configs/*_defconfig — общие конфигурационные файлы.

Настройка и сборка 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 RISC0. Портированный набор инструментов содержит обходные пути ошибок процессора. Архив toolchain-mipsel-elvees-elf32/ELVEES-Mips32.GCC.linux64.*.tar.gz Не рекомендуется использовать другие наборы инструментов для MIPS32 RISC0

  • Toolchain Linux GCC для MIPS. Набор инструментов собирается из исходных кодов во время сборки Buildroot

Использование

Возможно использование инструментов собранных Buildroot. С помощью добавления путей к исполняемым файлам в переменную окружения PATH различных инструментов:

  • Linux MIPS toolchain:

    $ export PATH=$PWD/buildroot/output/host/bin:$PATH
    
  • Baremetal 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.cmake

  • Baremetal 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 накопителя.

  1. Необходимо перейти в директорию содержащую утилиту mcprog:

    $ cd buildroot/output/host/opt/mcprog_elvees/
    
  2. Выполнить команды для загрузки образа.

Команды для загрузки образа на целевую плату с помощью mcprog:

Примечание

Программируемый в SPI flash накопитель образ image-boot.img содержит spi_boot, memory-config и U-Boot. Для микросхем МС-30SF6, MCT-06 необходимо дополнительно программировать flash накопители для корректного запуска.

  • MCT-04EM-3U:

    $ mcprog -e2 -b mct-04 -f <path-to>/image-boot.img 0x0
    
  • 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