Утилита предназначена для последовательного размещения модулей в памяти WM6.1/6.5.
Полное описание
###################################################################
# #
# "EXTReloc" предназначен для последовательного размещения модулей в памяти WM6.1/6.5. #
# #
###################################################################
1.Основные особенности и отличия от других программ:
1.1 G'Reloc, не работает с нативным ядром 6.5, также некорректно обрабатывает flag "L"
модуля. Такой модуль должен полностью находиться в слоте 0, без выделения RW-секций
(я не могу это утверждать с абсолютной уверенностью, но на моей прошивке так было...)
1.2 WMreloc2 работает несколько некорректно с переходами между слотами,
особенно между 60м и 61м. Так же не работает с флагом "L".
1.3 Пересоздаются также файлы imageinfo.txt(удобно смотреть)
1.4 Встроенный "Маппер" - можно смотреть карту любой прошивки
1.5 Наглядно показывается и редактируется содержимое папок .VM и .ROM
(различные границы)
1.6 Работа с XIP
****************************** ВАЖНО!!! **********************************************
Для работы утилиты ОБЯЗАТЕЛЬНО нужны файлы *.dsm. Я не проверял как она будет
работать с одним *.dsm. Потому в кухне вставляйте EXTReloc либо до сборки всех *.dsm
в один(предпочтительный вариант), либо вообще до BuildOS(но тогда пакеты удаляйте
сами, не используя "options.xml")
********************************************************************************
******
2.Основные возможности данной программы:
2.1 EXTReloc позволяет релочить кроме IMGFS-модулей, модули XIP.
Причем есть возможность релока NK.EXE,GIISR.DLL и подобных модулей, которые
находятся в RAM. Работа с XIP может скрываться - потянуть белый разделитель влево,
тогда откроется работа с IMGFS. Чтобы вернуть обратно - щелкните по разделителю...
2.2 Модули IMGFS релочаться в той последовательности, которая есть в packages.cif
(проверял на своей офф. прошивке, там все модули располагаются в последовательности
указанной в packages.cif), но опция отключаемая(см. "Options")
2.3 Флаг "L" содержится в *.dsm и указывает, что модуль должен находиться полностью
в слоте 0, без выделения RW-секций. Но опция так же отключаемая...
Существует проверка:
Если в *.dsm модуля есть флаг "L", но его e32_Vbase находится не в 0м слоте,
то программа выдаст запрос - что делать с таким(такими) модулями -
переносить их в 0й слот или нет. Если же и флаг "L" и Vbase в 0м слоте, то
такой модуль однозначно попадет полностью в 0й слот !!!
(если стоит галка в настройках - "Use flag "L" for IMGFS")
Данный запрос можно отключить в опциях, включив "Disable dialog for "L" in IMGFS".
2.4 Править можно и нужно(для оптимального распределения) синие ячейки, зеленые ячейки
править можно, но они все равно перерасчитываются smile_good.gif Серые ячейки править нельзя.
2.5 Программа использует относительные пути в настройках (удобно в составе кухни)
2.6 Можно работать, как с плоским дампом IMGFS(папка "dump" после работы BuildOS...),
так и с разбитым на пакеты(папка c OEM,SYS,ROM). Указывается в настройке в поле
"IMGFS Path". Если пишете сами путь, то будьте внимательны - первый и последний слеш
обязателены!
****** Рекомендации: *****************************************************************
При работе с XIP рекомендуется указывать здесь путь к IMGFS разбитой
на пакеты (папки OEM,ROM,SYS), т.к. программа поправит .VM и .ROM, дальше при
работе BuildOS папки VM и ROM перенесуться в плоский дамп, и уже при сборке прошивки
утилите нужно будет в командной строке указать путь к плоскому дампу. Выполнив эти
рекомендации не нужно будет постоянно менять пути в настройках!!!
********************************************************************************
*******
В поле "XIP Path" выбирается папка, которая должна содержать XIPPort.exe и
папку OUT. Если пишете сами путь, то будьте внимательны - первый и последний слеш
обязателены!
Поле "LOGS Path" может быть любым, туда сохраняются MAP.txt и логи с закладки "Debug"
2.7 Настройки сохраняются в "EXTReloc.ini"
2.8 В настройках можно указать границы для каждого слота, выше которых модули релочиться
не будут и перейдут в след. слот. Либо, если это уже слот 0, выводится сообщение, о
нехватке места - передвиньте границу, либо переведите часть модулей в файлы.
Последовательность заполнения слотов для нативного 6.5: 1-61-60-0, для 6.1: 1-0
2.9 Есть отключаемая вкладка "Debug", в нее выводится информация. В верхний список
попадают обычные модули, в средний - модули с флагом "L", а так же nk.exe и модули,
исполняемые по месту в RAM(флаг "K"). В нижнем окне ведется Log. Лог и списки можно
сохранить в текстовые файлы. Для этого - двойной клик на списке...
"Set active page "Debug" during reloc" - во время релока переходить на вкладку
"Debug"...
2.10 Встроенный маппер может показывать так же модули XIP (нужен ROMHDR.txt,удобно
смотреть полное распределение памяти). Данная опция также отключаемая.
"Create MAP.txt" в настройках - создавать MAP.txt при релоке.
Если поставить галочку в настройках на "View MAP.txt after reloc", то карта будет
показываться сразу после релока. "Create MAP.bak" - переименовывать предыдущий
MAP.txt в MAP.bak.
"Build MAP.txt" - можно посмотреть карту любой прошивки(есть запрос путей).
######################## Теперь немного о работе с XIP'ом. #########################
1. Запускаем XIPPort("Import XIPPort")
2. Дампим XIP'ы(родной и донора)
3. Меняем папки OEMXIPKERNEL,переписываем ROMHDR.txt родной. Также родные .VM и .ROM,
должны быть в папке с IMGFS.
4. Кнопки открытия и сохранения .VM и .ROM не обязательны, если просто хотите открыть -
посмотреть(отредактировать) границы.
5. Когда собрали все папки и удалили ненужные модули, жмем "Realloc V(DLL)" -
отрелочатся модули в слоте 1 и их RW-секции в 0м слоте.
Здесь же происходит релок модулей в области physfirst-phislast.
При этом адрес physlast увеличится на 0х100000. Это сделано для того, чтобы XIPPort
сумел разместить новые модули в адресном пространстве physfirst-physlast родного
ROMHDR. XIPPort не умеет сам отодвигать в большую сторону эту границу, поэтому если
пространства не хватает, то он об этом явно скажет - "Not enough space".
Если не указана опция "Move dllfirst (Lo)", то между XIP модулями и IMGFS будет
пустое пространство размером 256 Кб (по умолчанию в оригиналных прошивках)
6. Жмем в XIPPort "Realloc P". XIPPort поправит dataptr модулей и заполнит
physfirst-physlast. Если напишет "Unknown o32 region flags: d0000040", то здесь
ничего страшного, просто XIPPort "не понимает" секцию с флагом IMAGE_SCN_MEM_SHARED,
и ругается, но никаких проблем не возникает - релок проходит нормально.
************* ВАЖНО - операции обязательны!!! **************************************
7. Теперь нам нужно поджать границу physlast. !!!Обязательно!!! - Жмем "Write map.txt"
в XIPPort.
********************************************************************************
****
8. Теперь релочим NK.EXE и т.п - кнопка "Realloc NK.EXE..."
Сначала утилита вытащит последний реальный адрес в пространсве physfirst-physlast
из MAP.txt и подставит в ячейку "physlast", потом запустится релок
9. Последний раз жмем "Realloc P".
10. Смотрим карту "Write map.txt" - "View MAP.txt", если пересечений нет, границы все
на месте, то жмем "Build xip_out.bin".
Все XIP готов.
##################### Работа с параметрами для XIP ##################################
1. Если программа запускается с параметрами, то автоматически запустится процесс
релока и произойдет переход на вкладку "Debug"!
2. Программа поддерживает следующие параметры командной строки:
-WM65 - работа с нативным ядром 6.5, если параметр не указан то - WM6.1
-dX[XIP Path] - ОТНОСИТЕЛЬНЫЙ путь к XIP, параметр обязательный!
Если сам путь не указан, а только "-dX", будет использован
текущий каталог. Путь указывается без пробелов, первый и
последний слеш не обязательны.
-d[IMGFS Path] - ОТНОСИТЕЛЬНЫЙ путь к OS, параметр обязательный(,VM и .ROM)!
Если сам путь не указан, а только "-d", будет использован
текущий каталог. Путь указывается без пробелов, первый и
последний слеш не обязательны.
-l[LOGS Path] - ОТНОСИТЕЛЬНЫЙ путь к EXTReloc.log (кроме информации о релоке здесь
также указываются ОШИБКИ !!!). Если сам путь не указан, а только "-l",
будет использован текущий каталог. Если данный параметр не указан
вообще, то EXTReloc.log создан не будет! Путь указывается без
пробелов, первый и последний слеш не обязательны. Перед формированием
лога старый лог, если он существует, удаляется.
-lbak[LOGS Path] - ОТНОСИТЕЛЬНЫЙ путь к EXTReloc.log (кроме информации о релоке здесь
также указываются ОШИБКИ !!!). Если сам путь не указан, а только "-lbak",
будет использован текущий каталог. Если данный параметр не указан
вообще, то EXTReloc.log создан не будет! Путь указывается без
пробелов, первый и последний слеш не обязательны. Перед формированием
лога старый лог, если он существует, переименовывается в EXTReloc.bak
*********** Примечание ****************************************************************
Параметры "-l" и "-lbak" взаимоисключающие, указывается только один из них!!!
********************************************************************************
*******
-relDLL - релок виртуальных адресов XIP(кнопка "Realloc V(DLL)")
-relNK - релок модулей в RAM(кнопка "Realloc NK.EXE,GIISR.DLL,etc")
-DllLo - поджимать границу "dllfirst (Lo)"
-noClose - если указать данный параметр, то программа останется открытой после
релока.
########################### Работа с IMGFS #####################################
1. Открывается, если потянуть разделитель(белая полоса) влево.
2. Кнопки открытия и сохранения .VM и .ROM не обязательны, если просто хотите открыть -
посмотреть(отредактировать) границы.
3. Основная кнопка - "Realloc IMGFS..."
*** Рекомендации: *******************************************************************
Заполнение слота 0 под завязку скорее всего происходит потому что:
3.1 EXTReloc задает вопрос, если есть несовпадение: например адрес e32_Vbase находится в
слоте 0, а флаг "L" у модуля отсутствует или наоборот флаг "L" есть, а адрес
e32_Vbase находится в слотах 1,(61,60).
3.2 Если ответить ей "Yes(to ALL)", то она перенесет в 0 слот все эти несоответствия
плюс те модули, где соответствие ЕСТЬ!!! Потому скорее всего слот 0 забит!
3.3 Выход из этой ситуации может быть такой (IMHO самый оптимальный) - релок в
два прохода:
"1й-Проход" - отвечаем "Yes(to ALL)", при этом самое ГЛАВНОЕ - флагу "L" станет
соответствовать e32_Vbase.
"2й-Проход" - отвечаем "No(to ALL)", тогда все модули которые не имели флага "L"
перенесутся по слотам 1(60,61) и в слоте 0 останутся только модули с флагом "L",
что нам и нужно!!!
Почему сразу я не переношу в 0й слот модули только с флагом "L" ?
Потому что, можно это делать не для всех модулей, а на выбор для каждого smile_good.gif))
И во вторых - может быть Вы знаете, что модуль должен быть в слоте 0, а по какой-то
причине флаг "L" в *.dsm отсутствует, например "DSM_Editor by Ervius", если нажать
"Update dsm in a package", вообще сбрасывает все флаги - остаются только "S" и "H".
3.4 Если поставить опцию "Disable dialog for "L" in IMGFS", то данный запрос будет
отключен!!! И программа просто перенесет в слот 0 только модули с флагом "L" в
*.dsm. Данную поцию можно использовать, если Вы точно уверены в том, что все *.dsm
файлы корректны!!! (заменяет 2 прохода, описанные выше)
********************************************************************************
********
########################### Работа с IMGFS в составе кухни. ###########################
1. Если программа запускается с параметрами, то автоматически запустится процесс
релока и произойдет переход на вкладку "Debug"!
2. Программа поддерживает следующие параметры командной строки:
-WM65 - работа с нативным ядром 6.5, если параметр не указан то - WM6.1
-d[IMGFS Path] - ОТНОСИТЕЛЬНЫЙ путь к OS, параметр обязательный! Если сам путь
не указан, а только "-d", будет использован текущий каталог.
Путь указывается без пробелов, первый и последний слеш не
обязательны.
-m[LOGS Path] - ОТНОСИТЕЛЬНЫЙ путь к MAP.txt. Если сам путь не указан, а только
"-m", будет использован текущий каталог. Если данный параметр не
указан вообще, то MAP.txt создан НЕ БУДЕТ! Путь указывается без
пробелов, первый и последний слеш не обязательны. Перед
формированием карты старый MAP.txt, если он существует, удаляется.
-mbak[LOGS Path] - ОТНОСИТЕЛЬНЫЙ путь к MAP.txt. Если сам путь не указан, а только
"-mbak", будет использован текущий каталог. Если данный параметр не
указан вообще, то MAP.txt создан НЕ БУДЕТ! Путь указывается без
пробелов, первый и последний слеш не обязательны. Перед
формированием карты старый MAP.txt, если он существует,
будет переименован в MAP.bak
*********** Примечание ****************************************************************
Параметры "-m" и "-mbak" взаимоисключающие, указывается только один из них!!!
********************************************************************************
*******
-l[LOGS Path] - ОТНОСИТЕЛЬНЫЙ путь к EXTReloc.log (кроме информации о релоке здесь
также указываются ОШИБКИ !!!). Если сам путь не указан, а только "-l",
будет использован текущий каталог. Если данный параметр не указан
вообще, то EXTReloc.log создан не будет! Путь указывается без
пробелов, первый и последний слеш не обязательны. Перед формированием
лога старый лог, если он существует, удаляется.
-lbak[LOGS Path] - ОТНОСИТЕЛЬНЫЙ путь к EXTReloc.log (кроме информации о релоке здесь
также указываются ОШИБКИ !!!). Если сам путь не указан, а только "-lbak",
будет использован текущий каталог. Если данный параметр не указан
вообще, то EXTReloc.log создан не будет! Путь указывается без
пробелов, первый и последний слеш не обязательны. Перед формированием
лога старый лог, если он существует, переименовывается в EXTReloc.bak
*********** Примечание ****************************************************************
Параметры "-l" и "-lbak" взаимоисключающие, указывается только один из них!!!
********************************************************************************
*******
***** Общее замечание *****************************************************************
1. Если в параметре "-m"("-mbak") уже указан путь, то в параметре "-l"("-lbak") его
указывать не обязательно и наоборот! Если путь указан в обоих параметрах, то будет
браться первый встретившийся!
2. Если указанный путь для логов не существует, он будет создан!!!
********************************************************************************
*******
-noImL - отключает флаг "L" для IMGFS. Если параметр не указан, флаг "L", будет
использован!
-noDlgL - отключает запрос программы по переносу модулей в слот 0. Переносятся
только модули с флагом "L" в *.dsm!!! (Заменяет релок в 2 прохода)
-DelImTXT - удалять imageinfo.txt при релоке(только для IMGFS).
-noClose - если указать данный параметр, то программа останется открытой после
релока.
**** Рекомендации: ************************************************************
- Флаг "L" для IMGFS - есть пережиток прошлого, поэтому для WM6.5(native NK.EXE)
его лучше снять!
Если прошивка при этом заработает без глюков, то в слоте 0 у Вас будет больше
пространства для текущих процессов! Для WM6.1 этот флаг лучше оставить, т.к.
слотов мало, а модулей много - и пусть лучше модули с флагом "L" будут в 0м
слоте, чем другие!
- Для XIP флаг "L" снимать скорее всего нельзя! smile_good.gif)
Как бы нам не хотелось, но собрать прошивку без глюков возможно только при корректных
*.dsm файлах, поэтому если Вы их правите - правьте аккуратно, следите за флагами!
********************************************************************************
**
################################################################################
########
Удачи Вам ! wink.gif
Отдельная благодарность: Barin(asusmobile.ru) и
Mamaich(используются части кода RecMod)
Yad