2482
правки
Lexszero (обсуждение | вклад) |
Admin (обсуждение | вклад) |
||
Строка 2: | Строка 2: | ||
'''Внимание! На данный момент эта функция является экспериментальной.''' | '''Внимание! На данный момент эта функция является экспериментальной.''' | ||
</blockquote> | </blockquote> | ||
== Обновление прошивки через веб-интерфейс == | |||
== | |||
== Информация для разработчиков == | |||
=== Формат файла обновления === | === Формат файла обновления === | ||
Используется Flattened Image Table (FIT). Это современный формат используемый u-boot для хранения нескольких частей прошивки в одном файле. Фактически этот формат совместим с Device Tree (DTB) и для работы с ним используются те же утилиты (dtc, fdtget, ...). | Используется Flattened Image Table (FIT). Это современный формат используемый u-boot для хранения нескольких частей прошивки в одном файле. Фактически этот формат совместим с Device Tree (DTB) и для работы с ним используются те же утилиты (dtc, fdtget, ...). | ||
Строка 15: | Строка 19: | ||
Более подробно о FIT можно узнать из [https://lxr.missinglinkelectronics.com/#uboot/doc/uImage.FIT/howto.txt документации u-boot]. | Более подробно о FIT можно узнать из [https://lxr.missinglinkelectronics.com/#uboot/doc/uImage.FIT/howto.txt документации u-boot]. | ||
Обновление для | Обновление для Wiren Board в формате FIT содержит следующие элементы: | ||
* '''Метаданные''': описание, версия, информация о модели для которой предназначено обновление, и т.д. Эта информация хранится в свойствах (properties) корневого узла и на данный момент не используется | * '''Метаданные''': описание, версия, информация о модели для которой предназначено обновление, и т.д. Эта информация хранится в свойствах (properties) корневого узла и на данный момент не используется | ||
* '''install''': bash-скрипт, который запускается в Linux после загрузки образа. Этот скрипт и производит всю работу по обновлению | * '''install''': bash-скрипт, который запускается в Linux после загрузки образа. Этот скрипт и производит всю работу по обновлению | ||
Строка 33: | Строка 37: | ||
Отдельный общий для двух rootfs раздел /mnt/data позволяет иметь некоторые части системной конфигурации одинаковыми. Например, это важно для настроек сети и авторизации. Так же на этом разделе хранятся логи, база данных MQTT, кэш apt и директория закачек веб-сервера (чтоб не занимать место на rootfs). | Отдельный общий для двух rootfs раздел /mnt/data позволяет иметь некоторые части системной конфигурации одинаковыми. Например, это важно для настроек сети и авторизации. Так же на этом разделе хранятся логи, база данных MQTT, кэш apt и директория закачек веб-сервера (чтоб не занимать место на rootfs). | ||
Образ SD-карты, создаваемый скриптом image/create_image.sh содержит только uboot и первую rootfs. Остальные разделы создаются при необходимости при первой загрузке. | Образ SD-карты, создаваемый скриптом ''image/create_image.sh'' содержит только uboot и первую rootfs. Остальные разделы создаются при необходимости при первой загрузке. | ||
При первой загрузке rootfs некоторые файлы переносятся в /mnt/data с сохранением бэкапов в rootfs и заменой оригиналов симлинками. Это происходит в скрипте /etc/rc.local, выполняющимся последним при загрузке. Если нужный файл уже существует в /mnt/data, то он используется без замены - это необходимо для использования имеющейся конфигурации при загрузке "свежей" rootfs после обновления прошивки. Также этот раздел можно очистить, при этом после перезагрузки будет восстановлена стандартная конфигурация. | При первой загрузке rootfs некоторые файлы переносятся в /mnt/data с сохранением бэкапов в rootfs и заменой оригиналов симлинками. Это происходит в скрипте /etc/rc.local, выполняющимся последним при загрузке. Если нужный файл уже существует в /mnt/data, то он используется без замены - это необходимо для использования имеющейся конфигурации при загрузке "свежей" rootfs после обновления прошивки. Также этот раздел можно очистить, при этом после перезагрузки будет восстановлена стандартная конфигурация. | ||
Строка 58: | Строка 62: | ||
Все нужные скрипты есть в той же ветке репозитория wirenboard. | Все нужные скрипты есть в той же ветке репозитория wirenboard. | ||
< | <syntaxhighlight lang="bash"> | ||
$ cd wirenboard | $ cd wirenboard | ||
$ ./image/create_update.sh <path_to_roots> <update file> | $ ./image/create_update.sh <path_to_roots> <update file> | ||
</ | </syntaxhighlight> | ||
При этом в апдейт включается '''install''' из файла '''image/install_update.sh''' и собирается tar.gz с rootfs из указанной директории (также можно указать уже имеющийся tar.gz). | При этом в апдейт включается '''install''' из файла '''image/install_update.sh''' и собирается tar.gz с rootfs из указанной директории (также можно указать уже имеющийся tar.gz). | ||
== Загрузка обновления на | == Загрузка обновления на Wiren Board == | ||
< | <syntaxhighlight lang="bash"> | ||
$ curl -v -F "file=@wb-update.fit" http://192.168.0.33/fwupdate/upload | $ curl -v -F "file=@wb-update.fit" http://192.168.0.33/fwupdate/upload | ||
</ | </syntaxhighlight> | ||
Загруженный файл попадает в /var/www/uploads/, где обнаруживается скриптом '''wb-watch-update''' и при полной загрузке (проверяется наличие сигнатуры в конце файла) - запускается скрипт '''wb-run-update''' (оба этих скрипта лежат в пакете wb-utils), который проверяет контрольную сумму скрипта '''install''' и запускает его на исполнение. | Загруженный файл попадает в /var/www/uploads/, где обнаруживается скриптом '''wb-watch-update''' и при полной загрузке (проверяется наличие сигнатуры в конце файла) - запускается скрипт '''wb-run-update''' (оба этих скрипта лежат в пакете wb-utils), который проверяет контрольную сумму скрипта '''install''' и запускает его на исполнение. | ||
Лог выполнения обновления сохраняется в файл /var/log/update.log (он же /mnt/data/var/log/update.log) | Лог выполнения обновления сохраняется в файл /var/log/update.log (он же /mnt/data/var/log/update.log) |