Что представляет из себя файл прошивки (описание от
Helge):
1. файл прошивки (файл с расширением .nbh) состоит из:
- и заголовка.
- файла содержащего ось(операционную систему) OS.NB
OS.NB в свою очередь состоит из:
-из заголовка
-OS.NB.payload (контейнера заполненного самой прошивкой)
В состав OS.NB.payload входят:
- xip.bin,
- imgfs.bin
XIP - это набор модулей составляющих ядро оси именно они делают всю основную работу. Когда видишь надпись "OC CE 5.2.20764 " - это и есть версия XIP.
Модули XIP-а деляться на две части, на модули общие для всех девайсов работающих на WM , и на так называемые девайсозависимые модули, то есть модули, работающие только с конкретной моделью. В кухне это соответственно пакеты MSXIPKernel и OEMXIPKernel
Еще в состав XIP-а входит загрузчик, сертификат, и еще кое что, но думаю, что если подробно про XIP, то это отдельная тема.
На разных моделях, девайсозависимые модули имеют разный размер, должны размещаться по разным адресам в памяти.
Портирование XIP-а заключаеться в том, чтобы отделить девайсозависимые модули, удалить их, на их место подставить свои, и согласовать адреса в памяти общих модулей со своими девайсозависимыми модулями.
2. Билд (build) и сборка, это одно и тоже, просто на раздных языках.
Ты уже видел, что кухня разбита на ОЕМ и SYS , так вот SYS - это грубо говоря и есть билд.
3. Билды разрабатывают в MS. К каждой новой прошивке, по заказу производителей, делаеться новый билд. По какому принципу они нумеруються, лучше спросить мелкомягких.
Как происходит загрузка устройства с WM (описание от Helge):давай посмотрим как ваще запускаеться девайс с WM. Включаем девайс, однокилобайтный M-Systems IPL отображен в память по адресу 0, он стартует, делает минимум инициализации железа достаточный для загрузки SPL в RAM (иногда SPL называют EBOOT, бутлоадер и тп). SPL хранится в binary разделе DOC-чипа, IPL - вообще в отдельной области, которую лучше не трогать. Далее SPL уже полностью инициализирует железо, проверяет надо ли войти в режим бутлоадера, и определяет какую из версий системы требуется загрузить (update loader или нормальную OS). Update loader используется исключительно для установки обновлений ROM рекомендованным микрософтом способом (на уровне отдельных пакетов, а не всей прошивки, и почему-то этот режим НТС никогда не использовало).Далее SPL распаковывает в RAM, по заданному разработчиками адресу, выбранную версию ядра, и прыгает туда. На этом моменте, кстати, мы теряем первые 4 мегабайта оперативки. Это нельзя называть XIP (eXecute-In-Place, хотя формат идентичен), тк исполнение происходит не in-place, а путем предварительной загрузки кода в RAM. Но это дает нам очевидный выигрыш в скорости. Ну а далее уже процесс загрузки идет как обычно. NK грузит device.exe, filesys.exe и тп, инициализируется первая партия драйверов, в частности драйвер DOC, и уже из IMGFS подгружается основной реестр и остальная часть системы. Так как на первой фазе используется другая копия реестра (boot.hv), и writeable копии реестра еще нету, то все хэндлы девайсов, проинициализированных на этой фазе остаются известны только ядру и в hklm\drivers\active не попадают.
Собственно, начинаем работать с кухней:Качаем архив кухни:
http://narod.ru/disk/9068767000/RU_B21051_NATALY_2.5.1_Kitchen.exe.html или
http://rapidshare.com/files/236504833/RU_B21051_NATALY_2.5.1_Kitchen.exeРазорхивируем в любую папку.
Структура каталогово такая:
_ADDS\
RU_KITCHEN\TOOLSET\
UTILS\
Нас в первую очередь интересует папка
RU_KITCHEN\ Заходим в нее:
EXT\
OEM\
ROM\
SYS\
TOOLS\
build_rom.bat
Cleanup.bat
DiamondCustomRUU.exe
oem2ext.exe
Видим папки и файлы.
1) В папке EXT находятся все пакеты (приложения), которые будут в прошивке
2) OEM содержит драйверы на прошиваемый девайс (HTC Diamond). Подходят только для брилианта.
3)Папка ROM состоит из:
XIP\
os.nb.payload
romhdr.bin
Последние два файла - заголовки для прошивки, а в XIP содержатся низкоуровневые программы.
4) Папка SYS содержит системные приложения Windows Mobile
5) Tools - сердце кухни. Состоит из распаковщика IMGFS и сборщика прошивки htcrt.exe
6) Скрипт build_rom.bat запускает процесс сборки прошивки
7) Скрипт Cleanup.bat - удаляет следы сборки и временные файлы
8) DiamondCustomRUU.exe - программа-прошивальщик
9) oem2ext.exe - на этот файл надо перетянуть папку OEM, если в ней лежат пакеты для "старой" кухни- и тогда они "перепрыгнут" в папку \EXT\Diamond, но уже в формате для "новой"
Для особо нетерпеливых сделаем прошивку для которой и была написана сия кухня.
Запускаем build_rom.bat
на экране бушуют надписи в черных окошках, после чего взору предстает программа HTC ROM TOOL 1.1.4 c предложением что-нибудь нажать. Нажимаем "Build". Программа от нас еще чего-то хочет. Ага. Автоматически перешли на вторую вкладку. Выбираем устройство Diamond, надписи в окошечках ниже заполняются сами. Лучше не трогать
Справа под словом "Firmware content" (содержимое прошивки) в последнем пункте жмем на три точки и выбираем файл xxx.nb. Программа сразу предлагаем что-то сохранить - сохранить окончательный файл прошивки. Даем ему имя и жмем сохранить. Программа кое-что покажет и скажет ОК! Закрываем ее. Видим появление на свет нового файла - xxx.nbh - его-то мы и будем прошивать в телефон с помощью DiamondCustomRUU.exe. Дальше следуем так сказать инструкциям "мастера".
Если уже можем собирать прошивку, то можно для начала и
пакет (программу) включить в прошивку. Для этого - качаем кабик (ххх.cab). Дальше со слов
ScorpionSPB и lucky3d:"lucky3d" :" я пользую утилиту package-creator-v2.7 .. (если не найдешь напиши выложу).
в ней указываешь файл - получаешь на выходе пакет для прошивки. всё
в итоге ты получаешь в папке:
1. файлы из прошивки
2. rgu файл с реестром из твоего каба.
3. dsm файл - индетификатор файлов содержащихся в пакете. (В последней кухне от bepe они не нужны..я убиваю.. но можно и оставить)
3. файл initflashes.txt который описывает куда переместятся файлы после распаковки (по умолчанию они падают в Windows). если никуда - то его можно грохнуть. Файл должен быть в юникоде. Я пользуюсь утилитой InitFFBuilder.exe если надо править.
4. option.xml - содержит инфо о пакете используется в старой кухне от Bepe. (Я тоже грохаю)
dвот и всё .. эту папку с пакетом кидай в OEM или SYS"
// Самому пока не очень понятно. Позже проделаю сам и постараюсь написать по-проще. И дополню, что куда копировать дальше.
Теперь - как разобрать прошивку
ВНИМАНИЕ:
Дополнение от ssergeyСразу обратите внимание, что разобрать самодельную прошивку (например от mondi, aserg, korand) полноценно не возможно. И это не потому, что они такие злые волшебники, а просто суть кухни- при создании прошивки удаляются (точнее остаются в кухне, но не попадают в файл прошивки) ненужные уже больше файлы, которые содержат данные о пакетах- вот и при разборке все файлы распаковываются кучей.
Полноценно распаковать на пакеты можно только оф. прошивку от HTC
Видео-инструкция:
http://www.bepe80.com/test/1/Действия делать надо в проводнике Windows.
Качаем какую-нибудь прошивку RUU_signed.nbh. Данный файл состоит собственно из прошивки и заголовка прошивки. Для извлечения прошивки потребуется утилита nbhtool.exe в папке \RU_B21051_NATALY_2.5.1_Kitchen\UTILS\. Копиреум ее в папку с прошивкой, запускаем. Указывам путь к файлу nbh и жмем кнопку. Для любителей командной строки есть там же утилита nbhextact.exe
В итоге у нас есть файл ххх.nb
Этот файл перетаскиваем на файл Dump_800.bat в папке TOOLSET. Снова наслаждаемся диким количеством цифр и букв в черном окошке. Жмем любую клавишу и видим в папке с прошивкой появились файл ххх.nb.payload и папка IMGFS
В файле nb.payload содержится XIP - его будем извлевать:
Заходим в папку dump xip уровнем выше. И также наводим файл nb.payload на dumpxip.bat
Появилась папка XIP и файл romhdr.bin
Дальше из папки IMGFS будем делать пакеты программ:
Снова возвращаемся в папку TOOLSET и наводим взор на программу packagebuilder. Кроме взора на нее нужно навести папку IMGFS
Тут я остановился, т.к. никаких действий не происходит. Видимо это первое несоответствие видео и кухни.
Кажется я начал понимать: больше из папки IMGFS выжать ничего не получится. Формат папки такой:
к примеру: папка acmdwrap.dll\ состоит из:
acmdwrap.dll
imageinfo.txt
S000
S001
S002
S003
imageinfo.bin
В кухне от Mondy похожая структура наблюдается в папке KITCHEN\SYS\OS.