vin2809

Средство для работы с прошивками устройств Moto от Lenovo

В этой теме 7 сообщений

средство.jpg

 

 

Здесь будут размещаться материалы по структуре прошивок от Moto, практические рекомендации по обработке таких образов, а также средство по работе с образами разделов мобильных устройств Moto от Lenovo.

 

Теория.

 

Практические рекомендации.

Спойлер
  • Как собрать файлы _sparsechunk от Moto в один файл?
  • Как разобрать sparse-файл на файлы _sparsechunk для Moto?

 

Средства по обработке образов Moto.

 

3 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И так, пока немного теории.

Структура образа раздела Logo от Motorola

Структура образа раздела Logo от Motorola

1.Введение.

   Мобильные устройства Moto фирмы Lenovo имеют отдельный раздел для хранения изображений, используемых при работе ОС (system), а также при загрузке (boot) и восстановлении (recovery). Образ этого раздела хранится в виде файла, называемого чаще всего logo.bin.
   Чтобы отличать его от файлов-образов других производителей, я буду называть logo.bin для Moto как "MotoLogo" файлом.

 

2.Структура образа файла MotoLogo.

   Образ файла MotoLogo состоит из следующих частей:

  • заголовок;
  • описание файлов-изображений
  • массив файлов, содержащих отдельные изображения, называемых MotoRun-файлы.

   Размер описания файлов-изображений может меняться в зависимости от количества файлов MotoRun.
   Начало каждой части MotoLogo-файла и каждого отдельного MotoRun-файла располагается строго на границе 0х200. Свободное пространство до следующей границы заполняется символом 0хFF.
   Непосредственно изображения хранятся в RAW формате (порядок размещения BGR глубиной 24 бита) и в сжатом виде. Для сжатия используется RLE-кодирование. Такой сжатый массив байт и сохраняется в виде MotoRun-файла в третьей части MotoLogo-файла.

  2.1.Структура заголовка MotoLogo.

   Заголовок файла LogoMoto содержит следующие поля:
==================================================
 №   Смещение,  Длина,  Название      Назначение
        байт             байт
==================================================
  1    0x0000         9           Magic             Сигнатура logo-файла
  2    0x0009         4           SizeHeader    Размер заголовка
==================================================


   Поле Magic содержит строку из 9 символов: "MotoLogo" с завершающим нулем (0х00).
   Поле SizeHeader содержит размер заголовка в байтах.
  2.2.Список описаний MotoRun-файлов.

    Список описаний располагается непосредственно сразу за заголовком MotoLogo и содержит описания всех MotoRun-файлов, включенных в  MotoLogo-файл.
========================================================
 №   Смещение   Длина,   Название      Назначение
        байт             байт
========================================================
 1    0x000D         n*32        ListFiles        Список описаний файлов MotoRun
========================================================

    Описание каждого MotoRun-файла имеет размер 32 байта и содержит следующие атрибуты файла:
======================================================
№   Смещение,   Длина,   Название     Назначение
       байт              байт
======================================================
 1    0x0000          24           FileName      Имя файла MotoRun
 2    0x0018            4           OffsetFile      Смещение файла MotoRun
 3    0x001C           4           SizeFile         Размер файла MotoRun
======================================================

    Поле FileName содержит имя файла изображения длиной до 24 байт. Свободное место  заполняется нулями (0x00).
    Поле OffsetFile  содержит смещение в байтах от начала файла MotoLogo до точки  размещения файла MotoRun.
    Поле SizeFile содержит размер массива байт, в который превращается искомый файл  изображения после кодирования.

  2.3.Структура массива файлов изображений MotoRun.

    Массив MotoRun-файлов содержит последовательно размещенные на границе 0х200 MotoRun-файлы. Порядок размещения определяется по списку описаний MotoRun-файлов.
    Каждый MotoRun-файл содержит следующие поля:


=========================================================
№   Смещение,  Длина,  Название      Назначение
      байт             байт
=========================================================
1    0x0000          8         Magic            Сигнатура MotoRun-файла
2    0x000C         2         Width             Размер изображения по горизонтали
3    0x0010         2         Height             Размер изображения по вертикали
4    0x0014         -          BGR               Массив пикселей в формате BGR
=========================================================

  Поле Magic содержит строку из 8 символов: "MotoRun" с завершающим нулем (0х00).
  Поля Width и Height содержат значения размера изображения по горизонтали и вертикали в прямом порядке размещения байт: сначала старший, затем младший.
  Поле BGR содержит непосредственно изображение, представленное в виде массива пикселей, сжатого при помощи RLE-кодирования. Массив пикселей содержит значения цвета в формате RAW, в порядке BGR и глубиной 24 бита на пиксель, т.е. по 3 байта на пиксель.
 

3.Описание процесса RLE-кодирования.

 

  Само RLE-кодирование подразумевает разбиение потока (массива) элементов на серии (run) из оригинальных, отличающихся от соседних, и повторяющихся элементов. Затем серия повторяющихся элементов заменяется одним, т.к. все остальные элементы имеют тоже значение, с добавлением к нему числа элементов в серии.
  Тем не менее, в MotoLogo-файле есть свои особенности:

  • т.к. обрабатывается изображение, то весь поток байтов кодируется построчно, а сравниваются соседние не байты, а пиксели. При этом нужно учесть, что на  каждый пиксель отводится 3 байта;
  • длина серии представляется двухбайтовым словом, расположенным перед пикселем при кодировании серии повторяющихся пикселей или перед серией оригинальных пикселей;
  • для различения повторяющихся серий пикселей от оригинальных используется знаковый бит двухбайтового слова: отрицательное значение означает серию повторов;
  • серия повторов из двух пикселей интерпретируется как серия оригинальных.

 

 4.Литература.
  http://forum.xda-developers.com/showpost.php?s=6b7039cf8f060ecc478298f8b2e51d62&p=48859155&postcount=136 - заметка с кратким описанием структуры файла logo.

 

Copyright (C) vin2809, 2016

 

 

 

4 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Продолжим теоретические изыскания...

Что такое sparse-файлы?

Спойлер

1.Введение.
  Sparse-форма применяется для уменьшения размера образов разделов, что экономит память и облегчает процедуру установки и обновления прошивок мобильных устройств.
  Sparse-файл состоит из:

  •   заголовка файла;
  •   и данных, т.е. массива кусков.

  Принцип получения такого файла можно представить таким образом:

  •  файл рассматривается как массив 4-хбайтовых данных;
  •  выполняется поблочный просмотр массива данных. В зависимости от содержимого выделяются:
    •  "пустые" блоки, содержащие нули или ПОВТОРЯЮЩИЕСЯ данные, т.е. одинаковые во всем блоке;
    •  "информационные" блоки, содержащие хотя бы пару НЕПОВТОРЯЮЩИХСЯ данных в пределах всего блока.
  •  затем эти блоки, по возможности, группируются в "пустые" части, состоящие из подряд идущих "пустых" блоков. При этом учитывается повторяющееся ЗНАЧЕНИЕ, а подряд идущие информационные блоки - в "информационную" часть.
  •  далее все полученные части конвертируются в куски файла sparse-формата. При этом "информационная" часть, содержащая неповторяющиеся данные, полностью, без изменений, копируется в область данных куска Raw. А "пустая" часть, содержащая повторяющиеся данные, заменяется на одно повторяющееся данное, которое тоже копируется в область данных куска Fill.

Результатом таких действий становится существенное сжатие размера выходного файла. Например, образ раздела cache размером в 400 Мб становится файлом, имеющим размер порядка нескольких мегабайт.
  В последнее время стала часто использоваться, например, для устройств Moto фирмы Lenovo, и еще одна разновидность sparse-файла, которая представляет собой также созданный sparse-файл, но разделенный на несколько файлов-частей, размер которых не превышает заранее заданного значения.

 

 

Спойлер

2.Заголовок sparse-файла.
  Заголовок имеет следующее строение:
===========================================================================
№    Смещение,   Длина,   Название               Назначение
        байт              байт
===========================================================================
 1     0x0000          4             Magic                      Сигнатура sparse-файла
 2     0x0004          2             MajorVersion          Старшая часть версии формата sparse-файла
 3     0x0006          2             MinorVersion          Младшая часть версии формата sparse-файла
 4     0x0008          2            FileHeaderSize        Размер заголовка файла, байт
 5     0x000A          2            ChunkHeaderSize   Размер заголовка куска файла, байт
 6     0x000C         4            BlockSize                 Размер блока файла
 7     0x0010          4            TotalBlk                   Размер выходного файла, блоков
 8     0x0014          4            TotalChunks            Всего кусков во входном файле
 9     0x0018          4            ImageChecksum     Контрольная сумма выходного файла
10    0х001С         4            Reserved                 Резерв (используется только в версии 2)
============================================================================

   Поле Magic содержит сигнатуру (идентификатор) sparse-файла. Это число 0xed26ff3a.

   Поля Major Version и Minor Version содержат номер версии формата sparse-файла. Чаще всего используется версия 1.0.
   Поле FileHeaderSize содержит размер в байтах заголовка sparse-файла. В настоящее время существует две версии заголовка, отличающихся только размером: 0х1С(28) байт и 0х20(32) байта. Соответственно и это поле содержит число или 0х1С, или 0х20.
   Поле ChunkHeaderSize содержит размер заголовка всех кусков sparse-файла независимо от их типа. Оно содержит число 0х0С(12).
   Поле BlockSize содержит размер блока файла как входного (ext4), так и выходного (sparse). Т.к. сжатие в sparse-файл используется, в основном, для образов ФС, то значение этого поля должно соответствовать размеру блока сжимаемого образа.
   Поле Total_Blk содержит размер выходного файла (sparse) в блоках.
   Поле Total_Chunks содержит число частей, на которые был разделен исходный (входной) файл. Столько же кусков содержится и в выходном файле (sparse).
   Поле Image_Checksum содержит контрольную сумму данных выходного файла (sparse), рассчитанную по алгоритму Crc32.

 

Спойлер

3.Структура кусков sparse-файла.
  Каждый кусок имеет заголовок куска и данные куска.
  Заголовок имеет длину 0х0С (12) байт и содержит следующие поля:
====================================================================
№   Смещение,    Длина,   Название         Назначение
       байт               байт
====================================================================
1     0x0000           2            ChunkType        Тип куска        
2     0x0002           2            Reserved           Резерв         
3     0x0004           4            ChunkSize         Размер куска в выходном файле, блоков
3     0x0008           4            TotalSize           Размер куска во входном файле, байт
====================================================================

  Поле ChunkType содержит идентификатор куска и может принимать следующие значения: 0xCAC1, 0xCAC2, 0xCAC3, 0xCAC4.
  Описание кусков приведено ниже:
==========================================================================================================
№   Тип            Значение     Размер    Назначение
==========================================================================================================
1     Raw           0xCAC1       12+n         Кусок содержит информационную часть длиной n байт полностью совпадающую со

                                                             входной частью.
2     Fill              0xCAC2       16            Кусок содержит закодированное количество "пустых" или повторяющихся чисел входной

                                                             части. В области данных куска находится это повторяющееся число
3     DontCare   0xCAC3       12            Кусок не содержит данных.
4     Crc             0xCAC4       16            Кусок содержит контрольную сумму файла, рассчитанную по алгоритму Crc32.
==========================================================================================================

  Поле Reserved не используется и всегда равно нулю.
  Поле ChunkSize содержит размер куска во входном файле (img), выраженный в блоках.
  Поле TotalSize содержит размер куска в sparse-файле (заголовок+данные), выраженный в байтах.

 

  Следом за заголовком располагаются данные.
  Кусок типа Raw предназначен для хранения не повторяющихся данных, которые полностью совпадают с данными соответствующей ему части входного файла.
  Кусок типа Fill в качестве данных содержит только ОДНО 4-х байтовое число, повторяющееся в соответствующей ему части входного файла. Он предназначен для обозначения области, занятой этими повторяющимися данными без их перечисления.
  Кусок типа Crc содержит контрольную сумму файла, рассчитанную по алгоритму Crc32.
  Исключением является кусок типа DontCare, который вообще не содержит данных, но поле ChunkSize все равно заполняется. При декодировании (разборке) sparse-файла он, как скобки в уравнении, показывает, что дальше еще что-то есть, размер которого и содержится в поле ChunkSize.

 

4.Литература.
1. system/core/libsparse/sparse_format.h
2."Разрежённый файл", https://ru.wikipedia.org/wiki/Разрежённый_файл.

4 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

После изучения теории по строению образов Logo я собрал консольное приложение, которое их обрабатывает.

 

Приложение MotoLogo_v1.0

 

Возможности.

Обрабатывает файлы различных форматов: bmp, emf, exif, gif, jpeg, png, tiff, wmf, raw.

Позволяет выполнить следующие операции:

  • просмотреть параметры содержимого в виде xml-файла;
  • распаковать содержимое на отдельные файлы-изображения;
  • собрать образ Logo из готовых изображений.

 

Требования:

  • ОС Windows 7;
  • пакет .NET 4.0

 

Установка:

Распаковать архив в любую папку. В комплект входит:

  • само консольное приложение MotoLogo.exe;
  • библиотека кодера RleCoder.dll;
  • вспомогательная библиотека WinFileHelper.dll

 

Скачать актуальную версию: 

2 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Опять теория...

Что такое Motoboot-файл?

 

Спойлер

1.Введение.

  Файл motoboot является образом раздела  и содержит набор предзагрузчиков устройства Moto фирмы Lenovo. Он состоит из:

  •  заголовка;
  •  массива данных;
  •  цифровой подписи (ЦП).

 

Спойлер

2.Структура заголовка.

   Заголовок занимает 0х400 (1024) байт и содержит:

  •    поле, указывающее число предзагрузчиков;
  •    список описателей предзагрузчиков;
  •    список типов ЦП.

   Все поля расположены следующим образом:


=====================================================================
     Смещение,    Длина,    Название       Назначение
        байт               байт
=====================================================================
1      0x0000           4            CountDL          Число предзагрузчиков
2      0x0004          n*32       FilesDL             Список описателей предзагрузчиков
=====================================================================

 Поле CounDL содержит число предзагрузчиков, помещенных в motoboot-файл.
   Поле FilesDL содержит список описателей предзагрузчиков, по одной записи на каждый.
   Поле ListSign содержит описатель типов ЦП и имеет размер 0х20 (32) байт. Он содержит следующие поля:


==========================================================
    Смещение,    Длина,     Название       Назначение
        байт             байт
==========================================================
1      0x0000         24            Name             Имя раздела предзагрузчика
2      0x0018           4            FirstBlock        Первый блок размещения предзагрузчика
3      0x001С           4           LastBlock        Последний блок размещения предзагрузчика
==========================================================
  

   Поле Name содержит имя раздела предзагрузчика длиной до 24 байт.
   Поле FirstBlock содержит номер первого блока размещения предзагрузчика в motoboot-файле.
   Поле LastBlock содержит номер последнего блока размещения предзагрузчика в motoboot-файле.
  Далее по смещению 0х0284 расположен список типов ЦП, содержащий:

  •    название версии motoboot-файла;
  •    непосредственно список типов ЦП.

 


==================================================================================
    Смещение,    Длина,    Название       Назначение
        байт              байт
==================================================================================
1      0x0000          8            VersName       Название версии motoboot
2      0x0008         n*12        ListSign          Список типов ЦП.
==================================================================================

Поле VersName содержит строку до 7 символов названия, завершенную символом нуль (0x00). Далее расположены описатели типов ЦП, каждый из которых содержит следующие поля:


==================================================================================
    Смещение,    Длина,    Название       Назначение
        байт              байт
==================================================================================
1      0x0000          4            NumDL           Порядковый номер загрузчика
2      0x0004          8            SigName        Тип цифр.подписи
==================================================================================

  Поле NumDL содержит порядковый номер предзагрузчика в motoboot-файле.
  Поле SigName содержит тип ЦП. Допустимы следующие значения:

  •     - HABSIG;
  •     - тип модели устройства (MSM8974 и др.).

 

Спойлер

3.Структура массива данных.
   Поле данных содержит код предзагрузчиков, расположенный последовательно без разрывов, но размещенный на границе блока.

 

4.Литература.
  1.https://github.com/laginimaineb
  2.motoboot.img из прошивки  victara_retcn-user 5.1 LPE23.32-53 41 release-keysMSM8974BP_4235210.110.09.17R

 

 

3 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В прошивках мобильных устройств стали активно использоваться методы, уменьшающие размеры файлов образов "больших" разделов. Это касается разделов, содержащих файловые системы (ФС), например, cache, system, userdata. Настало время посмотреть, а что они из себя представляют.

 

Заметки об образах разделов, содержащих ФС

 или зачем нужны dat-, sparse- и _sparsechunk-файлы.

 

Спойлер

1. Введение.
    Все образы, содержащие файловую систему (ФС), имеют большие размеры. Особенно выделяются userdata и system. Эти особенности образов с ФС требуют от разработчика прошивок применения "хитростей" при выполнении операций установки прошивки или ее обновлений.
    Для уменьшения размера образов в настоящее время применяют следующие способы:

  • разрезание на части;
  • сжатие образа (кодирование).

    В основе первого способа лежит уменьшение размера образа за счет разбиения его на несколько частей. При этом размер каждой не должен превышать допустимое значение.
    При втором способе используется сжатие образа за счет применения кодирования без потери данных.

 

Спойлер

2. Разрезание на части (куски).
    Исходный образ, имеющий img-формат, делится на части размером не более заданного значения. Чаще всего это 128 или 256 Мб. При этом дополнительно создается файл, описывающий размещение этих частей в образе. Например, прошивки мобильных устройств на основе процессоров Qualcomm имеют файл rawprogram.xml, который как раз и содержит такую информацию. При этом за "границу" куска у Qualcomm принято значение 128Мб.
    Процесс разрезания можно описать таким алгоритмом:

  • выбирается значение "границы". Она должна быть кратна размеру блока ФС и не превышать допустимый размер файлов для передачи при помощи OTA-обновления или через fastboot;
  • просматривается входной образ и делится на части размером, не превышающим "границу". Затем из каждой части формируется выходной кусок по особым правилам:
    • если рассматриваемая часть образа содержит данные, отличающиеся от нуля, то они полностью копируются в выходной кусок;
    • если рассматриваемая часть образа содержит нулевые данные, то выходной кусок будет иметь размер в один блок, состоящий из нулей (0х00);
    • если рассматриваемая часть образа содержит немного информации и много нулевых данных, то выходной кусок будет содержать только информационную часть;

  •  весь процесс разрезания прописывается в файл. Сохраняется название куска, смещение в прошивке и размер части, соответствующей этому куску.
  •     За счет отсечения нулевых данных происходит существенное уменьшение размеров кусков.
        При восстановлении создается новый пустой образ, имеющий размер исходного. Затем в него последовательно считываются куски и располагаются в образе согласно информации из файла размещения.

 

Спойлер

3. Сжатие.
    Для уменьшения размера образа путем сжатия (кодирования) применяют несколько способов:

  •  создание sparse-файлов и их модификации _sparsechunk-файлов;
  •  создание dat-файлов.

    Sparse-файлы активно используются в прошивках Moto фирмы Lenovo, например, в устройстве Moto G, _sparsechunk-файлы применяются в Moto Z, а dat-файлы применяются в прошивках ОТА-обновлений, например, для А7010.

 

3.1. Sparse-файлы.
    Sparse-сжатие является развитием процесса разрезания файлов. Полная структура sparse-файла описана в [4.1], а принцип получения можно описать таким алгоритмом:

      1) исходный файл рассматривается как массив четырехбайтовых данных;
      2) просмотр массива выполняется поблочно. В зависимости от содержимого блока выделяются:

  •    блоки без информации, т.е. "пустые", содержащие нули или ПОВТОРЯЮЩИЕСЯ данные, т.е. одинаковые во всем блоке;
  •    "информационные" блоки, содержащие НЕПОВТОРЯЮЩИЕСЯ данные в пределах всего блока.

      3) подряд идущие "пустые" блоки группируются в "пустые" части. При этом учитывается повторяющееся ЗНАЧЕНИЕ, а подряд идущие информационные блоки - в "информационную" часть.
      4) все полученные части конвертируются в куски файла sparse-формата. При этом "информационная" часть, содержащая не повторяющиеся данные, полностью, без изменений, копируется в область данных куска Raw. А "пустая" часть, содержащая повторяющиеся данные, заменяется на одно повторяющееся данное, которое тоже копируется в область данных куска Fill.
   Имеется и модификация sparse-файла, получившая название _sparsechunk-файлов, которая представляет собой тот же sparse, но "разрезанный" на части меньшего размера. Это позволяет использовать такое сжатие для передачи обновлений по ОТА или через fastboot, не нагружая при этом сеть.
 

3.2.Dat-файлы.
   Dat-файл представляет собой следующую ступень сжатия образов разделов. В отличие от sparse-файла он содержит ТОЛЬКО информационные части. А для обеспечения сборки исходного файла создается файл, называемый transfer_list. Структура transfer_list и dat-файлов описаны в [4.2, 4.3].
   При этом исходный файл делится на части, содержащие полезную информацию (инфо-блоки) и "пустые", т.е. содержащие нули.
   Затем все части с информацией копируются подряд в выходной файл, называемый new_data, а информация об их размещении в исходном файле и размер этих частей заносится в файл transfer_list.
   Таким образом, конечный файл с информацией (new_data) не содержит блоков с нулями, т.е. "сжимается", становясь меньше по размеру, чем исходный.
   Возможности такого преобразования данных и, соответственно, формат файла transfer_list претерпевают некоторые изменения. Первоначально он содержал
 информацию, необходимую только для "разжатия", т.е. для восстановления полного исходного файла. Это была версия 1, которая используется для сжатия файлов в ОС Android 5.0.0.
   Затем, кроме простого сжатия, при помощи dat-файла и transfer_list'а стали делать файлы-патчи для замены только некоторых частей исходного файла, например, патч для recovery, так появилась версия 2, используемая в ОС Android 5.1.0.
   В ОС Android 6.0 сильно изменился подход к системе безопасности, повсеместно используется шифрование, соответственно на свет появилась версия 3 файла transfer_list, позволяющая выполнять его на лету.

 

Спойлер

4. Литература.

  1. Что такое sparse-файл?
  2. Что такое dat-файл?
  3. Что такое transfer_list-файл?

 

Copyright (C) vin2809, 2016

2 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что такое _sparsechunk-файлы?

 

Спойлер

1.Введение.
   Некоторые мобильные устройства, если не сказать, что МНОГИЕ, имеют ограничение на размер обрабатываемого при установке или обновлении файла, содержащего образ раздела. Т.е. с увеличением объема передаваемой информации внутрь мобильного устройства (читай, размера файлов, передаваемых при помощи adb или fastboot) у разработчиков средств передачи этих файлов появились трудности реализации...

   Описание путей решения данной проблемы Вы можете посмотреть в [1].
   Рассмотрим один из способов решения - искусственное уменьшение размера порции информации, передаваемой за один сеанс. Так и появились файлы типа _sparsechunk, содержащие такую "порцию" образа раздела. Теперь образ раздела содержится не в одном, а в наборе таких файлов.

 

Спойлер

2.Строение файла _sparsechunk.
   По структуре файл типа _sparsechunk представляет собой обычный sparse-файл [3.1], но содержащий не весь, а только часть физического объема информации (например, образа раздела). Размер этой части в сжатом состоянии, т.е. в sparse-виде, не должен превышать заранее заданного значения. В настоящее время эта величина, т.е. "граница" размера _sparsechunk-файла, составляет, как правило, 256 Мб (268 435 456 байт). Следующая часть sparse-файла содержится в следующем _sparsechunk-файле и т.д. Внешне эти файлы различаются индексом в названии, который и определяет последовательность их обработки при декодировании.
   Т.о. сначала образ раздела кодируется в sparse-файл, а затем уже преобразовывается в набор _sparsechunk-файлов.
   Процесс создания (кодирования) _sparsechunk-файла можно описать следующим алгоритмом:

  1. просматривается готовый sparse-файл, последовательно расположенные куски (chunks) собираются в группу и подсчитывается ее длина. Процедура выполняется до того момента, пока размер группы не превысит границы, значение которой указывается заранее и определяется требованиями, перечисленными выше. Если присоединение следующего куска приведет к превышению границы, то он не включается в группу, а из уже сгруппированных кусков формируется отдельный файл *_sparsechunk.0;
  2. продолжается просмотр sparse-файла по методике п.1, только перед формированием _sparsechunk-файла к группе sparse-кусков спереди добавляется sparse-кусок типа DontCare, который означает сдвиг позиции в файле. Так продолжается до достижения конца sparse-файла.

   Итак, _sparsechunk-файл состоит из трех частей, которые я назвал:

  •  START;
  •  INFO;
  •  OFFSET_TO_END.

   Часть START представляет собой sparse-кусок типа DontCare, поле Chunk_Size которого, содержит смещение до начала группы, содержащей информацию в кодированном виде. Если смещение до инфо-группы равно нулю, т.е. рассматриваемый файл является первым в наборе _sparsechunk-файлов, то часть START вообще отсутствует.
   INFO это сама группа информации в кодированном виде, состоящая только из sparse-кусков типа Fill и Raw.
   OFFSET_TO_END представляет собой sparse-кусок типа DontCare, поле Chunk_Size которого содержит расстояние до конца файла. Если оно равно нулю, т.е. рассматриваемый файл является последним в наборе _sparsechunk-файлов, то часть OFFSET_TO_END вообще отсутствует.

 

3.Источники информации.

  1.Заметки об образах разделов, содержащих файловые системы.

  2.Что такое sparse-файл?

  3.Прошивка Victara_Retail_China_XT1085_5.1_LPE23.32-53_CFC.

 

Copyright (C) vin2809, 2016

4 пользователям понравился пост

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу