Сборка образов прошивки
Для сборки образов прошивки контроллера мы подготовили специальный образ Docker. Сборку можно производить внутри этого образа в автоматическом или ручном режиме. После предварительной настройки окружения можно использовать скрипты для сборки без контейнера.
Подготовка
Актуально до ядра 4.22 включительно. Раздел в процессе правки.
Установка Docker и подготовка хост-системы
Перый шаг — это установка Docker. В зависимости от используемого дистрибутива — устанавливается по-разному, для Debian:
sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce -y
На хост-системе обязательно установите пакет qemu-user-static
:
sudo apt install -y qemu-user-static
Не забудьте добавить пользователя в группу docker, чтобы не использовать sudo:
sudo usermod -aG docker ${USER}
После добавления пользователя надо выйти-зайти чтобы изменения применились.
Скачивание скрипта
Создаем папку и скачиваем скрипт
Более подробно читайте — в репозитории на GitHub
Скачать полностью репозиторий:
mkdir ~/wirenboard-wbdev
cd ~/wirenboard-wbdev
git clone https://github.com/wirenboard/wirenboard
cd wirenboard
Скачать только скрипт. Пока не реализовано — сейчас в образе нет create_images.sh
:
mkdir -p ~/wirenboard-wbdev/wirenboard
cd ~/wirenboard-wbdev/wirenboard
mkdir ./output
wget https://raw.githubusercontent.com/wirenboard/wirenboard/master/wbdev
chmod +x wbdev
Выкачивание образа
Запускаем:
./wbdev root exit
Важно: Образ займет ~5.5 Гб на
/var
Cборка образа
Про идеологию разделов контроллера можно прочитать на странице Обновление прошивки, информация для разработчиков.
Автоматическая сборка
Готовим файл с командами:
cat << EOFcommand > tmp.sh
#!/bin/bash
apt-get update
apt-get install -y kpartx zip device-tree-compiler u-boot-tools=2016.11+dfsg1-4 libfdt1 binutils
mount -t devtmpfs none /dev
#echo "Remove exist rootfs for re-create (if need)"
#rm -rf /rootfs/$WBDEV_TARGET
#rm -rf ./output/rootfs_wb6x
export ROOTFS=./output/rootfs_wb6x
echo "Create new clean rootfs"
rm -rf $ROOTFS
/root/rootfs/create_rootfs.sh 6x
echo "Create .fit image"
./image/create_images.sh 6x
echo "correct rights"
chmod a+rw -R ./output/images/
rm tmp.sh
EOFcommand
chmod a+x tmp.sh
Запускаем контейнер, при этом передаем архитектуру «цели»:
WBDEV_TARGET=stretch-armhf ./wbdev root ./tmp.sh
Важно: Изменения внутри контейнера не сохранятся
После завершения — «корневая» файловая система остается в каталоге ./output/rootfs_wb6x
и доступна для следующего использования. Можно изменять и дополнять в «ручном» режиме.
Готовый для загрузки в контроллер образ — в ./output/images/YYYYMMDDHHMM
Ручная сборка
По сути — то же самое, но команды выполняются вручную, есть возможность изменить параметры.
Запуск контейнера
Запускаем в том же каталоге ~/wirenboard-wbdev/wirenboard
следующую команду:
~/wirenboard-wbdev/wirenboard
WBDEV_TARGET=stretch-armhf ./wbdev root
и после запуска контейнера готовим среду, команды те же что и в «автоматическом» режиме:
apt-get update && \
apt-get install -y kpartx zip device-tree-compiler u-boot-tools=2016.11+dfsg1-4 libfdt1 binutils && \
mount -t devtmpfs none /dev
Подготовка rootfs
Если rootfs уже создана ранее, то просто указываем ее расположение (переменная ROOTFS).
export ROOTFS=./output/rootfs_wb6x
Скрипт для подготовки корневой файловой системы находится в директории /root/rootfs
.
Синтаксис запуска скрипта create_rootfs.sh
:
$ ./create_rootfs.sh <board_ver> [<list of additional repos>]
Здесь:
- board_ver — версия контроллера, для которого готовится образ. Допустимые значения:
- 6x — для Wiren Board 6-6.6
- 5 — для Wiren Board 5
- 55 — для Wiren Board 5.5
- 4 — для Wiren Board 4
- 32 — для WB Smart Home (3.2)
- 28
- NETMON
- MKA3
- CQC10
- MKA31
- AC-E1
- list of additional repos — адреса дополнительных репозиториев с тестовыми пакетами (см. ниже). Опциональный параметр.
- путь к корневой ФС из переменной ROOTFS, имя директории, в которой будет создана корневая ФС. Директория будет создана автоматически.
Зададим расположение ФС, уже существующей или вновь создаваемой:
export ROOTFS=./output/rootfs_wb6x
Пример. Собираем базовую (без доп. репозиториев) корневую ФС в директории rootfs/rootfs
для Wiren Board 5.5:
$ cd rootfs $ ROOTFS=./rootfs/rootfs_55 ./create_rootfs.sh 55
Если не используем уже существующую, то создаем:
export ROOTFS=./output/rootfs_wb6x
/root/rootfs/create_rootfs.sh 6x
Если нет ошибок — можно переходить к следующему этапу.
Дополнительные репозитории
Добавление дополнительных репозиториев необходимо, если вы хотите добавить свои версии пакетов в собираемую корневую ФС.
В скрипт передаются только адреса репозиториев. Например:
$ ./create_rootfs.sh 55 http://server1.net/ http://server2.net:8086/
Формат репозиториев соответствует тому, который создаётся с помощью утилиты wbrepo. К дополнительному репозиторию предъявляются требования:
- В корне на сервере репозитория должен храниться публичный GPG-ключ в файле
/repo.gpg.key
. Например, если репозиторий расположен по адресу http://localhost:8086/, то ключ должен быть доступен по ссылке http://localhost:8086/repo.gpg.key - Имя используемого дистрибутива — testing
- Используемый компонент — main
То есть, если передан адрес репозитория http://localhost:8086/, то в sources.list
он будет представлен как
deb http://localhost:8086/ testing main
Работа внутри корневой ФС
Для того чтобы установить какие-нибудь дополнительные пакеты в корневую систему используется chroot.
Если уже создана ФС в каталоге ./output/rootfs_wb6x
то делаем chroot в нее:
./output/rootfs_wb6x/chroot_this.sh
и можно изменить параметры и/или добавить пакеты. Добавим, например, lsof
apt update && apt install lsof -y
Не забывайте выйти из chroot
exit
TODO: раздел в процессе редактирования
Сборка образа для загрузки на контроллер
TODO: раздел требует дополнения
Скрипты для сборки образов находятся в директории images. Перед сборкой образа необходима готовая корневая ФС.
Не забывайте установить путь у ФС в переменную ROOTFS
Пример: собираем образ прошивки для Wiren Board 6x, корневая ФС находится по пути $ROOTFS:
./image/create_images.sh 6x
chmod a+rw -R ./output/images/
Готовый образ будет лежать по пути output/image/<current_datetime>/<current_datetime>_webupd_wb6x.fit
.