Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форумы PDA2U.RU _ Шаманства для посвященных _ Полное портирование прошивок с устройства на устройство

Автор: AGC 14.2.2008, 18:04

Решил открыть интересную тему полного портирования прошивок с устройства на устройство. Пока видимо в закрытом разделе... Если есть другие мнения, можно обсудить?
---
Собственно, предпосылкой для темы является достигнутый результат - портированная целиком WM6 с Rover G6 на HP RW6815, а также отсутствие полной и подробной информации по данному вопросу (портирования прошивок между разными устройствами). Ситуация аналогична портированию XIP, по которому у нас на сайте, пожалуй, самая подробная информация (и отнюдь не только в Рунете). Хоть пока и не сведенная в единую методику для общего случая...

В общем, не претендуя на особую оригинальность и обобщенность, изложу сейчас несколькими сообщениями, как портировать WM6 с ровера G6 на HP 6815. Принципы и методика собственно общие и для других устройств smile.gif

Автор: AGC 14.2.2008, 18:27

Общие принципы и технология

Описываю исходя из использования атомовской кухни, которую публиковал в соседней ветке, и терминологии "наших" устройств, чтоб было проще понимать.

1. Разбираем прошивку с устройства-донора. Нам нужны IMGFS, XIP, ну и ExtRom, если он есть..
2. Разбираем XIP прошивки-донора, портируем туда свое ядро (или портируем XIP на свое ядро, по вкусу smile.gif ). Релочим M'Reloc_nk и XIPPort-ом при портировании все на "правильные" адреса целевого устройства при необходимости (!включая релок coredll.dll на "правильные" адреса с помощью M'Reloc!).
3. Разбираем IMGFS прошивки-донора на dump и далее на SYS и OEM.
4. Релочим разобранный IMGFS прошивки-донора на "правильные" адреса целевого устройства с помощью G'Reloc.
5. Заменяем OEMDrivers в разобранной IMGFS прошивки-донора на целевую (в описании исхожу из "правильной" прошивки, где OEM значит именно OEM, а не самосборных порнографий, где OEMDrivers засунуты в SYS... иначе апроксимируем все на реальный случай...), правим RGU-реестра по необходимости. Ребилдим DSM от OEMDrivers. (...можно раскидать на несколько пакетов оригинальный OEMDrivers, чтобы не парится... исходим из пакета целевого устройства при разбиении на пакеты...)
6. Закидываем в ROM свой diskimage_Ver.nb0, файлики XIP, которые там требуются (boot.rgu и т.д.)
7. Зашиваем в diskimage_Ver.nb0 новый собранный XIP.
7. Собираем прошивку, шьемся, ловим "неожиданности" smile.gif

В целом, вроде примерно так. smile.gif

Автор: AGC 14.2.2008, 19:02

Пример портирования Ровера G6 на HP RW6815

Конкретику описывать гораздо проще biggrin.gif Общая технология была понятна, но вот нюансы... В общем, делал так (опускаю эксперименты, пишу сразу по результату):

1. С помощью кухни Atom Life разобрал прошивку Rover G6 из доступных мне источников (см. ветку про прошивку Ровер G6 в разделе "Прошивка"). Вытащил XIP и IMGFS, распаковал XIP в общий формат и разобрал IMGFS в виде dump. ExtRom пока не найден sad.gif
2. Пересобрал XIP, там все просто и абсолютно аналогично портированию XIP с атомов (см. ветку про разборку XIP в разделе "Шаманства..."). Даже никаких модулей не пришлось двигать дополнительно от своего ядра, все заимствовал от варианта под атом. Coredll.dll тоже двигать не пришлось...
3. Закинул dump от ровера в кухню, написал батник DumpToPackages (в опубликованном варианте в соседней ветке прилагается), запустил его и получил OEM и SYS.
4. В ROM закинул все от 6815 (diskimage_Ver.nb0 и т.д.), в кухне есть и для 6815 и для роверов/орсио...
5. Запустил G'Reloc из кухни, ввел "правильные" адреса для наших устройств:
- slot 0: 01 F9 00 00
- slot 1: 03 D3 00 00
- size: 9E 90 00 00
- unknown: 00 00 00 00
6. После релока сделал ход конем (как нужно делать правильно, читать выше, я делал, чтобы запустить smile.gif ) . ТУПО перегнал весь OEMDrivers из своей прошивки из SYS в OEMDrivers из OEM в целевой. Удалил из целевой ее DSM и RGU, перебилдил DSM. (... правильно, все аккуратненько, ручками, с пересбором... smile.gif ).
7. Заменил XIP в ROM на пересобранный.
8. Собрал прошивку и "Ура!!! Заработало!!!" biggrin.gif


P.S. Сейчас закину в качестве опорного вариант для 6815 и опубликую ссылку. Можно разобрать на пакеты и модифицировать кухней (для роверов и орсио там также все есть), если нужна прошивка G6.

P.P.S. Оговорюсь, я преследовал две цели - академический интерес и заимствование модулей для нашей с ArHon-ом сборки. То есть создание полностью рабочей прошивки на базе G6 не входило в мои интересы. Для полностью рабочей нужно внимательно просмотреть RGU-шку от OEMDrivers от G6 и отпатчить ее ручками smile.gif Правда я обещал народу в ветке про прототип русской WM6 для ровера, что будет альтернативный вариант, но может кто-нибудь из ровероводов соберет его? Мне сложно без самого девайса... smile.gif Думаю, все были бы очень благодарны... Прошивка то реально живая с кучей "наворотов"!

P.P.P.S. Меня же сейчас очень интересует ExtRom от G6...

Автор: AGC 14.2.2008, 19:23

Вот, вроде пока и все. smile.gif
Общанная ссылка: http://rapidshare.com/files/91813713/HP_RW_6815_Rover_G6_WM6_RUS.zip.html

Автор: BigMike 14.2.2008, 20:40

Просто мегареспект!

Цитата(AGC @ 14.2.2008, 18:27) *
4. Релочим разобранный IMGFS прошивки-донора на "правильные" адреса целевого устройства с помощью G'Reloc.
5. ... правим RGU-реестра по необходимости. Ребилдим DSM от OEMDrivers.

Вот эти моменты поясни, плиз smile.gif

PS портировать для Ровера могу попробовать я - тем более как раз сбирался портировать прошивку с профета...
Только когда это будет? smile.gif Времени нету нифига sad.gif

Автор: AGC 15.2.2008, 14:40

Цитата(BigMike @ 14.2.2008, 20:40) *
Цитата

4. Релочим разобранный IMGFS прошивки-донора на "правильные" адреса целевого устройства с помощью G'Reloc.
5. ... правим RGU-реестра по необходимости. Ребилдим DSM от OEMDrivers.

Вот эти моменты поясни, плиз smile.gif

4. Релочим разобранный IMGFS прошивки-донора на "правильные" адреса целевого устройства с помощью G'Reloc.
Практика... Запускаем G'Reloc из кухни, вводим в окошко "правильные" адреса для наших устройств:
- slot 0: 01F90000
- slot 1: 03D30000
- size: 9E900000
- unknown: 00000000

(...изначально "правильные" адреса можно посмотреть, запустив G'Reloc над своей целевой прошивкой или посмотреть, по-моему, в imageinfo.txt в подпапке .VM папки SYS своей же целевой прошивки...)

Дополнительные общие заметки по тому, что и как релочится G'Reloc:
1. Slot 00 and 01 layout structure (i may be wrong):

slot 00:
[0x01xxxxxx - 0x01xxxxxx] modules virtual bases aligned to 0x10000
[0x01xxxxxx - 0x01xxxxxx] actuals of modules in slot 01, aligned to 0x1000
ending of this interval is "Slot 00 VA End" (not including XIP actuals).
[0x01xxxxxx - 0x02000000] actuals of XIP modules wich landed in slot 01.

slot 01:
[0x02000000 - 0x02020000] - reserved space. (IMHO)
[0x02xxxxxx - 0x02xxxxxx] - virtual bases of slot 01 modules, aligned to 0x1000, ending of this interval is "Slot 01 VA End"
[0x02xxxxxx - 0x04000000] - virtual bases of XIP modules.


2. The dll files which are not in module form (S*, imageinfo.* ) are loaded in slot 01 and do not require relocation.


Чуточка дополнительной теории, не совсем по поводу G'Reloc... Информация для размышления, пока сам до конца не разобрался... Вообще, принцип XIP предполагает исполнение по месту расположения, т.е. без обычного для большого Windows механизма загрузки в память и пересчета адресов операционной системой при запуске модуля. Что делает G'Reloc понятно, не совсем пока понятно, разбирается ли он со связями (т.е. импорт функций по адресам и вызовы опять же по прямым адресам). Скорее всего, нет, тогда возникает ситуация, когда некоторые библиотеки, обладающие указанными в скобках особенностями, нужно бы ручками выставлять на свои изначальные места, если они тем или иным способом связаны с другими напрямую по адресам... Но с этим нужно более глубоко разбираться...


5. ... правим RGU-реестра по необходимости. Ребилдим DSM от OEMDrivers.
Тут основная проблема в несовпадении по структуре и составу пакетов OEMDrivers донора и цели. В OEMDrivers часто вставлены не только драйвера, но и куча ценных програм и прочих библиотек OEM (кодеки и т.п.). Как я описывал в примере портирования, делать вообще-то нельзя. Т.к. я просто выкинул всю реестровую часть от дополнительных модулей OEM. Оно, конечно, и без этого в целом работает. Но все же, на мой взгляд, стоило бы делать примерно так:

5.1. Анализируем структуру и состав OEMDrivers и там и там, включая в первую очередь анализ RGU на предмет драйверов.
5.2. Копируем весь пакет OEMDrivers целевой прошивки кроме RGU и DSM.
5.3. Редактируем RGU в источнике на предмет всего, что имелось в целевой прошивке, заменяя пересекающиеся, удаляя лишние, добавляя отсутствующиеся части относящиеся и смежные с драйверами. Одновременно удаляем лишние уже не нужные модули, которые в нашей прошивке другие (были заменены функционально другими библиотеками, если прошивки совсем разные).
5.4. С помощью BuildDSM.exe из кухни ребилдим DSM от нового собранного OEMDrivers.

Как вариант, вместо 5.2-5.3 можно разбить пакет OEMDrivers источника на парочку. Вместо первого просто засунуть полностью свой целевой OEMDrivers, во втором просто вычистить все, что есть в первом (лишние файлы и модули + чистка RGU).


Вроде так smile.gif Только сами шаги нужно делать в той последовательности, которую я описал. То есть сначала релочим модули, а потом меняем OEMDrivers на свой.


Цитата(BigMike @ 14.2.2008, 20:40) *
PS портировать для Ровера могу попробовать я - тем более как раз сбирался портировать прошивку с профета...
Только когда это будет? smile.gif Времени нету нифига sad.gif

Ясно smile.gif Могу предложить в качестве помощи собрать прототип с ядром и драйверами ровера, а дальше уже его можно будет дорабатывать. Сегодня вечером закину smile.gif

Автор: BigMike 15.2.2008, 15:25

Цитата
Могу предложить в качестве помощи собрать прототип с ядром и драйверами ровера

Так неинтересно - я сам хочу smile.gif

Автор: AGC 15.2.2008, 15:44

Цитата(BigMike @ 15.2.2008, 15:25) *
Так неинтересно - я сам хочу smile.gif

Ок. Тогда не буду biggrin.gif Займусь тогда экспериментом с HTC Wizard, хочу с него адаптировать прошивку...

Автор: BigMike 15.2.2008, 16:08

Цитата
Займусь тогда экспериментом с HTC Wizard, хочу с него адаптировать прошивку...

Может, для флейма сделаешь прототип? wink.gif

Автор: AGC 18.2.2008, 11:46

Цитата(BigMike @ 15.2.2008, 16:08) *
Может, для флейма сделаешь прототип? wink.gif

Можно, но только несколько позже smile.gif Я пока 6.1 изучаю на глюки своей же русификации smile.gif

Автор: AGC 24.2.2008, 12:34

Забыл написать, для портирования самосборных прошивок с других устройств нужно еще разбираться с сертификатами (делать их микс)... А то будет веселая картинка, когда устройство пойдет в загрузку, да на этом и будет висеть...

Хотя, тут как повезет, на G6 проблемы не было, а вот HTC Wizard с прошивкой от 3ppc вызвал проблему smile.gif

Автор: AGC 12.7.2008, 23:33


 ! 

Перенес тему из Закрытого раздела в Шаманства в связи с возникновением вопросов на данную тему в разделе Прошивка :)
 

Русская версия Invision Power Board (http://nulled.cc)
© Invision Power Services (http://nulled.cc)