В настоящее время я разрабатываю систему обновления OTA/FOTA, которая должна запускаться во встроенном устройстве с ARM CORTEX M0 +. Моя основная проблема - нехватка места FLASH и пропускная способность сети с низкой пропускной способностью, поэтому дельта-патчи должны быть меньше, тем лучше.bsdiff без сжатия генерирует большие файлы дельта-патчей
Чтобы получить этот результат, я провел некоторое исследование и нашел несколько алгоритмов и инструментов двоичного типа, таких как bsdiff, xdelta или courgette. Моя проблема со всеми из них был размер, потому что мне нужно иметь очень небольшое собранное приложение для запуска, поэтому я получил bsdiff автономную версию (на самом деле они были 2 версии: bsdiff автономные и minibsdiff):
https://github.com/Cheedoong/bsdiff
https://github.com/thoughtpolice/minibsdiff
Первый до сих пор использует bzip2, но является автономным и наиболее подходит для встраиваемых систем, но я хотел бы проверить 2 вещи:
Как размер несжатой дельта. Поэтому я попытался удалить всю логику bzip2, получив это. Я был очень удивлен, когда заметил, что размер дельты был похож на размер полного исходного файла, поэтому я подпрыгнул во второй источник - мини-диск.
Minibsdiff - это bsdiff, но без какого-либо сжатия вообще, позволяя вам использовать любое сжатие, которое вы хотите. Это помогло мне также проверить, что я не ошибаюсь и что созданный несжатый дельта-патч был того же размера (или немного больше, потому что заголовок и другие, как я полагаю), чем исходный файл, который я хотел установить.
Итак ... Что здесь происходит? Я читал немного по-разному, что очень похожие файлы генерируют большие патчи, но ... во время тестов я использовал файлы размером 8 КБ, получение несжатых патчей размером 8 КБ не является решением, потому что тогда, возможно, лучше всего сжать файл и заменить старый один за новый. Я чувствую, что что-то упускаю.
Любая идея будет очень оценена.
Спасибо всем.
С уважением,
Iván.
Не знаете, каков ваш реальный вопрос. Вы уже описали «что здесь происходит». Но если вы различаете, вам нужно слить цель с фактическим содержимым перед миганием. В любом случае, без дальнейших подробностей трудно дать полезный ответ. Возможно, вам придется сначала подумать немного дольше. – Olaf
Hello Olaf. Мой вопрос в том, почему это происходит, потому что я притворяюсь, что получаю небольшие дельта, а не те, которые имеют тот же размер, что и исходный файл. Я пытаюсь изучить сортировку суффикса, которую реализует bsdiff, потому что, возможно, не подходит для файлов размером 250 КБ или меньше. И да, если я diff, я должен объединиться, но файл diff является огромным и должен быть небольшим, по крайней мере, меньшим, чем оригинал. Если я не пойду дальше, это потому, что я притворяюсь, что не разрабатываю свой собственный алгоритм, а используя тот, который уже используется. Спасибо, в любом случае. – Fulgor3
Существуют различные способы кодирования различий между файлами. У каждого есть свое приложение. Все зависит от того, что вы ожидаете. Если ваше ожидание не заполнено, вы можете сдуть концепцию. На это нет простого ответа, и вопрос - даже после того, как вся информация будет предоставлена - будет слишком широкой. Сделайте несколько тестов, посмотрите файлы, возможно, определите свой собственный формат/инструменты. Если вы не можете понять и/или не испытываете недостатка в опыте, нанимайте консультанта, и вам нечего стыдиться. В любом случае, переполнение стека не является консультационным сайтом. – Olaf