Разбираем XIP |
|
Разбираем XIP |
15.11.2007, 0:02
Сообщение
#1
|
|
PDA2U.RU Team Группа: Admin Сообщений: 1806 Регистрация: 20.10.2007 Из: Moscow Пользователь №: 11 Спасибо сказали: 172 раз(а) Девайс:Samsung Galaxy Ace |
В приложении роверовский XIP (любезно выковырянный k0ster'ом) и утилиты для ковыряния.
При распаковке этого XIP сталкиваюсь с проблемой: не могу построить карту (write map). Обращался к k0ster'у - у того карта строится. Попробуйте, строится ли карта у вас? Сообщение отредактировал BigMike - 18.11.2007, 23:48
Прикрепленные файлы
|
|
|
3.1.2008, 5:35
Сообщение
#2
|
|
PDA2U.RU Team Группа: Admin Сообщений: 4884 Регистрация: 25.11.2007 Из: СПб Пользователь №: 32 Спасибо сказали: 1657 раз(а) Девайс:RW6815/P320/Diamond |
Портирование ядра ОС из XIP WM6 ATOM/ATOM EXEC на аппаратное ядро из XIP WM5 RW6815 и других собратьев
По сути вся технология описана в предыдущих сообщениях, ниже просто постарался изложить как то более системно и детально конкретные действия, да добавил небольшие общие комментарии (IMG:http://forum.pda2u.ru/style_emoticons/default/smile.gif) 1. Берем diskimage_Ver.nb0 от оригинальной WM5 WWE целевого устройства (если берется локализованная прошивка, то в дальнейшем нужно, видимо, будет править boot.rgu перед сборкой XIP на предмет замены локалей для русской 0419 на 0409, если донор WM6 WWE). 2. Вырезаем из нее XIP в виде блока 180000-53FFFF и сохраняем как xip.bin в папку для разборки. 3. Разбираем XIP с помощью XIPPort ("dump xip.bin" и затем "write maps"). 4. Аналогичным образом берем diskimage_Ver.nb0 от прошивки-донора ОС WM6 ATOM/ATOM EXEC, вырезаем из нее XIP и разбираем в другую папку. 5. Из подпапки Out/Modules разобранного XIP WM5 сразу удаляем отладочные hd.dll и osaxst0.dll (удаляем папки и соответствующие текстовые файлы). Они не нужны. 6. В XIPPort WM6 генерируем пакеты ("make pkgs"). 7. Из XIP WM6 из подпапок MSXIPKernel и MSXIPKernelLTK папки Out/Files переносим с заменой все файлы ОС WM6 в подпапку Out/Files WM5 (все файлы и папки). 8. Из XIP WM6 из подпапок MSXIPKernel и MSXIPKernelLTK папки Out/Modules переносим с заменой все файлы ОС WM6 в подпапку Out/Modules WM5 (все файлы и папки). Для RW6815 MSXIPKernelLTK была пустая. 9. Открываем сгенерированные ранее map.txt от WM5 и WM6. Смотрим секцию "Start: first DLL address - End: last DLL address" и следующую сразу за ней до "Start: start of RAM". Они должны быть просто полностью идентичны приведенным ниже. CODE RW6815 WM5 WWE ~~~~~~~~~~~~~~ 00000000 - 01f901fd L01f901fd NUL 01f901fd - 01f901fd L00000000 Start: first DLL address 01f901fd - 01fd3000 L00042e03 NUL 01fd3000 - 01fd4000 L00001000 initialized data of region_1 ceddk.dll 01fd4000 - 01fe3000 L0000f000 initialized data of region_1 TrueFFS.dll 01fe3000 - 01fe4000 L00001000 initialized data of region_2 cecompr.dll 01fe4000 - 01ff1000 L0000d000 initialized data of region_1 stratad_intel_l.dll 01ff1000 - 01ff2000 L00001000 initialized data of region_1 devmgr.dll 01ff2000 - 01ff3000 L00001000 initialized data of region_1 busenum.dll 01ff3000 - 01ff4000 L00001000 initialized data of region_1 mspart.dll 01ff4000 - 01ff5000 L00001000 initialized data of region_1 regenum.dll 01ff5000 - 01ff6000 L00001000 initialized data of region_1 imgfs.dll 01ff6000 - 01ff7000 L00001000 initialized data of region_1 fatfsd.dll 01ff7000 - 01ff9000 L00002000 initialized data of region_1 crypt32.dll 01ff9000 - 01ffa000 L00001000 initialized data of region_1 pm.dll 01ffa000 - 01ffb000 L00001000 initialized data of region_1 fatutil.dll 01ffb000 - 01ffc000 L00001000 initialized data of region_1 fsreplxfilt.dll 01ffc000 - 01ffd000 L00001000 initialized data of region_1 diskcache.dll 01ffd000 - 01ffe000 L00001000 initialized data of region_1 fsdmgr.dll 01ffe000 - 01fff000 L00001000 initialized data of region_1 certmod.dll 01fff000 - 02000000 L00001000 initialized data of region_1 coredll.dll 02000000 - 02000000 L00000000 End: last DLL address 02000000 - 03d70000 L01d70000 NUL 03d70000 - 03d76000 L00006000 Virtual base address of ceddk.dll 03d76000 - 03d80000 L0000a000 NUL 03d80000 - 03dcc000 L0004c000 Virtual base address of TrueFFS.dll 03dcc000 - 03dd0000 L00004000 NUL 03dd0000 - 03dd7000 L00007000 Virtual base address of cecompr.dll 03dd7000 - 03de0000 L00009000 NUL 03de0000 - 03df6000 L00016000 Virtual base address of stratad_intel_l.dll 03df6000 - 03e00000 L0000a000 NUL 03e00000 - 03e0c000 L0000c000 Virtual base address of devmgr.dll 03e0c000 - 03e10000 L00004000 NUL 03e10000 - 03e16000 L00006000 Virtual base address of busenum.dll 03e16000 - 03e20000 L0000a000 NUL 03e20000 - 03e28000 L00008000 Virtual base address of mspart.dll 03e28000 - 03e30000 L00008000 NUL 03e30000 - 03e34000 L00004000 Virtual base address of regenum.dll 03e34000 - 03e40000 L0000c000 NUL 03e40000 - 03e4a000 L0000a000 Virtual base address of imgfs.dll 03e4a000 - 03e50000 L00006000 NUL 03e50000 - 03e63000 L00013000 Virtual base address of fatfsd.dll 03e63000 - 03e70000 L0000d000 NUL 03e70000 - 03ee2000 L00072000 Virtual base address of crypt32.dll 03ee2000 - 03ef0000 L0000e000 NUL 03ef0000 - 03efd000 L0000d000 Virtual base address of pm.dll 03efd000 - 03f00000 L00003000 NUL 03f00000 - 03f09000 L00009000 Virtual base address of fatutil.dll 03f09000 - 03f10000 L00007000 NUL 03f10000 - 03f19000 L00009000 Virtual base address of fsreplxfilt.dll 03f19000 - 03f20000 L00007000 NUL 03f20000 - 03f25000 L00005000 Virtual base address of diskcache.dll 03f25000 - 03f30000 L0000b000 NUL 03f30000 - 03f45000 L00015000 Virtual base address of fsdmgr.dll 03f45000 - 03f50000 L0000b000 NUL 03f50000 - 03f5b000 L0000b000 Virtual base address of certmod.dll 03f5b000 - 03f60000 L00005000 NUL 03f60000 - 03ff5000 L00095000 Virtual base address of coredll.dll 03ff5000 - 80580000 L7c58b000 NUL ... CODE ATOM EXEC TRED RC3 ~~~~~~~~~~~~~~~~~~ 00000000 - 01f901fd L01f901fd NUL 01f901fd - 01f901fd L00000000 Start: first DLL address 01f901fd - 01fd1000 L00040e03 NUL 01fd1000 - 01fd2000 L00001000 initialized data of region_1 ceddk.dll 01fd2000 - 01fe1000 L0000f000 initialized data of region_1 TrueFFS.dll 01fe1000 - 01fe2000 L00001000 initialized data of region_2 cecompr.dll 01fe2000 - 01fef000 L0000d000 initialized data of region_1 stratad_intel_l.dll 01fef000 - 01ff0000 L00001000 initialized data of region_1 regenum.dll 01ff0000 - 01ff1000 L00001000 initialized data of region_1 pm.dll 01ff1000 - 01ff2000 L00001000 initialized data of region_1 mspart.dll 01ff2000 - 01ff3000 L00001000 initialized data of region_1 imgfs.dll 01ff3000 - 01ff4000 L00001000 initialized data of region_1 fsreplxfilt.dll 01ff4000 - 01ff5000 L00001000 initialized data of region_1 fsdmgr.dll 01ff5000 - 01ff6000 L00001000 initialized data of region_1 fatutil.dll 01ff6000 - 01ff7000 L00001000 initialized data of region_1 fatfsd.dll 01ff7000 - 01ff8000 L00001000 initialized data of region_1 encfilt.dll 01ff8000 - 01ff9000 L00001000 initialized data of region_1 diskcache.dll 01ff9000 - 01ffa000 L00001000 initialized data of region_1 devmgr.dll 01ffa000 - 01ffc000 L00002000 initialized data of region_1 crypt32.dll 01ffc000 - 01ffd000 L00001000 initialized data of region_1 coredll.dll 01ffd000 - 01ffe000 L00001000 initialized data of region_1 certmod.dll 01ffe000 - 01fff000 L00001000 initialized data of region_1 cachefilt.dll 01fff000 - 02000000 L00001000 initialized data of region_1 busenum.dll 02000000 - 02000000 L00000000 End: last DLL address 02000000 - 03def000 L01def000 NUL 03def000 - 03df5000 L00006000 Virtual base address of ceddk.dll 03df5000 - 03e41000 L0004c000 Virtual base address of TrueFFS.dll 03e41000 - 03e48000 L00007000 Virtual base address of cecompr.dll 03e48000 - 03e5e000 L00016000 Virtual base address of stratad_intel_l.dll 03e5e000 - 03e62000 L00004000 Virtual base address of regenum.dll 03e62000 - 03e71000 L0000f000 Virtual base address of pm.dll 03e71000 - 03e79000 L00008000 Virtual base address of mspart.dll 03e79000 - 03e83000 L0000a000 Virtual base address of imgfs.dll 03e83000 - 03e8d000 L0000a000 Virtual base address of fsreplxfilt.dll 03e8d000 - 03ea2000 L00015000 Virtual base address of fsdmgr.dll 03ea2000 - 03eab000 L00009000 Virtual base address of fatutil.dll 03eab000 - 03ebe000 L00013000 Virtual base address of fatfsd.dll 03ebe000 - 03eca000 L0000c000 Virtual base address of encfilt.dll 03eca000 - 03ed0000 L00006000 Virtual base address of diskcache.dll 03ed0000 - 03edc000 L0000c000 Virtual base address of devmgr.dll 03edc000 - 03f4e000 L00072000 Virtual base address of crypt32.dll 03f4e000 - 03fe4000 L00096000 Virtual base address of coredll.dll 03fe4000 - 03ff0000 L0000c000 Virtual base address of certmod.dll 03ff0000 - 03ffa000 L0000a000 Virtual base address of cachefilt.dll 03ffa000 - 04000000 L00006000 Virtual base address of busenum.dll 04000000 - 80180000 L7c180000 NUL ... 10. Далее берем из XIP WM5 библиотеки аппаратного ядра ceddk.dll, cecompr.dll, stratad_intel_l.dll и trueffs.dll и перемещаем их по vbase и realaddress XIP WM6 с помощью M'Reloc_nk. Они конфликтуют с pm.dll и regenum.dll от XIP WM6. Для этого запускаем M'Reloc_nk и последовательно открываем в нем папки этих библиотек из XIP WM5.Единственная хитрость, нужно добиться от M'Reloc_nk, чтобы после DoIT realaddress был правильный, для этого из нужного адреса вычитаем длину блока. В общем, для указанных выше таблиц просто привожу значения для M'Reloc_nk: ceddk.dll e32_vbase: 03DEF000 e32_realaddr: 01FD0000 (после DoIT будет 01FD0000+1000=01FD1000) trueffs.dll e32_vbase: 03DF5000 e32_realaddr: 1FC3000 (после DoIT будет 1FC3000+F000=01FD2000) cecompr.dll e32_vbase: 03E41000 e32_realaddr: 01FE0000 (после DoIT будет 01FE0000+1000=01FE1000) stratad_intel_l.dll e32_vbase: 03E48000 e32_realaddr: 1FD5000 (после DoIT будет 1FD5000+D000=01FE2000) 11. У этих четырех библиотек редактируем imageinfo.txt, заменяя значения e32_vbase и o32[x].o32_realaddr на правильные (e32_vbase берем указанные выше для M'Reloc_nk, o32[x].o32_realaddr берем оттуда же, но скалькулированный в скобочках или их map.txt WM6, x- номер региона в map.txt [там не ошибиться, будут старые значения из map.txt WM5 типа D=01FE3000]) 12. Увеличиваем в WM5 в ROMHDR.TXT physlast (ставим значение как в XIP WM6 = 9AFE2990). Впрочем, можно и точнее подогнать (я по аналогии с ATOM просто прибавил 100000...). 13. Ищем в map.txt WM5 строку старого смещения рома (можно по "rom_00") CODE 9ad20b2c - 9ad20b80 L00000054 rom_00 header: dlls=01f901fd-02000000 phys=9ac00000-9aea931c, 24 modules, 7 files, 4 copyentries ext=9ac0278c ram=80580000-84000000 cputype=000001c2 Запоминаем из нее старый адрес смещения. Пример из указанной строки: 9ad20b2c (скорее всего, будет другой, берете свой) 14. Запускаем XIPPort WM5, делаем Realoc_P и write_maps. 15. Смотрим на всякий случай новый map.txt на предмет отсутствия восклицательных знаков (конфликты). 16. Ищем в новом map.txt строку (можно по rom_00) CODE 9adb19d4 - 9adb1a28 L00000054 rom_00 header: dlls=01f901fd-02000000 phys=9ac00000-9afe2990, 24 modules, 8 files, 2 copyentries ext=9ac0271c ram=80180000-84000000 cputype=000001c2 Берем из нее новый адрес смещения. Пример из указанной строки: 9adb19d4 (скорее всего, будет другой, берете свой) 17. Ищем в S000 nk.exe старый адрес смещения рома (байты идут инвертно), меняем на новый. 18. Пробуем искать в S000 nk.exe: 05 00 52 E3 0E 00 00 8A Если нашли, далее по смещению +0x10 должно быть: 01 00 53 E3 Там и правим 01 на 02... Если не нашли, то плохо (IMG:http://forum.pda2u.ru/style_emoticons/default/smile.gif) Будем думать... 19. Собираем новый XIP ("build xip_out.bin"). 20. Закидываем в папку WM5 diskimage_Ver.nb0 от целевой WM6. 21. Шьем XIP назад (в полях вводим значения: 00180000 и diskimage_Ver.nb0, жмем "write xip_out.bin to") Вроде ничего не забыл (IMG:http://forum.pda2u.ru/style_emoticons/default/biggrin.gif) P.S. По boot.rgu. Если берется WM5 русская, я бы попробовал поменять 419 на 409. К сожалению, на этой фазе у меня еще прошивка не заводилась, когда я пытался портировать с русской WM5, поэтому сказать, что будет без замены не могу. P.P.S. В WM5 RW6815 в Files был mxip_initdb.vol, причем относился как бы к OEM. В WM6 ATOM это же лежало в IMGFS. Я дополнительно менял этот файл в XIP с коррекцией размера в текстовом файле описания. Но реально пробовал, это не оказывает какого-то влияния (по крайней мере, не заметил). P.P.P.S. Извиняюсь за столь подробное изложение, наверняка ряд вещей очевиден. Но со временем все забывается, чтобы самому потом мучительно не вспоминать. Да и писал сразу и для новичков с других устройств, чтобы не осталось неясностей и можно было при необходимости действовать по аналогии (IMG:http://forum.pda2u.ru/style_emoticons/default/smile.gif) Потом, если будут силы, попробую дописать уточненную общую инструкцию, которая приведена соседней ветке форума на английском, т.к. вещи по релоку модулей и правке nk.exe при портировании с WM6 на WM5 там как то не затронуты (да и вообще в явном и собранном виде этого нигде не нашел). |
|
|
Текстовая версия | Сейчас: 29.3.2024, 15:39 |