vin2809

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

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

Средство обработки образов фирмы Lenovo из командной строки Windows.

 

    Любой ромодел для общения с аппаратами Lenovo использует специальные средства QFIL и QPST, написанные под операционную систему Windows. Поэтому логичнее было бы и содержимое прошивок, т.е. отдельные образы (boot, recovery, system и т.д.) обрабатывать тоже под Windows. Для этого я и создал средство LenovoWinTools.
    Одновременно с этим сёрфинг по сайтам разработки прошивок и общение с их посетителями показало, что по строению Qualcomm-файлов существует большой пробел с информацией, что приводит к затруднениям при разработке прошивок или изменению существующих.

    В этой теме я по мере сил и возможностей постараюсь исправить это в разделе "Теория".
Ну и по мере накопления практических навыков будут появиться  и рекомендации, т.е. будет наполняться раздел "Практические рекомендации".

 

Теория

 

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

 

Средство

Спойлер

LenovoWinTools_1.3.zip                       Readme_v1.3.zip

LenovoWinTools_1.1.zip                     

LenovoWinTools_1.0.7z                        Readme_LenovoWinTools_v1.0.txt

 

 

Я сделал консольный вариант редактора прошивок *.qsb и на его основе получилось вот такое средство для обработки образов - LenovoWinTools. Вот некоторые картинки меню средства LenovoWinTools:

Спойлер

1.pngbooty.pngqsb.pngsystem.png


Текущая версия средства: v_1.3.

Оно позволяет:

Спойлер

1) обработать образ прошивки для Qualcomm типа .qsb:
             - разобрать его;
             - сложить кусочные файлы прошивки (system, cache, preloader, persist, userdata);
             - вывести перечень содержимого прошивки без ее разборки;
             - распечатать разметку памяти (файл GPT).
2) обработать образы Boot.img/Recovery.img:
             - распаковать и запаковать с учетом секции second и дерева  устройств devtree;
             - распаковать дерево устройств;
             - обрабатываются образы, использующие сжатие:
                       gzip;
                       lzma;
                       lzop;
                       lz4;
                       xz.
3) распаковать и запаковать образы, содержащие файловые системы типа ext2-ext4;
4) конвертировать разреженный файл типа sparse в образ типа ext4;
5) обработать файл splash.img.
     - распаковать и сохранить изображение, содержащееся в splash-файле, в одном из следующих форматов: bmp, emf, exif, gif, ico, jpeg, png, tiff, wmf. Формат выходного файла задается пользователем;
     - при сборке формат входного файла изображения определяется автоматически, а размер и имя выходного splash-файла берется из файла настроек. Это позволяет создавать splash-файлы практически из любых картинок, сохраняя их под требуемым именем и необходимого размера.
6) обработать файл msimage.mbn.

Требования:

  • наличие пакета .NET 4.0;
  • Windows 7.

Скачать средство можно в разделе "Средство"

Там же можно скачать и инструкцию пользователя.

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

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


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

Для желающих попробовать средство выкладываю 

 

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

 

Замечания:

  • используется сжатие только gzip'ом;
  • собранные образы не содержат цифровой подписи.

 

Спойлер

1.Работа с прошивкой *.qsb.

В этой рекомендации я расскажу, как выполнить следующие операции над прошивкой:

  • распаковка прошивки;
  • сборка прошивки;
  • разборка образов разделов boot/recovery/system и т.д.;
  • сборка образов разделов boot/recovery/system и т.д.

1.1.Распаковка прошивки.

  • кладем файл прошивки в папку _In и запускаем средство (файл menu.bat). При этом откроется главное меню средства;
  • выполняем инициализацию средства (команда "4-Init Tools" главного меню).

          При этом производится полное обновление содержимого рабочей среды средства:

                 -   все ранее созданные папки УДАЛЯЮТСЯ и создаются заново;

                 -   все имеющиеся в папке _In образы, кроме *.qsb и userdata.img, копируются в рабочую папку Unpack/Image.

  • переходим в подменю "Qsb" (команда "1-Qsb" главного меню)
  • выполняем распаковку прошивки (команда "1-Qsb unpack" подменю Qsb). Содержимое прошивки появится в папке с ее именем, расположенной в папке Qsb. Если в прошивке имеются образы boot или recovery, то они копируются в рабочую папку Unpack/Image;
  • выполняем сборку "кусочных" файлов (команда "3-Join chunk file" подменю Qsb).

               -------------------------------------------------------

               | Для выполнения этой команды в папке прошивке должен |

               | существовать файл rawprogram0.xml.                  |

               -------------------------------------------------------

Файлы собираются из кусочков (например, system_1, system_2 и т.д.), расположенных в указанной (выбранной Вами при выполнении команды) папке прошивки. При этом собранные файлы-образы будут помещены в рабочую папку Unpack/Image.

Обрабатываются следующие образы: cache, persist, preload, system, userdata.

 

1.2.Сборка прошивки.

1.2.1.Собрать прошивку можно "с нуля":

  • создаем в папке Unpack папку с именем прошивки;
  • помещаем содержимое будущей прошивки в эту папку;
  • для сборки прошивки выполняем команду "2-Qsb pack" подменю "Qsb".

               -------------------------------------------------------

               | Для выполнения этой команды в папке прошивке должен |

               | существовать файл rawprogram0.xml.                  |

               -------------------------------------------------------

Файл-образ готовой прошивки появится в папке Pack/Image.

1.2.2.Можно собрать прошивку на основе ранее разобранной.

Тогда после внесения изменений в распакованном содержимом выполните команду "2-Qsb pack" подменю "Qsb".

Файл-образ готовой прошивки появится в папке Pack/Image.

 

2.Работа с отдельными образами.

 

2.1.Распаковка файлов-образов разделов.

Для распаковки образов их нужно поместить в рабочую папку средства, т.е. подготовить.

2.1.1.Подготовка исходных файлов.

Есть три возможности "подсунуть" образы средству, т.е. в папку Unpack/Image:

  • положить нужные сразу в папку _In ДО инициализации. Тогда при ее выполнении (команда "4-Init Tools") ВСЕ образы (кроме *.qsb и userdata.img) будут скопированы в рабочую папку Unpack/Image;
  • образы boot.img и recovery.img скопируются туда из свежераспакованного образа прошивки (после выполнения команды "1-Qsb unpack" подменю Qsb), а образы с файловой системой появятся после выполнения сборки "кусочных" файлов (команда "3-Join chunk file" подменю "Qsb");
  • можно просто вручную поместить образы в рабочую папку Unpack/Image.

2.1.2.Собственно распаковка.

  • переходим в подменю "Boot/Recovery" (команда "2-Boot/Recovery" главного меню);
  • выполняем распаковку образов Boot или Recovery (команда "1-Unpack image").

Содержимое образа появится в папке Unpack/"имя образа" в виде дерева папок:

  • cfg содержит файл конфигурации образа. Состав полей может меняться в зависимости от типа образа (KRNL/ANDROID);
  • devtree содержит скомпилированный образ дерева устройств;
  • kernel содержит несжатый бинарный, т.е. скомпилированный, файл ядра;
  • ramdisk содержит полностью распакованный ramdisk образа;
  • second содержит второй раздел образа.

Некоторые папки, например, devtree, kernel, second, могут отсутствовать, если их содержимое не найдено в распаковываемом образе. Это зависит только от ТИПА и ВЕРСИИ образа.

  • переходим в подменю "System commands" (команда "3-System,cache,..." главного меню);
  • выполняем распаковку образов, содержащих файловую систему ext2-ext4 (команда "1-unpack ext3" или "3-unpack ext4").

Содержимое образа появится в папке Unpack/"имя образа" в виде дерева папок и файлов, находившихся в образе.

 

2.2.Сборка файлов-образов разделов.

Сборку файлов, содержащих образы разделов, можно проводить двумя способами:

  • сборкой с "нуля";
  • из ранее распакованного файла-образа раздела.

2.2.1.Подготовка содержимого.

  • - сборка "с нуля". Для этого создаем в рабочей папке Unpack/Image/ папку с именем будущего образа и наполняем содержимым из дерева требуемых частей.

         ----------------------------------------------------------------------------------

         | При сборке образов Boot/recovery наличие папки конфигурации (cfg) ОБЯЗАТЕЛЬНО! |

         ----------------------------------------------------------------------------------

Обязательно наличие только папки конфигурации (cfg), содержащей файл настроек.;

Для сборки необходимо обязательное наличие ЗАПОЛНЕННЫХ следующих полей файла cfg/*.cfg:

              - "typefile" тип структуры создаваемого файла (KRNL или ANDROID);

              - "pagesize" размер страницы файла (в байтах в hex-форме).

 Дополнительно можно внести изменения в следующие поля:

              - "name" имя автора образа (длиной не более 16 символов);

              - "cmdline" командная строка запуска (длиной не более 512 символов).

  • - сборка из ранее распакованного образа.

            В этом случае все необходимое уже находится на своих местах после выполнения операции распаковки.

2.2.2.Собственно сборка.

  • переходим в подменю "Boot/Recovery" (команда "2-Boot/Recovery" главного меню);
  • выполняем сборку образов Boot или Recovery (команда "2-Pack image");

-------------------------------------------------------------------------------

| Для выполнения этой команды используется файл конфигурации "имя образа".cfg |

-------------------------------------------------------------------------------

  • переходим в подменю "System commands" (команда "3-System,cache,..." главного меню);
  • выполняем сборку образов, содержащих файловую систему ext2-ext4 (команда "2-pack ext3" или "4-pack ext4").

3.Завершение работы.

  • выполняем, при необходимости, "сборку мусора", т.е. очистку средства (команда "5-Clean" главного меню);
  • выполняем выход из средства (команда "6-Exit" главного меню).
Спойлер

 

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

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


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

Доработал средство для работы с образами Qullcomm.

В новой версии добавлены следующие функции:

  •   можно посмотреть содержимое прошивки без ее разборки (текстовый файл);
  •   можно просмотреть разметку памяти, заданную прошивкой  (текстовый файл);
  •   поддержка сжатия ramdisk'а следующими архиваторами:

 gzip;

lz4;

 lzma;

lzop;

xz.

Полностью переделан принцип сборки образов. Теперь параметры выходных образов

берутся из файла конфигурации *.cfg.

Само средство выложено http://lenovo-forums.ru/topic/12127-средство-для-работы-с-прошивками-lenovo-под-windows/?p=337097 в разделе " Средство LenovoWinTools"

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

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


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

Я добавил ссылку на описание структуры прошивок Lenovo типа *.inb и *.qsb.

 

А теперь немного практики.
В данной статье я хочу показать практическое применение теоретических знаний структуры прошивок фирмы Lenovo.
Что нам понадобится для дальнейшей работы:

В своих исследованиях я использовал ОС Windows 7 и редактор WinHex.
Т.к. статья получается немаленькая и с картинками, то я буду выдавать ее частями, по мере готовности, выкладывая здесь ссылки на содержимое разделов.

 

Обработка прошивок Lenovo вручную.

1.Введение.

  Наиболее важными, на мой взгляд, вопросами при работе с прошивкой являются ее разборка для внесения изменений в ее составляющие и разметка памяти под измененную прошивку.
  Конкретно сейчас давайте рассмотрим следующие моменты:

  •  получение информации о составе прошивки без ее разборки, чтобы определить, а ту ли прошивку мы выбрали для разборки;
  •  разборка прошивки на составляющие;
  •  сборка из кусочных файлов единого файла-образа;
  •  получение информации по разметке, используемой в прошивке;
  •  обработка некоторых отдельных файлов (msimage.mbn, splash.img).

2.Разборка образа прошивки на составляющие

3.Сборка кусочных файлов

4.Просмотр содержимого прошивки

5.Просмотр разметки прошивки

6.Обработка отдельных образов разделов.

     6.1.Обработка файлов Msimage.mbn

     6.2.Обработка файлов Splash.img

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

1.Структура прошивок Lenovo типа *inb и *qsb.

2. Что такое MBR и EBR?
3. Что такое GPT?
4. Что такое rawprogram0.xml?

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

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


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

Продолжаю описание практических рекомендаций по обработке прошивок Lenovo вручную.

Обработка прошивок Lenovo вручную.

2.Разборка образа прошивки на составляющие.

Спойлер

Разборку образа на составляющие можно выполнять автоматически, например, при помощи приложения LenovoWinTools_v1.02.exe или консольного средства по работе с прошивками Lenovo - LenovoWinTools_v1.2. Эта процедура описана в темах этих программ.


Для разнообразия и, чтобы не идти легким путем, я покажу как можно выполнить разборку вручную, используя Hex-редактор. Итак, откроем в редакторе файл прошивки, например, A820e_1_S_2_002_0130_130916.qsb :

Гл.вид.png

  Образ прошивки состоит из заголовка, таблицы заголовков файлов образа, непосредственно данных разделов и ЭЦП. Посмотрим, что это и как выглядит в нашей прошивке.
  Заголовок имеет длину 0х100 (256 байт) и расположен с самого начала, смотрим:
Заголовок.png
  На рисунке 2 выделены поля заголовка, цвета которых и их значения, приведены в таблице 1:
 
Таблица 1. Заголовок прошивки типа .qsb.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Имя         Смещение    Длина   Назначение                             Цвет                      Значение
поля         байт             байт                                                     выделения
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Magic       0х0000          8         сигнатура файла                         красный              LmQsBfMt
СS           0х0008          4         контрольная сумма образа          оранжевый         4E31B386
Size         0х000С         4         размер образа прошивки              зеленый             0049234D
Autor        0х0010        32        автор прошивки                            синий                 buildslave@bjws02
Name       0х0030        32        название прошивки                       синий                 K910_w_SS_S_2_040_0081_131202
Date         0х0050         4         дата создания образа прошивки   темно-розовый    B9589C52
Number    0х0054         4        число файлов в образе прошивки  черный                97
Unknow1  0х0058         4         rez1                                              желтый                0D
Offset       0х005С         4        адрес начала раздела данных       лимонный            00A5
Flag         0х0060         4        флаг прошивки                               лазурный             01
Unknow2  0х0064      156        rez2
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 


 
  Не забывайте, что данные в памяти сохраняются в обратном порядке - сначала младший бит, а затем старший. Т.е. поле "Size" (размер образа прошивки), содержащее число 0049234D, будет иметь значение равное 0х4D234900 (1 294 158 080 байт). Точно также, если "перевернуть" число 00А5 в поле "Offset", то получим 0хА500 (42240 байт).
  Контрольная сумма считается как сумма всех 4-байтовых чисел прошивки по модулю 2**32, т.е. суммирование производится в 32-разрядном регистре (переменной) БЕЗ учета переполнения.
  Все строки дополняются до требуемого значения длины нулями (0х00).
  Дата представлена в формате С, С++, т.е. как число секунд, прошедших от "начала эры" (от даты 01.01.1970 00:00:00).
  Сразу после заголовка располагается таблица заголовков файлов. Каждый заголовок имеет размер 0х100 (256 байт). Посмотрим, что там находится:
Таблица заголовков разделов.png
  На рис.3 выделены поля заголовка, цвета которых и их значения, приведены в таблице 2:
Таблица 2. Заголовок файлов прошивки типа .qsb.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
Имя              Смещение      Длина     Назначение                                       Цвет                 Значение
поля              байт               байт                                                                 выделения
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
Filename       0х0000           64           Имя файла                                         красный              NON_HLOS.bin
Label            0х0040           32           метка раздела                                     оранжевый           modem
CS               0х0060             4           контрольная сумма                             светло-зеленый    09E5D6D1
Date             0х0064             4           дата создания файла                          желтый                 5D579C52
OffsetImage   0х0068             4          смещение файла в образе прошивки   синий                   00A5
SizeImage     0х006С            4          размер файла в прошивке                    бирюзовый          00062A03
EraseFlag     0х0070             4          флаг удаления                                     фиолетовый         01
WriteFlag      0х0074             4          флаг записи                                         фиолетовый         01
Size             0х0078             4          размер файла в памяти                         розовый              039501
Offset           0х007С             4          смещение файла в памяти                    черный               000002
Reserv         0х0080          128           rez1
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
 


 
  Воспользуемся полученным значением поля Offset заголовка прошивки, чтобы получить смещение до начала таблицы данных разделов, т.е. перейдем по смещению 0хА500: 
Таблица данных разделов.png
  На рис.4 показано, что следом за последним заголовком файла, расположенным по адресу 0хА400 и выделенным красным цветом, начиная с адреса 0хA500, расположены данные прошивки, т.е. файл, имеющий сигнатуру "MSDOS5.0". Если вернуться к таблице заголовков файлов (Рис.3), можно увидеть, что первым файлом, расположенным по смещению 0хА500 (поле OffsetImage), является файл NON_HLOS.bin.
  Надеюсь теперь стало понятно как же достать из прошивки требуемый Вам файл.
 
  Рассмотрим пример. Допустим, что требуется "вытянуть" (скопировать из прошивки) файл MPRG8974.mbn:
  • смотрим таблицу заголовков разделов, начиная с адреса 0х0100 прошивки, и находим запись о нужном файле по его названию. Это очень просто сделать, т.к., имея длину в 256 байт (0х0100), все заголовки располагаются на границе 0х0100, а имя файла находится, начиная с нулевого адреса этой записи. Вот скрин экрана Hex-редактора:

Заголовок MPRG8974.png

  • выбираем смещение файла в образе прошивки, т.е. берем по смещению 0х0068 значение поля "OffsetImage": 00FF214D или после перестановки 0х4D21FF00 (отмечено на рис.5 красным цветом), и длину файла, т.е. берем по смещению 0х006С значение поля "SizeImage": 6C990000 или после перестановки 0х0000996С (отмечено на рис.5 голубым цветом);
  • копируем при помощи Hex-редактора часть прошивки, начиная с адреса 0х4D21FF00 длиной 0х0000996С.
  Перебирая таким образом все записи таблицы заголовков файлов, можно вытянуть содержимое хоть всей прошивки, т.е. разобрать ее полностью.
7 пользователям понравился пост

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


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

Обработка прошивок Lenovo вручную.

3.Сборка кусочных файлов.

Спойлер


  Кусочные файлы - это группы файлов прошивки, образующие подразделы одного раздела и имеющие название вида system_1.img, system_23.img, perload_4.img и т.п. или вида system_5016872.img. В первом случае цифры в названии означают порядковый номер файла из группы. А во втором - смещение в прошивке.
  Если бы все куски содержали только данные и были получены простым разрезанием общего файла, то собирать их можно было бы простым сложением. Но не все так просто.
  Если внимательно рассмотреть кусочные файлы, то можно заметить, что они имеют разные размеры: либо очень большие (50-150 Мб), или совсем маленькие (8Кб). Используя тот же Hex-редактор, можно заметить, что маленькие файлы либо совсем не содержат данных, например, файл system_3.img, т.е. представляют собой "пустышку" вида:

06_Пустышка.png

Рис. 6. Кусочный файл-пустышка.

 
или имеют слабое заполнение, например, файл system_2.img:
 

07_Слабозаполн.png

Рис.7. Слабозаполненный кусочный файл.

 
  Чтобы правильно сложить куски, нужно каждый кусок разместить последовательно один за одним в одном файле строго по смещению и дополнить заполнителем (спецсимволом) до размера подраздела. В качестве заполнителя, как правило, используются коды 0х00 или 0хFF.
  Эти данные можно получить в файле rawprogram0.xml, содержащем полную картину прошивки памяти мобильного устройства, где кусочные файлы представлены как подразделы одного общего раздела, название которого находится в поле "label". Файл rawprogram0.xml я немного "ужал", удалив несущественные для нашего случая поля:

08_raw.png

Рис.8. Содержимое файла rawprogram0.xml.

 
  Попробуем выполнить это на примере. Пусть требуется сложить образ раздела system из отдельных кусков. На рис.8 нас будут интересовать поле "filename", по которому ищется строка с данными, и "start_sector", содержащее значение смещения, выраженное в секторах размером по 512 байт.

  • 1). Вычисляем размер образа раздела. Т.к. образ раздела system содержит файловую систему (ФС) ext4, то размер образа мы можем найти в superblock'е (SB) этой ФС, расположенном по адресу 0х400 (1024). Сначала убедимся, что это действительно SB: по адресу 0х438 (1080) должна быть сигнатура 53EF. Если все правильно, то по адресу 0х404 (1028) будет находиться размер образа ФС в блоках по 4096 байт:

09_суперблок.png

Рис.9. Суперблок файловой системы типа ext4.

 
 На рис.9 красным цветом выделена сигнатура SB, а синим - размер образа ФС. У нас получился полный размер образа 

393216 (0х00060000) * 4096 = 1610612736 (0х60000000) или 1.5Гб.

  •   2). Вычисляем размер первого подраздела образа system. Для этого находим в rawprogram0.xml строки, поле "filename", которых имеют значение system_1.img и system_2.img. Вычисляем разность значений смещений этих подразделов (смещение это поле "start_sector"): 1441792 - 1179648 = 262144. Это и есть размер подраздела system_1.img, выраженный в секторах по 512 байт.     
  •   3). Открываем первый кусок образа system (файл system_1.img) в WinHex. Т.к. он не совпадает по размеру с указанным в поле "num_partition_sectors"=262136, то первый кусок надо дополнить до размера, рассчитанного в предыдущем пункте, заполнителем. В WinHex это делается так. Переходим в конец открытого файла и выполняем команду "Правка"->"Вставить нулевые байты", указав число недостающих байт. У нас это

(размер_подраздела)-(размер_файла)=262144-262136=8 секторов или 8*512=4096 байт

  •   4). Открываем в Hex-редакторе следующий файл подраздела (system_2.img). Вычисляем необходимо ли его дополнять и дополняем (см. пп.2-3). Копируем полученный файл ("Правка"-"Выбрать все"-"Copy block"-"Обычно").
  •   5). Переходим в конец полученного файла system_1.img (дополненного нулями) и вставляем в конец второй подраздел (system_2.img, дополненный нулями).
  •   6). Повторяем пп. 4-5 пока не сложим все кусочки вместе.
  •   7). Сохраняем результат многодневного и многоночного труда.

 
 Все просто, но... если кусочки от образа последнего раздела, например, от "userdata", то как получить размер последнего подраздела, если за ним уже ничего больше нет в rawprogram0.xml и выполнить п.2) невозможно? Очень просто, его совсем не надо вычислять, а просто скопировать в конец предпоследнего. Вернемся к п.1, где мы вычисляли общий размер образа. Вот до этого размера и нужно дополнить общий получившийся файл.

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

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


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

Продолжим работу с прошивками Lenovo вручную.

Обработка прошивок Lenovo вручную.

4.Просмотр содержимого прошивки.

  Просмотреть содержимое прошивки очень просто, зная как она устроена. Т.к. вся информация о содержимом находится в таблице заголовков файлов, то необходимо ее просмотреть (см. пример в п.2 "Разборка образа прошивки на составляющие").

 

5.Просмотр разметки прошивки.

Спойлер

  В прошивках фирмы Lenovo для разметки памяти раньше использовалась схема MBR, например, аппараты типов А706, А820е. Описание устройсва файлов разметки и принципы работы с ними можно посмотреть в [2].
  Последнее время чаще всего используется схема GPT. Описание структуры файлов GPT и принципы работы с ними можно посмотреть в [3]. У Lenovo это файл gpt_main0.bin.
  Для получения информации о прошивке нужно выполнить два шага:

  • найти расположение файла gpt_main0.bin в прошивке используя знания, полученные в п.2;
  • используя знания, полученные из [3], просмотреть структуру разметки памяти.

Еще разметка памяти находится в файле rawprogram0.xml, который предназначен для флешера, и используется при загрузке прошивки в память мобильного устройства. Его описание и принципы работы я скоро опишу в отдельном посте.

 

Все описанные действия с прошивками добавляют много головной боли. Чтобы облегчить себе жизнь можно воспользоваться малым средством автоматизации - консольным средством LenovoWinTools_v1.2. Все описанные выше действия и многое другое Вы сможете выполнить легко и почти моментально. Например, для просмотра разметки прошивки нужно всего лишь выполнить следующие действия:

  • запустить средство LenovoWinTools_v1.2 (эта версия понимает как MBR-схему, так и GPT);
  • выбрать из главного меню пункт "1-Qsb", затем "1-Qsb unpack", чтобы распаковать прошивку;
  • не выходя из меню "Qsb", выбрать пункт "5-MBR or GPT to text" для создания текстового файла прошивки

Поэтому как Вам работать с прошивками решайте сами.

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

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


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

вчера пытались собрать .qsb:

post-30305-0-66653100-1439108806_thumb.ppost-30305-0-66534800-1439108816_thumb.p

 

а вот как оно получилось:

post-30305-0-86738000-1439108827_thumb.p

 

....удалена фраза, обидевшая vin2809....

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


Ссылка на сообщение
Поделиться на другие сайты
эх, не судьба ему собирать .qsb.

Мне кажется, что Вы не верно выразились. Нужно было написать, что Вам не судьба собирать *.qsb.

Средство то, как раз, собирает. Только оно использует при сборке файлы разметки (gptmain0), которые НЕОБХОДИМО было откорректировать после внесения изменений в состав файлов прошивки.

P.S. Попробуйте собрать на консольном варианте средства.

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

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


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

Средство LenovoWinTools_v1.3 по работе с прошивками Lenovo (Qualcomm)

 
  Выкладываю новую версию консольного средства LenovoWinTools_v1.3 по работе с образами Lenovo.
Забираем архив вместе с инструкцией пользователя из Средство для работы с прошивками lenovo под windows.
 
  Добавлена возможность:

  • обработки файлов msimage.mbn;
  • обработки файлов splash.img;
  • выполнения команд через ADB.

Там же есть отдельная инструкция пользователя.
Вот несколько картинок, показывающих новые функции средства:

post-58708-0-74882500-1439188895.pngpost-58708-0-34901000-1439188889.pngpost-58708-0-79673500-1439188904.pngpost-58708-0-00317700-1439188883.png
Отредактировал vin2809
7 пользователям понравился пост

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


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

Что такое файл msimage.mbn?

1.Введение.

Образ msimage.mbn представляет собой файл, содержащий маленькую операционную систему со своим разделом разметки памяти и набором разделов загрузчиков, выполняющих предварительные работы по инициализации аппаратного обеспечения мобильного устройства фирмы Lenovo на чипах Qualcomm.
Разметка может быть как MBR типа, например, как в устройстве А706 или А820e, так и GPT типа, например, как в К910 или S90A.
Образ msimage.mbn состоит из следующих разделов:

  • раздела разметки памяти;
  • разделов загрузчиков.

Все разделы внутри образа располагаются последовательно один за одним без промежутков между ними.
Для анализа содержимого образа msimage.mbn воспользуемся каким-нибудь Hex-редактором. Я использовал WinHex.
1.1. Разметка MBR типа.
Если используется разметка типа MBR, то открыв образ msimage.mbn в WinHex я увидел MBR-раздел размером 512 байт:

post-58708-0-76568300-1439354786.png
Рис.1. MBR-разметка.


Структура этого раздела детально описана в [1].
Используя приведенную там информацию, можно установить, что тип первого раздела 4D (выделено синим цветом), а согласно [2] это загрузчик SBL1. Смещение раздела, выделено зеленым цветом, 0х01 блок, т.е. 0х0200(512 байт), а длина раздела (выделено красным цветом), т.е. файла загрузчика - 0х28 блоков или 0х200*0х028=0х5000 (20480 байт).

1.2. Разметка GPT.
Если используется разметка типа GPT, то первым разделом образа будет настоящий GPT-раздел, структура которого детально описана в [3]:

post-58708-0-00378700-1439354796.png
Рис.2. GPT-разметка.


На рис.2 виден защитный MBR-блок, который используется при GPT-разметке. Синим цветом выделен признак разметки типа GPT - 0xEE. А смещение начала раздела (выделено зеленым цветом) указывает на блок 0х01, т.е. следующий за блоком MBR.
Сигнатура EFI-таблицы выделена красным цветом.
Переместимся далее по коду. На рис.3 представлена таблица разделов, содержащихся в msimage-образе:

post-58708-0-47174200-1439354805.png
Рис.3. Таблица разделов.


Здесь видно, что раздел под именем SBL1 (выделено красным), расположен в блоках с 0х22 по 0х0421. Аналогично получим информацию по остальным разделам.
 
2.Литература.
1. "Что такое MBR?".
2. "Файл исходного текста bootable\bootloader\lk\platform\msm_shared\include\partition_parser.h".
3. "Что такое GPT?".

Отредактировал vin2809
6 пользователям понравился пост

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


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

Что такое файл splash.img?

Структура и работа с образом раздела.

Спойлер


  1.Введение.
   Картинка, появляющаяся как заставка при загрузке мобильного устройства, расположена в разделе splash. Образ этого раздела называется spalsh.img.
   Картинка должна удовлетворять определенным требованиям иначе заставка не  загрузится. Она должна иметь растровый формат представления цвета RGB24. Это  значит, что глубина цвета у нее 24 бита на пиксел, а каждый пиксел изображения  представлен тремя байтами цвета, расположенными в такой последовательности: R, G, B.
   Для программиста, хакера или просто грамотного пользователя это означает, что картинка размером, например, 720х1280 пикселей будет занимать в памяти раздела  720х1280х3=2 764 800 байт.
   Для исследований и обработки вручную лучше всего использовать Hex-редактор, а для просмотра или преобразования формата нужен просмотрщик изображений. Я пользуюсь редактором WinHex и просмотрщиком IrfanView.
 
  2.Структура образа splash.img.
   Структура образа приведена на рис.1 и содержит:

  • заголовок длиной 512 байт;
  • само изображение в raw-формате.

 Заголовок содержит всего 3 поля:

  • поле сигнатуры (Magic) длиной 8 байт. Выделено на рис.1 синим цветом;
  • поле ширины изображения (Width) длиной 4 байта. Выделено на рис.1 бирюзовым цветом;
  • поле высоты изображения (Height) длиной 4 байта. Выделено на рис.1 красным цветом.

               Splash.png
                 Рис.1. Структура splash-образа.
 
   Все остальное место 512-16=496 байт содержат код 0х00.
   Как любой "правильный" файл образ splash.img имеет сигнатуру. В качестве нее используется набор символов "SPLASH!!".
   Размер изображения указывается в пикселах.
   Полная длина (размер) изображения рассчитывается по формуле 3х"Width"х"Height".
 
  3.Разборка образа.
   Я мог бы привести множество способов выполнения этой процедуры, но самыми простыми, на мой взгляд, будут два нижеприведенных.
   1).Чтобы просто достать изображение из образа splash.img, необходимо выполнить следующие действия:

  • загрузить образ в hex-редактор;
  • удалить 512 байт из начала;
  • сохранить под именем *.raw.

 2).Второй способ обеспечивает большую функциональность. Он позволяет распаковать образ, просмотреть изображение без разборки или преобразовать его в другой формат.
    Для этого нужно выполнить следующие действия:

  • переименуйте файл-образ splash.img в splash.raw;
  • загрузите полученный файл splash.raw в программу в IrfanView. При этом появится диалог "Параметры открытия RAW-файла":

               raw.png
                 Рис.2. Параметры открытия RAW-файла.
 
    Здесь нужно:

  • задать размер изображения: ширина и высота. Значения берутся из полей заголовка образа splash.img;
  • задать размер заголовка файла - установить 512;
  • указать параметр "Бит на пиксел (BPP)" - установить отметку на 24BPP;
  • установить значения поля "Параметры для 24 и 32 ВРР" в следующее состояние: "Порядок цветов RGB" и "С чередованием".

  После нажатия на кнопку "ОК" Вы увидите изображение, которое хранил образ splash.img.
    Это изображение имеет так называемый "сырой" вид, т.е. RAW-формат. Если его сохранить "as is", то просмотреть его будет проблематично, т.к. не все программы просмотра могут работать с таким форматом. Чтобы сохранить его в требуемом формате
выполните в IrfanView команду "Файл->Сохранить как..." и укажите тип сохраняемого файла:
 
                  Формат файла.png
                  Рис.3.Формат файла.
 
  4.Сборка образа.
   Для сборки образа splash.img нужно знать точный размер в пикселах заставки, используемой на Вашем мобильном устройстве.
  Сама сборка производится в следующей последовательности:

  1. подготовьте изображение: приведите его к требуемому размеру и сохраните в RAW-формате с глубиной цвета 24 бита;
  2. при помощи Hex-редактора добавьте в начало полученного файла 512 пустых байт;
  3. тем же Hex-редактором в первые 8 байт (с 0х00 по 0х07) поместите сигнатуру образа, т.е. символы "SPLASH!!";
  4. в следующие 4 байта (с 0х08 по 0х0В) в обратном порядке поместите ширину изображения в пикселах, выраженную в 16-ричном виде;
  5. в следующие 4 байта (с 0х0С по 0х0F) в обратном порядке поместите высоту изображения в пикселах, выраженную в 16-ричном виде;
  6. сохраните файл под именем splash.img.

 

 ПРИМЕЧАНИЕ. Обратный порядок 16-ричного числа делается так: если само число 1440, в 16-ричном виде это 0х05А0, то надо записывать так: А0 05. Если число 1280, в 16-ричном виде это 0х0500, то надо записать так: 00 05


   Разберем всю процедуру сборки на примере. Допустим, Вы хотите сделать заставку размером 720х1280 из картинки со следующими параметрами: ширина 1200, высота 678, глубина цвета 24.
   1).Подготовка изображения.
   Для этого я использую тоже приложение IrfanView:
 

  •   откройте требуемую картинку:

 
               Исх.файл.png
               Рис.4.Исходный файл.
 

  •  т.к. размеры заставки и выбранной картинки не совпадают, выполните команду "Изображение"->"Изменить размер холста..." и в появившемся диалоге установите размеры холста, равными размеру заставки, т.е. 720х1280:

 
               Изм.холста.png
               Рис.5. Изменение холста.
 

  •  нажмите кнопки "Применить к изображению" и "ОК" для закрытия диалога:

 
               Рез.изм.холста.png
               Рис.6. Результат изменения холста.
 

  •  сохраните полученное изображение в RAW-формате, изменив тип формата как на рис.3.

 
   2)-5).Загружаем полученный файл в Hex-редактор.
   Чтобы добавить в начало 512 пустых байт выполняем команду "Правка"->"Вставить нулевые байты". Вставим сигнатуру:
 
               заголовок1.png
               Рис.7. Сигнатура.
 
   Переведем размеры заставки в 16-ричный код: ширина 720->0х02D0, высота 1280->0x0500 и заполняем добавленный заголовок:
 
               Шир.выс.png
               Рис.8. Ширина.
 
   6).Сохраняем готовый файл под именем splash.img.

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

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


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

ой, да ладно. так сильно фраза зацепила? я ее удалю, обидеть не хотел. но, что мне писать, я уж сам буду решать. договорились?

 

если словесную пикировку мы закончили, я перейду к сути:

я не вносил изменения в файлы прошивки, прошивка/файлы оригинальные. задача стояла собрать из прошивки для qpst прошивку qsb. использовалась для этого консольная версия (т.к. гуишная вообще не знает о такой операции) . поэтому файлы были размещены в папку ...\LenovoWinTools_1.0\Unpack\Z90a40_S118_150527_ROW\ , был создана папка/файл \Unpack\Z90a40_S118_150527_ROW\cfg\Z90a40_S118_150527_ROW.info:

следующего содержания:

File Name = Z90a40_S118_150527_ROW

Author = buildslave@njbs13
Number File = 170
 
тузла собрала прошивку qsb (это видно на первом скрине) без ошибок. но полученный файл эта же консольная версия отказалась распаковывать (2-й скрин), на третьем скрине гуишная тузла некорректно показывает содержимое прошивки.  

 

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


Ссылка на сообщение
Поделиться на другие сайты
Разве таблицы GPT и MBR читаются разделами?

 

Спасибо за рецензирование моих материалов. Хоть кто-то читает...

 

 

тузла собрала прошивку qsb (это видно на первом скрине) без ошибок. но полученный файл эта же консольная версия отказалась распаковывать (2-й скрин), на третьем скрине гуишная тузла некорректно показывает содержимое прошивки.  

Теперь понятно о чем речь. Я сейчас проверю.

Отредактировал vin2809
1 пользователю понравился пост

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


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

не надо проверять пока, я сейчас на версии 1.3 проведу операцию. 

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


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

Тогда распакованную прошивку лучше положить на ее "рабочее" место - в папку Qsb

1 пользователю понравился пост

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


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

я читаю инструкции перед работой с прогами, ведь их не зря же пишут? )))

 

отчитываюсь:

ситуация кардинально поменялась на версии 1,3:

1) qsb собралась без ошибок

2) тузла 1.3 ее отлично видит и распаковывает:

post-30305-0-56077100-1439401848.png

3) гуишная версия (1.0.2) тоже отлично видит/читает/распаковывает созданный файл qsb:

post-30305-0-09873600-1439402021_thumb.p

 

П.С. qsb файл без подписи, а есть ли проверка на подпись при прошивке в фактори_моде? на к900 созданный файл .inb прошивался без проблем и подписи не нужны были.

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

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


Ссылка на сообщение
Поделиться на другие сайты
П.С. qsb файл без подписи, а есть ли проверка на подпись при прошивке в фактори_моде?
На K910 была проверка.

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


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

Большое спасибо за работу. Может рискнете и прошить?

1 пользователю понравился пост

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


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

уже пытаемся)))

 

нет, требует подпись:

post-30305-0-19701300-1439408047.png
2 пользователям понравился пост

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


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

     Очень жаль, что ничего не получилось у нас... Надеюсь это только пока!   Если нужны будут ещё эксперименты - я готов!

Зы.  как ужасно на фотке смотрится защитное стекло :omg: - какое то мутное и заляпаное к тому же :dada:  извините!  ​

Отредактировал arkadiy68
1 пользователю понравился пост

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


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

Как заменить картинку-заставку в аппаратах Lenovo (Qualcomm)?

1.Введение.

В [1] я описал структуру файла-заставки splash.img. Там же приведены два способа ручной замены изображенния этой заставки. Но... зачем же мучаться в ХХI веке! Для ленивых и берегущих свое время я написал программу, которая позволяет разобрать и собрать файл splash автоматически. Правда тут же встроил ее в средство для обработки прошивок Lenovo.

Для работы требуется:

- Windows 7 или выше;

- установленный пакет .NET 4.0;

- и качаем средство LenovoWinTools_v1.3...

Для тех, кто впервые устанавливает это средство:

- распаковываете архив в любом месте жесткого диска;

- запускаете файл menu.bat. Это как кнопка "Пуск" - выводит главное меню команд:

post-58708-0-30396200-1439959437.png

- выполняете команду "7 - Init Tools" для инициализации средства. Эта команда выполняется только при первом запуске или после очистки;

- выходите по команде "9 - Exit".

Все, средство установлено и настроено на долговременную работу.

ПРИМЕЧАНИЕ. Файл splash.img содержит внутри себя изображение в растровом формате RGB, глубина цвета 24 бита на пиксель (24 bpp). Размер изображения в пикселях определяется размером заставки. При разборке Вы можете сохранить изображение в разных форматах, размер и глубина цвета при этом не изменяются. Для сборки подготовить изображение (размер и глубину цвета) Вы должны сами.

2.Разборка файла spalsh.img.

Для разборки конкретного файла splash выполните следующие действия:

- копируем его в рабочую папку Unpack/Image;

- запускаем файл menu.bat;

- выполняем команду "4-Other files" для перехода в меню обработки отдельных файлов:

post-58708-0-11882400-1439959521.png

- выполняем команду "2-splash" для перехода в меню обработки файлов splash;

post-58708-0-76287000-1439959541.png

- выполняем команду "unpack splash" для распаковки файла splash.img на составляющие. Средство позволяет обрабатывать однотипные файлы, различающиеся названиями без выхода и дополнительного копирования и переименовывания.

Поэтому появится запрос на выбор конкретного файла из имеющихся в рабочей папке:

post-58708-0-24484100-1439959586.png

Т.к. изображение внутри файла хранится в raw-формате малопригодном для просмотра, то его необходимо конвертировать в более "приличный" формат. Не бойтесь, все это выполняется автоматически. Просто средство попросит Вас указать формат для сохранения изображения. Вы можете сохранить свою картинку в одном из следующих форматов: bmp, emf, exif, gif, ico, jpeg, png, tiff, wmf:

post-58708-0-63577600-1439959611.png

- после выполнения операции Вы можете посмотреть картинку или забрать ее в папке Unpack/"имя файла", который Вы выбрали на рис.4. Рядом с файлом изображения будет находиться файл настроек *_cfg.cfg, содержащий название splash-файла и размеры заставки. Эти данные Вы можете потом использовать при сборке. Вот пример содержимого этого файла:

Name=splash

Width=1080

Height=1840

3.Сборка файла splash.img.

Для сборки файла-заставки нужно выполнить следующие действия:

- подготовить изображение, преобразовав его в размер заставки (в пикселах) и установить глубину цвета 24 bpp;

- в файле настроек прописываем имя файла изображения и его размеры;

- создаем в рабочей папке директорию (папку) с именем заставки, например, просто splash1, и копируем в нее подготовленное изображение;

- запускаем средство, используя menu.bat (рис.1);

- в появившемся главном меню выполняем последовательно команды "4-Other files" и "2-splash" для перехода в меню обработки файлов splash (рис.3);

- выполняем команду "pack splash". Появится запрос

post-58708-0-33006500-1439959640.png

- если появится примерно такая надпись, то Вы не создали файл настроек или он имеет неверное название:

post-58708-0-55832400-1439959677_thumb.p

- после указания папки-источника нашего изображения, выбираем тип картинки, т.е расширение файла:

post-58708-0-63577600-1439959611.png

- затем указываем саму картинку:

post-58708-0-50611100-1439959720.png

- наконец-то получаем результат:

post-58708-0-34486600-1439959752.png

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

1."Что такое файл splash.img?"

Отредактировал vin2809
5 пользователям понравился пост

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


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

Как прошить картинку-заставку в аппаратах Lenovo (Qualcomm)?

Спойлер

1.Введение.
Теперь Вы можете самостоятельно заменять картинки, появляющиеся при загрузке... Но это пока еще не все. Каким бы способом (вручную или при помощи средства) Вы не собрали файл splash.img, пока он находится в Ваших руках, а не в аппарате, это просто еще один файл, каких у Вас и раньше было много...
Чтобы файл-заставка выполнял свои функции его надо прошить в мобильное устройство, т.е. разместить в разделе памяти, который так и называется "splash".
Это можно сделать несколькими способами. Например, при помощи команд ADB, или через средство от Lenovo QFIL.
Рассмотрим вариант прошивки образа раздела заставки при помощи команд ADB.

 

2.Прошивка при помощи команд ADB.
Надеюсь, что сама программа ADB и драйвера для ее работы у Вас установлены.
В двух словах поясню, что такое ADB. Это специальная программа для отладки мобильных устройств, организованная как клиент-серверное приложение. То, что Вы
устанавливаете на своем настольном компьютере или ноутбуке (приложение ADB.exe, AdbWinApi.dll, AdbWinUsbApi.dll), это серверная часть, которая может общаться с другими компьютерами или мобильными устройствами через специальные драйвера.
Вторая часть, клиентская, устанавливается вместе с прошивкой в мобильном устройстве. Чтобы вся эта "телега" поехала, надо запустить сервер на компьютере и разрешить мобильному устройству отладку, т.е. возможность общаться с внешними устройствами через определенный порт.
Как правило, вторая часть, т.е. работа через ADB и отладка, всегда настроена и включена. А чтобы заработала первая часть нужно выполнить несколько команд ADB на компьютере в консольном режиме (в терминале). Итак, начнем.
Для выполнения передачи файлов в мобильное устройство нужно выполнить несколько операций:

  • запустить сервер ADB;
  • подготовить аппарат к приему Вашего файла;
  • выполнить передачу самого файла-заставки;
  • остановить сервер.

Для запуска сервера ADB существует следующая команда

 

                adb start-server

 

Ваш компьютер отреагирует на нее выводом примерно такого сообщения:

Запуск ADB.png

Соответственно для остановки сервера ADB нужно выполнить такую команду:

 

                adb kill-server

 

Когда сервер запустился, нужно проверить есть ли связь между компьютером и мобильным устройством. Для этого выполним простую команду просмотра подключенных устройств:

 

                adb devices

 

В ответ Вы получите список устройств, с которыми сервер ADB установил связь. Сообщение на экране будет примерно такого типа:

Список устр.png
Если список пуст или в нем отсутствует Ваше устройство, то ищите причину. Если связь с Вашим аппаратом установлена, то выполним его подготовку, т.е. запустим команду перевода в режим загрузки:

 

                 adb reboot bootloader

 

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

 

                 fastboot flash splash splash.img

 

До этого момента все приведенные команды были без параметров, которые всегда выполняются одинаково для наших случаев. Последняя же команда содержит параметры:

  • flash это команда прошивки раздела памяти;
  • splash это имя раздела памяти, где расположен образ картинки-заставки;
  • splash.img это имя файла-заставки, который Вы приготовили и хотите внедрить в аппарат.

Я все эти операции выполняю из командного файла примерно вот такого содержания .flash_splash.7z

ПРИМЕЧАНИЕ: "ленивые" или дорожащие своим временем могут выполнять прошивку заставки при помощи средства для работы с прошивками Lenovo - LenovoWinTools_v1.4.
 
3.Литература.
4 пользователям понравился пост

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


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

Продолжим работу с прошивками Lenovo вручную.

 

Обработка прошивок Lenovo вручную.

 

6.1.Обработка файлов msimage.mbn

Спойлер

 

 1.Введение.

   Файл msimage.mbn предназначен для восстановления работы загрузчиков различных систем мобильного устройства, созданного на основе чипов Qualcomm, фирмы Lenovo.

   Он представляет собой образ, т.е. единый файл, в котором в строгом порядке размещены его составляющие. Структура этого образа детально описана в [1],
   Анализ, разборку и сборку этого файла проведем вручную. для этого воспользуемся Hex-редактором. Я использую в своих работах WinHex.
 
 2.Просмотр состава загрузчиков.
   Перечень загрузчиков расположен в разделе разметки образа, поэтому нам нужно прочитать таблицу разделов.
   Для просмотра состава файла msimage.mbn загрузите его в Hex-редактор.
   Он может содержать разметку памяти типа как MBR, так и GPT:
MBR.png

 

 Структура раздела разметки типа MBR описана в [2]. На рис.1 синим цветом показано поле, содержащее информацию о типе раздела. Смещение, т.е. начало раздела, отмечено зеленым цветом, а длина раздела - красным.
   У нас имеются 4 раздела типов 4D, 45, 0C и 46. А вот кусочек исходного кода из [3]

#define MBR_EBR_TYPE              0x05
#define MBR_MODEM_TYPE            0x06
#define MBR_MODEM_TYPE2           0x0C
#define MBR_SBL1_TYPE             0x4D
#define MBR_SBL2_TYPE             0x51
#define MBR_SBL3_TYPE             0x45
#define MBR_RPM_TYPE              0x47
#define MBR_TZ_TYPE               0x46
#define MBR_MODEM_ST1_TYPE        0x4A
#define MBR_MODEM_ST2_TYPE        0x4B
#define MBR_EFS2_TYPE             0x4E
#define MBR_ABOOT_TYPE            0x4C
#define MBR_BOOT_TYPE             0x48
#define MBR_SYSTEM_TYPE           0x82
#define MBR_USERDATA_TYPE         0x83
#define MBR_RECOVERY_TYPE         0x60
#define MBR_MISC_TYPE             0x63
#define MBR_PROTECTED_TYPE        0xEE
#define MBR_SSD_TYPE              0x5D
  Соответственно, это разделы, содержащие SBL1, SBL3, Modem_type2 и tz.
  В случае разметки памяти типа GPT все еще проще: таблица разделов содержит их названия:
 

Таблица разделов.png

 

  На рис.2 красным цветом выделены названия разделов, содержащих соответствующие загрузчики. Зеленым цветом выделено поле, содержащее номер блока начала раздела, а синим - номер последнего блока раздела. Структура GPT-разметки детально описана в [4].
  Согласно рис.2 наш файл msimage.mbn содержит следующие разделы: SBL1, ddr, RPM и tz.
  С составом файла разобрались.
 

3.Разборка файла msimage.mbn.
   Разборка файла на составляющие вручную тоже производится при помощи Hex-редактора.
 Необходимо получить информацию по составу загрузчиков (см. п.2), а потом используя Hex-редактор, копировать содержимое каждого загрузчика из файла msimage.mbn и вставлять в новый файл, сохраняя его под именем загрузчика.

 

 4.Сборка файла msimage.mbn.
   Сборка производится аналогично разборке, только в обратную сторону: нужно при помощи Hex-редактора последовательно вставлять содержимое каждого отдельного загрузчика в один новый файл структуры msimage.mbn.
   Допустим, что мы хотим собрать файл msimage.mbn с разметкой типа MBR, содержащий загрузчики SBL1, SBL3, Modem_type2 и tz.
   Тогда нам необходимо выполнить следующие действия:
     1) если не хотите вручную строить разделы, описывающие разметку образа, то возьмите существующий файл msimage.mbn с разметкой нужного Вам типа и откройте его в Hex-редакторе:
 
Старый mbn.png
 
   2) чтобы не запутаться в дальнейшем, удалите старое содержимое, оставив только раздел разметки. Это будет наша "заготовка":
Очистка mbn.png
 
     3) открываем согласно перечня первый файл загрузчика в Hex-редакторе и копируем его содержимое;
     4) переходим на заготовку под msimage.mbn и вставляем содержимое первого загрузчика сразу за разделом разметки:
 
Первый загр.начало.png начало загрузчика SBL1
 
Первый загр.конец.png конец
 
     5) отмечаем для себя, что мы поместили первый загрузчик SBL1 в первый раздел образа, имеющий следующие параметры: 

              смещение - блок № 0х00000001 (т.к. в заготовке разметка MBR занимает один блок (нулевой), а раздел расположен следом);
              длина        - 0х0000 блоков. Т.к. разделы выравниваются на границу блока, то размер указывается как количество ЗАНЯТЫХ блоков.
                                 Например, последний адрес, занятый вставленным загрузчиком, 0х0000, т.е. он находится в 0х0000/0х200= блоке. Тогда
                                 длина будет 0х00 -1=0х00;
              тип           - 4D.
      6) открываем в Hex-редакторе следующий загрузчик SBL3 и копируем его содержимое;
      7) переходим на заготовку и вставляем его содержимое, начиная с блока, следующего сразу за последним уже занятым. У нас это адрес 0x00005200 или блок № 0х0029:
sbl3 загр.начало.png начало загрузчика SBL3
 
sbl3 загр.конец.png конец
 
      8) отмечаем для себя параметры раздела, занятого очередным загрузчиком:

              смещение - блок № 0х0029, начиная с которого мы только что разместили загрузчик;
              длина       - 0х000001F4. Рассчитывается также, как в п.5;
              тип           - 45.
    9) повторяем действия пп. 6-8 над всеми остальными загрузчиками
 
посл загр.начало.png начало последнего загрузчика
 
 
     10) после размещения всех загрузчиков будем заполнять таблицу разделов MBR:       

 

  • в поле по адресу 0х01С2 заносим значение типа первого загрузчика - 4D;
  • в поле по адресу 0х01С6-0х01С9 заносим значение смещения первого раздела - 00000001. Только прописывать его надо в обратном порядке, поэтому помещаем по адресу 0х01С6 01, в 0х01С7 00, в 0х01С8 00, в  0х01С9 00;
  • в поле по адресу 0х01СА-0х01СD заносим значение длины раздела и тоже в обратном порядке. Соответственно, 

 

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

 

    2. "Что такое MBR?".
    3. "bootable\bootloader\lk\platform\msm_shared\include\partition_parser.h".
    4. "Что такое GPT?".

mbr.png

 

Конец mbn.png

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

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


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

Ребята делаю все по инструкции распаковываю system.img и без изменения запаковываю! Телефон вкл. проходит мелодия запуска и в тот момент когда должен был появится начальный экран, дисплей темнеет и горит подсветка. Телефон на компьютере определяется как положено но при любых манипуляциях только загорается еле заметная подсветка и все.

Прошиваю образ до изменения все отлично.

Что я не учел? 

 

 

Через DiskInternals Reader (плагин в TotalCommander-е)

 

Открыл получившейся файл и вижу, что файлы у меня определяются как папки!

 

PS Android 4.4.4

 

post-54993-0-57800200-1442305472_thumb.p

post-54993-0-37850200-1442305642_thumb.p

 

 

А так выглядит system.img  до всех моих манипуляций

 

post-54993-0-75989800-1442305839_thumb.p

 

 

Раздел splash.img разобрался и собрался на ура! Все поменялось как надо!

Отредактировал merlin

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


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

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

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

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

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


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

Войти

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


Войти

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

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