Сборка образов прошивки: различия между версиями

Материал из Wiren Board
(Сборка .fit)
(не показаны 34 промежуточные версии 5 участников)
Строка 1: Строка 1:
<languages/>
<translate>
<!--T:1-->
Для сборки образов прошивки контроллера мы подготовили специальный образ Docker. Сборку можно производить внутри этого образа в автоматическом или ручном режиме. После предварительной настройки окружения можно использовать скрипты для сборки без контейнера.
Для сборки образов прошивки контроллера мы подготовили специальный образ Docker. Сборку можно производить внутри этого образа в автоматическом или ручном режиме. После предварительной настройки окружения можно использовать скрипты для сборки без контейнера.


= Подготовка =
= Подготовка =
 
Актуально '''до''' ядра 4.22 включительно. Раздел в процессе правки.
== Установка Docker и подготовка хост-системы ==
== Установка Docker и подготовка хост-системы==
Перый шаг — это установка [https://docs.docker.com/ Docker].
Перый шаг — это установка [https://docs.docker.com/ Docker].
 
В зависимости от используемого дистрибутива — устанавливается по-разному, для Debian:
Инструкции по установке:
<syntaxhighlight lang="bash">
 
sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y
* [https://docs.docker.com/engine/install/ubuntu/ Ubuntu]
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
* [https://docs.docker.com/engine/install/debian/ Debian]
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
 
sudo apt update
На '''хост-системе''' нужно установить также пакет <code>qemu-user-static</code>:
sudo apt install docker-ce -y
<syntaxhighlight lang="console">
</syntaxhighlight>
$ sudo apt install -y qemu binfmt-support qemu-user-static
На хост-системе '''обязательно''' установите пакет qemu-user-static:
<syntaxhighlight lang="bash">
sudo apt install -y qemu-user-static
</syntaxhighlight>
</syntaxhighlight>


Не забудьте добавить пользователя в группу docker, чтобы не использовать sudo:
Не забудьте добавить пользователя в группу docker, чтобы не использовать sudo:
<syntaxhighlight lang="console">
<syntaxhighlight lang="bash">
$ sudo usermod -aG docker ${USER}
sudo usermod -aG docker ${USER}
</syntaxhighlight>
</syntaxhighlight>
<blockquote>После добавления пользователя надо '''выйти-зайти''' чтобы изменения применились.</blockquote>


После добавления пользователя в группу надо выйти из системы и войти снова, чтобы изменения применились.
==Скачивание скрипта ==
Создаем папку и скачиваем скрипт


== Скачивание инструментария для сборки образа ==
Более подробно читайте — [https://github.com/wirenboard/wirenboard в репозитории на GitHub]
Создаем директорию, в которой будет лежать инструментарий и файлы образа, и скачиваем скрипты из репозитория.
 
Скачать полностью репозиторий:
<syntaxhighlight lang="bash">
mkdir ~/wirenboard-wbdev
cd ~/wirenboard-wbdev
git clone https://github.com/wirenboard/wirenboard
cd wirenboard
</syntaxhighlight>


<syntaxhighlight lang="console">
Скачать только скрипт. Пока не реализовано — сейчас в образе нет create_images.sh:
$ mkdir ~/wirenboard-wbdev
<syntaxhighlight lang="bash">
$ cd ~/wirenboard-wbdev
mkdir -p ~/wirenboard-wbdev/wirenboard
$ git clone https://github.com/wirenboard/wirenboard
cd ~/wirenboard-wbdev/wirenboard
$ cd wirenboard
mkdir ./output
wget https://raw.githubusercontent.com/wirenboard/wirenboard/master/wbdev
chmod +x wbdev
</syntaxhighlight>
</syntaxhighlight>


== Выкачивание образа Docker-контейнера ==
==Выкачивание образа==
{{note|info|Учитывайте, что образ контейнера займет ~5.5 Гб на <code>/var</code>}}
 
Запускаем:
Запускаем:
<syntaxhighlight lang="console">
<syntaxhighlight lang="bash">
$ ./wbdev root exit
./wbdev root exit
</syntaxhighlight>
</syntaxhighlight>
Команда выкачает, затем запустит контейнер и завершится. Отсутствие ошибок - покажет что контейнер работает нормально.
<blockquote>'''Важно:''' Образ займет ~5.5 Гб на /var </blockquote>


=Cборка образа=
=Cборка образа=
Про идеологию разделов контроллера можно прочитать на странице [[WB_Firmware_Update_Details | Обновление прошивки, информация для разработчиков]].
==Автоматическая сборка==
==Автоматическая сборка==
Готовим файл с командами. Для Wiren Board 6 версии до 6.7 задаём переменную <code>BOARD=6x</code>, от 6.7 и выше - <code>BOARD=67</code>. Для WB7 - <code>BOARD=7x</code>
Готовим файл с командами:
 
Сразу создаем каталог <code>mkdir ./output/images/</code>
 
Релиз, на основе которого будет собран образ, задаётся в переменной <code>WB_RELEASE</code>.
 
'''Обратите внимание''': если корневая ФС была отредактирована, нужно удалить строки в скрипте, отвечающие за удаление старой и создание новой корневой ФС
(отмечены комментарием в скрипте):
 
<blockquote>'''Важно:''' кэш сохраняется по пути /home/XXX/wbdev/go/src/github.com/contactless/wirenboard/output -
эта же папка шарена между нашим хостом и докером, из неё мы и запускаем ./wbdev. Если у вас что-то сбоит на старых версиях - можно переиначить все пути на
<syntaxhighlight>/root/rootfs/ </syntaxhighlight>
но при этом будет потеряна возможность использовать кэш при сборке.
 
'''дополнительно:''' DEBIAN_RELEASE= в скрипте есть смысл ставить тот который требуется в зависимости от версии board. wb6 со скриптом ниже не заработает без изменения релиза на предыдущий.
</blockquote>
 
 
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
$ BOARD=7x; WB_RELEASE=stable; DEBIAN_RELEASE=stretch; cat << EOFcommand > tmp.sh
cat << EOFcommand > tmp.sh
#!/bin/bash
#!/bin/bash
apt-get update
apt-get update
apt-get install -y kpartx zip device-tree-compiler u-boot-tools libfdt1 binutils
apt-get install -y kpartx zip device-tree-compiler u-boot-tools=2016.11+dfsg1-4 libfdt1 binutils
mount -t devtmpfs none /dev
mount -t devtmpfs none /dev
export ROOTFS=./output/rootfs_wb${BOARD}
#echo "Remove exist rootfs for re-create (if need)"
 
#rm -rf /rootfs/$WBDEV_TARGET
# нужно удалить эти 3 строки, если rootfs уже была создана ранее и изменена,
#rm -rf ./output/rootfs_wb6x
# иначе она будет удалена и создана заново!
export ROOTFS=./output/rootfs_wb6x
echo "Create new clean rootfs"  
echo "Create new clean rootfs"
rm -rf \$ROOTFS
rm -rf $ROOTFS
WB_RELEASE=${WB_RELEASE} DEBIAN_RELEASE=${DEBIAN_RELEASE}  rootfs/create_rootfs.sh ${BOARD}
/root/rootfs/create_rootfs.sh 6x
# можно использовать /root/rootfs/create_rootfs.sh ${BOARD} но в этом случае у вас не будет использоваться кэш сокращающий время компиляции в 2 раза
 
echo "Create .fit image"
echo "Create .fit image"
./image/create_images.sh ${BOARD}
./image/create_images.sh 6x
echo "fix permissions"
echo "correct rights"
chown ${UID} -R ./output/images/
chmod a+rw -R ./output/images/
#Uncomment next string for remove script
rm tmp.sh
#rm tmp.sh
EOFcommand
EOFcommand
chmod a+x tmp.sh


</syntaxhighlight>
</syntaxhighlight>


<blockquote>'''Важно:'''u-boot-tools=2016.11+dfsg1-4 - больше не требуется. Но если вам вдруг надо на старой wb поставить именно его -
Запускаем контейнер, при этом передаем архитектуру «цели»:
<syntaxhighlight>wget https://cloudfront.debian.net/debian-archive/debian/pool/main/u/u-boot/u-boot-tools_2016.11+dfsg1-4_amd64.deb
dpkg -i u-boot-tools_2016.11+dfsg1-4_amd64.deb
rm u-boot-tools_2016.11+dfsg1-4_amd64.deb </syntaxhighlight></blockquote>
 
Запускаем скрипт в контейнере:
 
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
$ ./wbdev root bash ./tmp.sh
WBDEV_TARGET=stretch-armhf ./wbdev root ./tmp.sh
</syntaxhighlight>
</syntaxhighlight>


<blockquote>'''Важно:''' Изменения внутри контейнера не сохранятся </blockquote>
<blockquote>'''Важно:''' Изменения внутри контейнера не сохранятся </blockquote>
 
После завершения — «корневая» файловая система остается в каталоге ./output/rootfs_wb6x и доступна для следующего использования. Можно изменять и дополнять в «ручном» режиме.
После завершения — «корневая» файловая система остается в каталоге <code>./output/rootfs_wbXX</code> (XX соответствует значению <code>BOARD</code>)и доступна для следующего использования. Можно изменять и дополнять в «ручном» режиме.
Готовый для загрузки в контроллер образ — в ./output/images/YYYYMMDDHHMM
Готовый для загрузки в контроллер образ — в <code>./output/images/YYYYMMDDHHMM</code>


==Ручная сборка==
==Ручная сборка==
По сути — то же самое, но команды выполняются вручную, есть возможность изменить параметры.
По сути — то же самое, но команды выполняются вручную, есть возможность изменить параметры.
=== Запуск контейнера ===
=== Запуск контейнера ===
Запускаем в том же каталоге <code>~/wirenboard-wbdev/wirenboard</code> следующую команду:
Запускаем в том же каталоге ~/wirenboard-wbdev/wirenboard следующую команду:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
~/wirenboard-wbdev/wirenboard$ ./wbdev root
~/wirenboard-wbdev/wirenboard
WBDEV_TARGET=stretch-armhf ./wbdev root
</syntaxhighlight>
</syntaxhighlight>
и после запуска контейнера готовим среду, команды те же что и в «автоматическом» режиме:
и после запуска контейнера готовим среду, команды те же что и в «автоматическом» режиме:
<syntaxhighlight lang="console">
<syntaxhighlight lang="bash">
# apt-get update && \
apt-get update && \
apt-get install -y kpartx zip device-tree-compiler u-boot-tools=2016.11+dfsg1-4 libfdt1 binutils && \
apt-get install -y kpartx zip device-tree-compiler u-boot-tools=2016.11+dfsg1-4 libfdt1 binutils && \
mount -t devtmpfs none /dev
mount -t devtmpfs none /dev
Строка 120: Строка 110:
Если rootfs уже создана ранее, то просто указываем ее расположение (переменная ROOTFS).
Если rootfs уже создана ранее, то просто указываем ее расположение (переменная ROOTFS).
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
export ROOTFS=./output/rootfs_wb7x
export ROOTFS=./output/rootfs_wb6x
</syntaxhighlight>
</syntaxhighlight>




Скрипт для подготовки корневой файловой системы находится в директории <code>wirenboard/rootfs</code>.
Скрипт для подготовки корневой файловой системы находится в директории /root/rootfs.


Синтаксис запуска скрипта <code>create_rootfs.sh</code>:
Синтаксис запуска скрипта create_rootfs.sh:
<pre>
<pre>
  $ ./create_rootfs.sh <board_ver> [<list of additional repos>]
  $ ./create_rootfs.sh <board_ver> [<list of additional repos>]
Строка 133: Строка 123:
Здесь:
Здесь:
* ''board_ver'' — версия контроллера, для которого готовится образ. Допустимые значения:
* ''board_ver'' — версия контроллера, для которого готовится образ. Допустимые значения:
** 7x - для Wiren Board 7
** 67 — для Wiren Board 6.7 и выше
** 6x — для Wiren Board 6-6.6
** 6x — для Wiren Board 6-6.6
** 5 — для Wiren Board 5
** 5 — для Wiren Board 5
Строка 150: Строка 138:


Зададим расположение ФС, уже существующей или вновь создаваемой:
Зададим расположение ФС, уже существующей или вновь создаваемой:
<syntaxhighlight lang="console">
<syntaxhighlight lang="bash">
# export ROOTFS=./output/rootfs_wb6x
export ROOTFS=./output/rootfs_wb6x
</syntaxhighlight>
</syntaxhighlight>


Пример. Собираем базовую (без доп. репозиториев) корневую ФС в директории <code>rootfs/rootfs</code> для Wiren Board 7x:
Пример. Собираем базовую (без доп. репозиториев) корневую ФС в директории rootfs/rootfs для Wiren Board 5.5:


<syntaxhighlight lang="console">
<pre>
# cd rootfs
$ cd rootfs
# ROOTFS=./rootfs/rootfs_7x WB_RELEASE=stable DEBIAN_RELEASE=stretch ./create_rootfs.sh 7x
$ ROOTFS=./rootfs/rootfs_55 ./create_rootfs.sh 55
</syntaxhighlight>
</pre>


Если не используем уже существующую, то создаем:
Если не используем уже существующую, то создаем:
<syntaxhighlight lang="console">
<syntaxhighlight lang="bash">
# export ROOTFS=./output/rootfs_wb7x
export ROOTFS=./output/rootfs_wb6x
# export WB_RELEASE=stable DEBIAN_RELEASE=stretch
/root/rootfs/create_rootfs.sh 6x
# wirenboard/rootfs/create_rootfs.sh 7x
</syntaxhighlight>
</syntaxhighlight>


Если нет ошибок — можно переходить к следующему этапу.
Если нет ошибок — можно переходить к следующему этапу.


=== Дополнительные репозитории ===
=== Дополнительные репозитории === <!--T:12-->


<!--T:13-->
Добавление дополнительных репозиториев необходимо, если вы хотите добавить свои версии пакетов в собираемую корневую ФС.
Добавление дополнительных репозиториев необходимо, если вы хотите добавить свои версии пакетов в собираемую корневую ФС.


Добавляется при помощи wbrepo, общий мануал https://github.com/wirenboard/wirenboard/blob/master/README-wbrepo.md
<!--T:14-->
В скрипт передаются ''только адреса'' репозиториев. Например:
В скрипт передаются ''только адреса'' репозиториев. Например:


<syntaxhighlight lang="console">
<!--T:15-->
# ./create_rootfs.sh 55 http://server1.net/ http://server2.net:8086/
<pre>
</syntaxhighlight>
$ ./create_rootfs.sh 55 http://server1.net/ http://server2.net:8086/
</pre>


<!--T:16-->
Формат репозиториев соответствует тому, который создаётся с помощью утилиты [[Special:MyLanguage/wbrepo|wbrepo]]. К дополнительному репозиторию предъявляются требования:
Формат репозиториев соответствует тому, который создаётся с помощью утилиты [[Special:MyLanguage/wbrepo|wbrepo]]. К дополнительному репозиторию предъявляются требования:


* В корне на сервере репозитория должен храниться публичный GPG-ключ в файле <code>/repo.gpg.key</code>. Например, если репозиторий расположен по адресу http://localhost:8086/, то ключ должен быть доступен по ссылке http://localhost:8086/repo.gpg.key
<!--T:17-->
* Имя используемого дистрибутива — testing (если не менялся код в )
* В корне на сервере репозитория должен храниться публичный GPG-ключ в файле /repo.gpg.key. Например, если репозиторий расположен по адресу http://localhost:8086/, то ключ должен быть доступен по ссылке http://localhost:8086/repo.gpg.key
* Имя используемого дистрибутива — testing
* Используемый компонент — main
* Используемый компонент — main


При использовании wbrepo с хоста из докера можно найти их на http://172.17.0.1:8086/ - просто оставьте wbrepo serve запущенным на хосте и вызовите из докера
<!--T:18-->
<syntaxhighlight lang="console">
То есть, если передан адрес репозитория http://localhost:8086/, то в sources.list он будет представлен как
# ./create_rootfs.sh 7x http://172.17.0.1:8086/
</syntaxhighlight>
При изменении имени дистрибутива - отредактировать в https://github.com/wirenboard/wirenboard/blob/master/wbrepo
<pre>
DISTRIBUTION=testing #меняем тут testing на нужное наименование дистрибутива
</pre>
Или смотрим под какой дистрибутив запустился сервер под wbrepo serve и меняем на нужный в ручном запуске
<pre>
./rootfs/create_rootfs.sh 7x http://172.17.0.1:8086@testing:main
</pre>
То есть, если передан адрес репозитория http://localhost:8086/, то в <code>sources.list</code> он будет представлен как


<!--T:19-->
<pre>
<pre>
  deb http://localhost:8086/ testing main
  deb http://localhost:8086/ testing main
</pre>
</pre>
При проблемах - посмотрите внимательно на <code>curl -v</code> вывод адреса репозитория


=== Работа внутри корневой ФС ===
=== Работа внутри корневой ФС ===


Для того чтобы установить какие-нибудь дополнительные пакеты в корневую систему используется chroot.
Для того чтобы установить какие-нибудь дополнительные пакеты в корневую систему используется chroot.
Если уже создана ФС в каталоге <code>./output/rootfs_wb6x</code> то делаем chroot в нее:
Если уже создана ФС в каталоге ./output/rootfs_wb6x то делаем chroot в нее:
 
<syntaxhighlight lang="bash">
<syntaxhighlight lang="console">
./output/rootfs_wb6x/chroot_this.sh
# ./output/rootfs_wb6x/chroot_this.sh
</syntaxhighlight>
</syntaxhighlight>


и можно изменить параметры и/или добавить пакеты. Добавим, например, lsof
и можно изменить параметры и/или добавить пакеты. Добавим, например, lsof
<syntaxhighlight lang="console">
<syntaxhighlight lang="bash">
# apt update && apt install lsof -y
apt update && apt install lsof -y
</syntaxhighlight>
</syntaxhighlight>
<blockquote>''Не забывайте '''выйти''' из chroot</blockquote>
<blockquote>''Не забывайте '''выйти''' из chroot</blockquote>
<syntaxhighlight lang="console">
<syntaxhighlight lang="bash">
# exit
exit
</syntaxhighlight>
</syntaxhighlight>
TODO: раздел В процессе редактирования
== Сборка образа для загрузки на контроллер == <!--T:20-->
<!--T:21-->
''TODO: раздел требует дополнения''


== Сборка образа для загрузки на контроллер ==


Скрипты для сборки образов находятся в директории images. Перед сборкой образа необходима '''готовая''' корневая ФС.
Скрипты для сборки образов находятся в директории images. Перед сборкой образа необходима '''готовая''' корневая ФС.
<blockquote>''Не забывайте установить путь у ФС в переменную ROOTFS</blockquote>
<blockquote>''Не забывайте установить путь у ФС в переменную ROOTFS</blockquote>


Пример: собираем образ прошивки для Wiren Board '''6x''', корневая ФС находится по пути $ROOTFS:
Пример: собираем образ прошивки для Wiren Board '''6x''', корневая ФС находится по пути $ROOTFS:
 
<syntaxhighlight lang="bash">
<syntaxhighlight lang="console">
./image/create_images.sh 6x
# ./image/create_images.sh 6x
chmod a+rw -R ./output/images/
</syntaxhighlight>
</syntaxhighlight>


Владельцем созданных файлов образов будет пользователь root, поэтому после создания файла может понадобиться отдельно дать доступ к нему обычным пользователям, например, так:
<syntaxhighlight lang="console">
# chown a+rw -R ./output/images/
</syntaxhighlight>


Готовый образ будет лежать по пути <code>output/image/<current_datetime>/<current_datetime>_webupd_wb<board>.fit</code>.
<!--T:28-->
Готовый образ будет лежать по пути output/image/<current_datetime>/<current_datetime>_webupd_wb6x.fit.


== См. также ==
== См. также == <!--T:29-->


<!--T:30-->
* [[Special:MyLanguage/Обновление прошивки|Обновление прошивки]]
* [[Special:MyLanguage/Обновление прошивки|Обновление прошивки]]
* [[Wiren Board 5: Восстановление прошивки|Wiren Board 5: Восстановление прошивки]]
* [[Wiren Board 5: Восстановление прошивки|Wiren Board 5: Восстановление прошивки]]
</translate>

Версия 17:26, 2 декабря 2020

Другие языки:

Для сборки образов прошивки контроллера мы подготовили специальный образ 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.

См. также