Сборка образов прошивки: различия между версиями
Brainroot (обсуждение | вклад) |
|||
(не показано 65 промежуточных версий 5 участников) | |||
Строка 1: | Строка 1: | ||
Для сборки образов прошивки контроллера мы подготовили специальный образ Docker. Сборку можно производить внутри этого образа в автоматическом или ручном режиме. После предварительной настройки окружения можно использовать скрипты для сборки без контейнера. | |||
Для сборки образов прошивки контроллера | |||
= Подготовка = | = Подготовка = | ||
== Установка Docker== | |||
Перый шаг | == Установка Docker и подготовка хост-системы == | ||
Перый шаг — это установка [https://docs.docker.com/ Docker]. | |||
Инструкции по установке: | |||
* [https://docs.docker.com/engine/install/ubuntu/ Ubuntu] | |||
* [https://docs.docker.com/engine/install/debian/ Debian] | |||
sudo apt install | |||
На '''хост-системе''' нужно установить также пакет <code>qemu-user-static</code>: | |||
<syntaxhighlight lang="console"> | |||
$ sudo apt install -y qemu binfmt-support qemu-user-static | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Не забудьте добавить пользователя в группу docker, чтобы не использовать sudo | |||
<syntaxhighlight lang=" | Не забудьте добавить пользователя в группу docker, чтобы не использовать sudo: | ||
sudo usermod -aG docker ${USER} | <syntaxhighlight lang="console"> | ||
$ sudo usermod -aG docker ${USER} | |||
</syntaxhighlight> | </syntaxhighlight> | ||
==Скачивание | После добавления пользователя в группу надо выйти из системы и войти снова, чтобы изменения применились. | ||
Создаем | |||
== Скачивание инструментария для сборки образа == | |||
Создаем директорию, в которой будет лежать инструментарий и файлы образа, и скачиваем скрипты из репозитория. | |||
<syntaxhighlight lang="console"> | |||
$ mkdir ~/wirenboard-wbdev | |||
$ cd ~/wirenboard-wbdev | |||
$ git clone https://github.com/wirenboard/wirenboard | |||
$ cd wirenboard | |||
</syntaxhighlight> | |||
== Выкачивание образа Docker-контейнера == | |||
<syntaxhighlight lang=" | {{note|info|Учитывайте, что образ контейнера займет ~5.5 Гб на <code>/var</code>}} | ||
Запускаем: | |||
<syntaxhighlight lang="console"> | |||
$ ./wbdev root exit | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Команда выкачает, затем запустит контейнер и завершится. Отсутствие ошибок - покажет что контейнер работает нормально. | |||
=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 | ||
#!/bin/bash | |||
apt-get update | |||
apt-get install -y kpartx zip device-tree-compiler u-boot-tools libfdt1 binutils | |||
mount -t devtmpfs none /dev | |||
export ROOTFS=./output/rootfs_wb${BOARD} | |||
# нужно удалить эти 3 строки, если rootfs уже была создана ранее и изменена, | |||
# иначе она будет удалена и создана заново! | |||
echo "Create new clean rootfs" | |||
rm -rf \$ROOTFS | |||
WB_RELEASE=${WB_RELEASE} DEBIAN_RELEASE=${DEBIAN_RELEASE} rootfs/create_rootfs.sh ${BOARD} | |||
# можно использовать /root/rootfs/create_rootfs.sh ${BOARD} но в этом случае у вас не будет использоваться кэш сокращающий время компиляции в 2 раза | |||
echo "Create .fit image" | |||
./image/create_images.sh ${BOARD} | |||
echo "fix permissions" | |||
chown ${UID} -R ./output/images/ | |||
#Uncomment next string for remove script | |||
#rm tmp.sh | |||
EOFcommand | |||
</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"> | |||
$ ./wbdev root bash ./tmp.sh | |||
</syntaxhighlight> | |||
<blockquote>'''Важно:''' Изменения внутри контейнера не сохранятся </blockquote> | |||
После завершения — «корневая» файловая система остается в каталоге <code>./output/rootfs_wbXX</code> (XX соответствует значению <code>BOARD</code>)и доступна для следующего использования. Можно изменять и дополнять в «ручном» режиме. | |||
Готовый для загрузки в контроллер образ — в <code>./output/images/YYYYMMDDHHMM</code> | |||
< | ==Ручная сборка== | ||
По сути — то же самое, но команды выполняются вручную, есть возможность изменить параметры. | |||
=== Запуск контейнера === | |||
Запускаем в том же каталоге <code>~/wirenboard-wbdev/wirenboard</code> следующую команду: | |||
<syntaxhighlight lang="bash"> | |||
~/wirenboard-wbdev/wirenboard$ ./wbdev root | |||
</syntaxhighlight> | |||
и после запуска контейнера готовим среду, команды те же что и в «автоматическом» режиме: | |||
<syntaxhighlight lang="console"> | |||
# 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 | |||
</syntaxhighlight> | |||
< | === Подготовка rootfs === | ||
Если rootfs уже создана ранее, то просто указываем ее расположение (переменная ROOTFS). | |||
<syntaxhighlight lang="bash"> | |||
export ROOTFS=./output/rootfs_wb7x | |||
</syntaxhighlight> | |||
< | Скрипт для подготовки корневой файловой системы находится в директории <code>wirenboard/rootfs</code>. | ||
< | Синтаксис запуска скрипта <code>create_rootfs.sh</code>: | ||
<pre> | <pre> | ||
$ ./create_rootfs.sh | $ ./create_rootfs.sh <board_ver> [<list of additional repos>] | ||
</pre> | </pre> | ||
Здесь: | Здесь: | ||
* ''board_ver'' — версия контроллера, для которого готовится образ. Допустимые значения: | |||
** 7x - для Wiren Board 7 | |||
** 67 — для Wiren Board 6.7 и выше | |||
* ''board_ver'' | ** 6x — для Wiren Board 6-6.6 | ||
** 5 | ** 5 — для Wiren Board 5 | ||
** 55 | ** 55 — для Wiren Board 5.5 | ||
** 4 | ** 4 — для Wiren Board 4 | ||
** 32 | ** 32 — для WB Smart Home (3.2) | ||
** 28 | ** 28 | ||
** NETMON | ** NETMON | ||
Строка 84: | Строка 146: | ||
** MKA31 | ** MKA31 | ||
** AC-E1 | ** AC-E1 | ||
* ''list of additional repos'' | * ''list of additional repos'' — адреса дополнительных репозиториев с тестовыми пакетами (см. ниже). Опциональный параметр. | ||
* ''путь к корневой ФС'' из переменной ROOTFS, имя директории, в которой будет создана корневая ФС. Директория будет создана автоматически. | |||
Зададим расположение ФС, уже существующей или вновь создаваемой: | |||
<syntaxhighlight lang="console"> | |||
# export ROOTFS=./output/rootfs_wb6x | |||
</syntaxhighlight> | |||
Пример. Собираем базовую (без доп. репозиториев) корневую ФС в директории <code>rootfs/rootfs</code> для Wiren Board 7x: | |||
< | <syntaxhighlight lang="console"> | ||
# cd rootfs | |||
# ROOTFS=./rootfs/rootfs_7x WB_RELEASE=stable DEBIAN_RELEASE=stretch ./create_rootfs.sh 7x | |||
</syntaxhighlight> | |||
Если не используем уже существующую, то создаем: | |||
< | <syntaxhighlight lang="console"> | ||
# export ROOTFS=./output/rootfs_wb7x | |||
# export WB_RELEASE=stable DEBIAN_RELEASE=stretch | |||
</ | # wirenboard/rootfs/create_rootfs.sh 7x | ||
</syntaxhighlight> | |||
Если нет ошибок — можно переходить к следующему этапу. | |||
=== Дополнительные репозитории === | === Дополнительные репозитории === | ||
Добавление дополнительных репозиториев необходимо, если вы хотите добавить свои версии пакетов в собираемую корневую ФС. | Добавление дополнительных репозиториев необходимо, если вы хотите добавить свои версии пакетов в собираемую корневую ФС. | ||
Добавляется при помощи wbrepo, общий мануал https://github.com/wirenboard/wirenboard/blob/master/README-wbrepo.md | |||
В скрипт передаются ''только адреса'' репозиториев. Например: | В скрипт передаются ''только адреса'' репозиториев. Например: | ||
< | <syntaxhighlight lang="console"> | ||
# ./create_rootfs.sh 55 http://server1.net/ http://server2.net:8086/ | |||
</syntaxhighlight> | |||
</ | |||
Формат репозиториев соответствует тому, который создаётся с помощью утилиты [[Special:MyLanguage/wbrepo|wbrepo]]. К дополнительному репозиторию предъявляются требования: | |||
Формат репозиториев соответствует тому, который создаётся с помощью утилиты [[Special:MyLanguage/wbrepo|wbrepo]]. | |||
* В корне на сервере репозитория должен храниться публичный GPG-ключ в файле <code>/repo.gpg.key</code>. Например, если репозиторий расположен по адресу http://localhost:8086/, то ключ должен быть доступен по ссылке http://localhost:8086/repo.gpg.key | |||
* В корне на сервере репозитория должен храниться публичный GPG-ключ в файле /repo.gpg.key. Например, если репозиторий расположен по адресу http://localhost:8086/, то ключ должен быть доступен по ссылке http://localhost:8086/repo.gpg.key | * Имя используемого дистрибутива — testing (если не менялся код в ) | ||
* Имя используемого дистрибутива | * Используемый компонент — main | ||
* Используемый компонент | |||
< | При использовании wbrepo с хоста из докера можно найти их на http://172.17.0.1:8086/ - просто оставьте wbrepo serve запущенным на хосте и вызовите из докера | ||
То есть, если передан адрес репозитория http://localhost:8086/, то в sources.list он будет представлен как | <syntaxhighlight lang="console"> | ||
# ./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> он будет представлен как | |||
<pre> | <pre> | ||
deb http://localhost:8086/ testing main | deb http://localhost:8086/ testing main | ||
</pre> | </pre> | ||
При проблемах - посмотрите внимательно на <code>curl -v</code> вывод адреса репозитория | |||
=== Работа внутри корневой ФС === | |||
Для того чтобы установить какие-нибудь дополнительные пакеты в корневую систему используется chroot. | |||
Если уже создана ФС в каталоге <code>./output/rootfs_wb6x</code> то делаем chroot в нее: | |||
< | <syntaxhighlight lang="console"> | ||
# ./output/rootfs_wb6x/chroot_this.sh | |||
</syntaxhighlight> | |||
< | и можно изменить параметры и/или добавить пакеты. Добавим, например, lsof | ||
<syntaxhighlight lang="console"> | |||
# apt update && apt install lsof -y | |||
</syntaxhighlight> | |||
< | <blockquote>''Не забывайте '''выйти''' из chroot</blockquote> | ||
<syntaxhighlight lang="console"> | |||
# exit | |||
</syntaxhighlight> | |||
== Сборка образа для загрузки на контроллер == | |||
< | Скрипты для сборки образов находятся в директории images. Перед сборкой образа необходима '''готовая''' корневая ФС. | ||
<blockquote>''Не забывайте установить путь у ФС в переменную ROOTFS</blockquote> | |||
Пример: собираем образ прошивки для Wiren Board '''6x''', корневая ФС находится по пути $ROOTFS: | |||
< | |||
<syntaxhighlight lang="console"> | |||
# ./image/create_images.sh 6x | |||
</ | </syntaxhighlight> | ||
Владельцем созданных файлов образов будет пользователь root, поэтому после создания файла может понадобиться отдельно дать доступ к нему обычным пользователям, например, так: | |||
< | <syntaxhighlight lang="console"> | ||
# chown a+rw -R ./output/images/ | |||
</syntaxhighlight> | |||
Готовый образ будет лежать по пути <code>output/image/<current_datetime>/<current_datetime>_webupd_wb<board>.fit</code>. | |||
== См. также == | == См. также == | ||
* [[Special:MyLanguage/Обновление прошивки|Обновление прошивки]] | * [[Special:MyLanguage/Обновление прошивки|Обновление прошивки]] | ||
* [[Wiren Board 5: Восстановление прошивки|Wiren Board 5: Восстановление прошивки]] | * [[Wiren Board 5: Восстановление прошивки|Wiren Board 5: Восстановление прошивки]] | ||
Текущая версия на 21:57, 29 августа 2023
Для сборки образов прошивки контроллера мы подготовили специальный образ Docker. Сборку можно производить внутри этого образа в автоматическом или ручном режиме. После предварительной настройки окружения можно использовать скрипты для сборки без контейнера.
Подготовка
Установка Docker и подготовка хост-системы
Перый шаг — это установка Docker.
Инструкции по установке:
На хост-системе нужно установить также пакет qemu-user-static
:
$ sudo apt install -y qemu binfmt-support qemu-user-static
Не забудьте добавить пользователя в группу docker, чтобы не использовать sudo:
$ sudo usermod -aG docker ${USER}
После добавления пользователя в группу надо выйти из системы и войти снова, чтобы изменения применились.
Скачивание инструментария для сборки образа
Создаем директорию, в которой будет лежать инструментарий и файлы образа, и скачиваем скрипты из репозитория.
$ mkdir ~/wirenboard-wbdev
$ cd ~/wirenboard-wbdev
$ git clone https://github.com/wirenboard/wirenboard
$ cd wirenboard
Выкачивание образа Docker-контейнера
Учитывайте, что образ контейнера займет ~5.5 Гб на /var
Запускаем:
$ ./wbdev root exit
Команда выкачает, затем запустит контейнер и завершится. Отсутствие ошибок - покажет что контейнер работает нормально.
Cборка образа
Про идеологию разделов контроллера можно прочитать на странице Обновление прошивки, информация для разработчиков.
Автоматическая сборка
Готовим файл с командами. Для Wiren Board 6 версии до 6.7 задаём переменную BOARD=6x
, от 6.7 и выше - BOARD=67
. Для WB7 - BOARD=7x
Сразу создаем каталог mkdir ./output/images/
Релиз, на основе которого будет собран образ, задаётся в переменной WB_RELEASE
.
Обратите внимание: если корневая ФС была отредактирована, нужно удалить строки в скрипте, отвечающие за удаление старой и создание новой корневой ФС (отмечены комментарием в скрипте):
Важно: кэш сохраняется по пути /home/XXX/wbdev/go/src/github.com/contactless/wirenboard/output -
эта же папка шарена между нашим хостом и докером, из неё мы и запускаем ./wbdev. Если у вас что-то сбоит на старых версиях - можно переиначить все пути на
/root/rootfs/но при этом будет потеряна возможность использовать кэш при сборке.
дополнительно: DEBIAN_RELEASE= в скрипте есть смысл ставить тот который требуется в зависимости от версии board. wb6 со скриптом ниже не заработает без изменения релиза на предыдущий.
$ BOARD=7x; WB_RELEASE=stable; DEBIAN_RELEASE=stretch; cat << EOFcommand > tmp.sh
#!/bin/bash
apt-get update
apt-get install -y kpartx zip device-tree-compiler u-boot-tools libfdt1 binutils
mount -t devtmpfs none /dev
export ROOTFS=./output/rootfs_wb${BOARD}
# нужно удалить эти 3 строки, если rootfs уже была создана ранее и изменена,
# иначе она будет удалена и создана заново!
echo "Create new clean rootfs"
rm -rf \$ROOTFS
WB_RELEASE=${WB_RELEASE} DEBIAN_RELEASE=${DEBIAN_RELEASE} rootfs/create_rootfs.sh ${BOARD}
# можно использовать /root/rootfs/create_rootfs.sh ${BOARD} но в этом случае у вас не будет использоваться кэш сокращающий время компиляции в 2 раза
echo "Create .fit image"
./image/create_images.sh ${BOARD}
echo "fix permissions"
chown ${UID} -R ./output/images/
#Uncomment next string for remove script
#rm tmp.sh
EOFcommand
Важно:u-boot-tools=2016.11+dfsg1-4 - больше не требуется. Но если вам вдруг надо на старой wb поставить именно его -
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
Запускаем скрипт в контейнере:
$ ./wbdev root bash ./tmp.sh
Важно: Изменения внутри контейнера не сохранятся
После завершения — «корневая» файловая система остается в каталоге ./output/rootfs_wbXX
(XX соответствует значению BOARD
)и доступна для следующего использования. Можно изменять и дополнять в «ручном» режиме.
Готовый для загрузки в контроллер образ — в ./output/images/YYYYMMDDHHMM
Ручная сборка
По сути — то же самое, но команды выполняются вручную, есть возможность изменить параметры.
Запуск контейнера
Запускаем в том же каталоге ~/wirenboard-wbdev/wirenboard
следующую команду:
~/wirenboard-wbdev/wirenboard$ ./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_wb7x
Скрипт для подготовки корневой файловой системы находится в директории wirenboard/rootfs
.
Синтаксис запуска скрипта create_rootfs.sh
:
$ ./create_rootfs.sh <board_ver> [<list of additional repos>]
Здесь:
- board_ver — версия контроллера, для которого готовится образ. Допустимые значения:
- 7x - для Wiren Board 7
- 67 — для Wiren Board 6.7 и выше
- 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 7x:
# cd rootfs
# ROOTFS=./rootfs/rootfs_7x WB_RELEASE=stable DEBIAN_RELEASE=stretch ./create_rootfs.sh 7x
Если не используем уже существующую, то создаем:
# export ROOTFS=./output/rootfs_wb7x
# export WB_RELEASE=stable DEBIAN_RELEASE=stretch
# wirenboard/rootfs/create_rootfs.sh 7x
Если нет ошибок — можно переходить к следующему этапу.
Дополнительные репозитории
Добавление дополнительных репозиториев необходимо, если вы хотите добавить свои версии пакетов в собираемую корневую ФС.
Добавляется при помощи wbrepo, общий мануал https://github.com/wirenboard/wirenboard/blob/master/README-wbrepo.md В скрипт передаются только адреса репозиториев. Например:
# ./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
При использовании wbrepo с хоста из докера можно найти их на http://172.17.0.1:8086/ - просто оставьте wbrepo serve запущенным на хосте и вызовите из докера
# ./create_rootfs.sh 7x http://172.17.0.1:8086/
При изменении имени дистрибутива - отредактировать в https://github.com/wirenboard/wirenboard/blob/master/wbrepo
DISTRIBUTION=testing #меняем тут testing на нужное наименование дистрибутива
Или смотрим под какой дистрибутив запустился сервер под wbrepo serve и меняем на нужный в ручном запуске
./rootfs/create_rootfs.sh 7x http://172.17.0.1:8086@testing:main
То есть, если передан адрес репозитория http://localhost:8086/, то в sources.list
он будет представлен как
deb http://localhost:8086/ testing main
При проблемах - посмотрите внимательно на curl -v
вывод адреса репозитория
Работа внутри корневой ФС
Для того чтобы установить какие-нибудь дополнительные пакеты в корневую систему используется chroot.
Если уже создана ФС в каталоге ./output/rootfs_wb6x
то делаем chroot в нее:
# ./output/rootfs_wb6x/chroot_this.sh
и можно изменить параметры и/или добавить пакеты. Добавим, например, lsof
# apt update && apt install lsof -y
Не забывайте выйти из chroot
# exit
Сборка образа для загрузки на контроллер
Скрипты для сборки образов находятся в директории images. Перед сборкой образа необходима готовая корневая ФС.
Не забывайте установить путь у ФС в переменную ROOTFS
Пример: собираем образ прошивки для Wiren Board 6x, корневая ФС находится по пути $ROOTFS:
# ./image/create_images.sh 6x
Владельцем созданных файлов образов будет пользователь root, поэтому после создания файла может понадобиться отдельно дать доступ к нему обычным пользователям, например, так:
# chown a+rw -R ./output/images/
Готовый образ будет лежать по пути output/image/<current_datetime>/<current_datetime>_webupd_wb<board>.fit
.