PDA-версия форума ASUSMobile.RU

Поиск - Профиль - Войти и проверить личные сообщения - Вход - Регистрация
Форум Asus Mobile Club Russia > Полезное > Раздел Разработчика и Программиста > О модулях в слоте 0

На страницу 1, 2, 3  След.
[Ответить на тему]

taxist@ [18.10.09, 10:21] О модулях в слоте 0:
Странным делом заняты ребята с everythingdiamond.info ,что значит "эти можно, а эти нельзя"?
Да в принципе все можно, а составлять общую таблицу совершенно бессмысленно.

Подход в этом деле разумен следующий:
Открываете скажем BaseApps,
смотрите на модули,
вычленяете модули которые по любому будут резидентны и те которые вы используете очень часто - эти компоненты оставляете модулями,
компоненты, которые вы будете использовать крайне редко или не будете вовсе можете рекмодить, а то и вовсе удалять.

Смотрим на результаты труда участников того форума:
предлагают рекмодить doclist.dll и note_prj.dll, это при том что данные библиотеки являются очень часто используемыми,
а про такой мусор как msdrm.dll, mddrm.dll ни слова...или они часто пользуются данным сервисом?
 i  AndrewSh:
taxist@, +1!!!


 i  Barin:
Выделено в отдельную тему
(Перемещено из "WM6.5 проблемы и решения")


[Ответить на тему]   Ответить с цитатой   
SCOBA [18.10.09, 15:37] :
taxist@ писал(а):
Странным делом заняты ребята с everythingdiamond.info ,что значит "эти можно, а эти нельзя"?
Да в принципе все можно, а составлять общую таблицу совершенно бессмысленно.

был старый билд 725 - так вот на нем часто наблюдались вылеты приложений (если запущено более 6-7 штук). везде твердили, что это из-за нехватки виртуальной памяти. Вот тогда я очень много времени посвятил этой проблемы и могу с уверенностью сказать что вы не правы.

Я написал утилитку для перевода ВСЕХ модулей в файлы - прошивка получается глючной. В последствии проверил это на других билдах (в том числе и на 6.1)...

Кстати при всех махинациях с модулями очень часто вылазит одна и та же проблема - невозможность выбирать методы ввода отличные от тех что поставлены по умолчанию.

[Ответить на тему]   Ответить с цитатой   
Alexx~ [18.10.09, 15:56] :
taxist@
я исходил из информации о тот, что часть модулей находится полностью в одном слоте, а другая разбита на части и расположена в двух слотах (более подробно об этом могут рассказать Yad или Barin, если захотят, я в этом не шибко силён). В связи с этим, возможно есть разница между модулями и соответственно предпочитаемые и не рекомендуемые. В любом случае я не предлагал использовать информацию с everythingdiamond.info как инструкцию по применению, а только как информацию к размышлению, пишут там такие же люди как и мы, т.е. они так же могут заблуждатся и писать чепуху, как вобщем то и мы здесь.
Yad
когда я писал замечание про initvmmap.exe, я исходил из допущения, что информация Da_G-а верна. Вот вольный перевод, англичане или американцы поправят, если что не так.

[spoiler:62a099e58a=оригинальный текст]WinMo 6 could allocate slot 0, 1 - (in order of 1 first, 0 last) for a total of 64mb of vm space for modules/files (and the running process is always mapped to slot 0, so once you encroach on this memory space, you are removing available memory to each application running) - you can see how tight this is.

WinMo 6.1 improved on this by opening up slot 60 and 61 (now the allocation order is 61, 60, 1, 0) - but modules could not be allocated here, only files. So for our relocation tools, this was essentially no change. (still only slot 1, 0 for modules) WM 6.1 also introduces the process initvmmap.exe in the MSXIPKernel, NK partition (xip.bin). This process draws a map of all virtual memory, and uses the following registry key from the boot hive (boot.hv):

Code:
[HKEY_LOCAL_MACHINE\System\Loader\ModuleInfo]
[HKEY_LOCAL_MACHINE\System\Loader\ModuleInfo\dllname.dll]
"filename.exe"=dword:1
"filename2.exe"=dword:1
This tells the system that the module dllname.dll is only required when filename.exe is running, or filename2.exe is running - and whenever these processes are not running, the virtual memory space is available, and can be dynamically allocated to by the system.

WinMo 6.5 improves on this by opening up Slots 60 and 61 to Modules - yielding an extra 64mb of potential Virtual Memory space. (the allocation order is now 1, 61, 60, 0 for modules, 60, 61, 0 for files) - In order for the Kernel to recognize these new Slots as being mappable for Modules, it must be updated to the 6.5 codebase. This is where the 6.5 nk.exe comes in, and why it's so important.

Profiling Virtual Memory is an important job for an OEM - the less available in Slot 0, the sooner a device will kick back out of memory errors (even if it's not truly out of memory) - and the worse the user experience will be. Some ROM's I have seen have less than 20MB available in slot 0 (and the user experience is as bad as you might imagine)
[/spoiler:62a099e58a]
WinMo 6 может выделить слоты 0, 1 - (по порядку - первый слот 1, последний слот 0) общим объёмом 64 Мб пространства VM для модулей/файлов (запущенный процесс всегда распределяется в слот 0, поэтому, если вы заполняете эту память, вы уменьшаете доступную память для каждого запущенного приложения).

WinMo 6.1 улучшилось за счет открытия слотов 60 и 61 (в настоящее время порядок распределения 61, 60, 1, 0), - но модули не могут быть размещены в новые слоты, только файлы. Так что для наших инструментов перемещения, ничего существенно не изменится (пока только Slot 1, 0 для модулей). WM 6.1 также вводит процесс initvmmap.exe в MSXIPKernel, NK раздел (xip.bin). Этот процесс рисует карту всей виртуальной памяти и использует следующий ключ реестра из загрузочного улья (boot.hv):
Код:
[HKEY_LOCAL_MACHINE\System\Loader\ModuleInfo]
[HKEY_LOCAL_MACHINE\System\Loader\ModuleInfo\dllname.dll]
"filename.exe"=dword:1
"filename2.exe"=dword:1

Это сообщает системе, что модуль dllname.dll необходим только когда filename.exe или filename2.exe работает и когда эти процессы не работают, виртуальная память доступна и может быть динамически выделена на нужды системы.

WinMo 6.5 продолжает это улучшение, открывая слоты 60 и 61 модулей - что приносит дополнительные 64 Мб виртуальной памяти. (порядок распределения теперь такой - 1, 61, 60, 0 для модулей, 60, 61, 0 для файлов). Для того, чтобы ядро признало эти новые слоты как доступные для размещения модулей, оно должно быть обновлено до нативного 6.5. Это - то, чем отличается 6.5 nk.exe и почему это настолько важно.

Профилирование виртуальной памяти является важной задачей для OEM - чем меньше доступно места в слоте 0, тем скорее устройство выдаст ошибку "Недостаточно памяти" (даже если в действительности это не так) и тем хуже будет работать устройство. Некоторые прошивки, которые я видел, имели менее 20 Мбайт доступных в слоте 0 (и они работали так же плохо, как вы можете себе представить).
Конец цитаты.
-----------------------------
Я сделал вывод, что initvmmap.exe работает, только при наличии слотов 60 и 61, т.е. начиная с 6.1 (и на 6.5 тоже). Во всяком случае, на Асусе я не увидел никакой разницы, есть initvmmap.exe или нет. На устройствах с нативными nk 6.1/6.5 думаю не стоит его удалять.

[Ответить на тему]   Ответить с цитатой   
taxist@ [18.10.09, 16:20] :
Alexx~
То что часть модулей, полностью находится в 0 слоте, объясняется не особенностями конкретных модулей, а тем что им банально не хватило места в слоте 1.

SCOBA
Переведя все модули в файлы ты ровно так же переполнишь память как и наличием излишнего количества модулей.
Не понимаю в чём я не прав..тем более чтопроблемы модулей и файлов были разжёваны даже не в эпоху 725 билда, а значительно раньше - во времена появления первых билдов вм5

[Ответить на тему]   Ответить с цитатой   
Alexx~ [18.10.09, 16:33] :
taxist@
честно, я не очень хорошо в этом разбираюсь для того, что бы спорить (да собственно я и не хочу спорить), но насколько я понимаю, именно исходя из особенностей модулей (часть модулей имеют определённый признак, который указывает в каком слоте он должен быть размещён) они попадают в тот или другой слот, а не в алфавитном порядке. Т.е. например модуль с именем а1 попадёт в слот 0, а модуль с именем z9 попадёт в слот 1.

[Ответить на тему]   Ответить с цитатой   
Yad [18.10.09, 17:41] :
taxist@ писал(а):
Alexx~
То что часть модулей, полностью находится в 0 слоте, объясняется не особенностями конкретных модулей, а тем что им банально не хватило места в слоте 1.

Ты не прав! Часть модулей имеет признак в *.dsm - это флаг "L". По этому признаку этот модуль должен быть полностью в слоте 0. Ну и ессно, если модули уже не влезают в остальные слоты(нет места), то они тоже попадают в 0й слот...

Взято с MSDN:

Код:
L to signal Romimage.exe to not split a ROM DLL between the process virtual memory area and the process slot 1. This protects DLLs that require the code and data to reside at consecutive virtual addresses.
Applies to the MODULES section only.


Полный текст тут...
PS. Это одна из причин по которой я написал новый релок...

[Ответить на тему]   Ответить с цитатой   
Barin [18.10.09, 17:47] :
taxist@ писал(а):
То что часть модулей, полностью находится в 0 слоте, объясняется не особенностями конкретных модулей, а тем что им банально не хватило места в слоте 1

Не совсем так. Есть модули, специально помечаемые флагом L в дсм - они должны находиться целиком в слоте 0, независимо от того, есть свободное место в других слотах или нет. Пример таких модулей в OS - afd.dll и несколько модулей связаных с сетью и tcpip. В OEM попадаются драйверы целиком расположенные в слоте 0.
Я как-то попробовал переместить один из таких модулей в слот 1 с выделением RW секций в слот 0 и получил неработающий Wi-Fi.


Very Happy Yad, эка мы с тобой одновременно...

[Ответить на тему]   Ответить с цитатой   
Yad [18.10.09, 17:58] :
И еще момент, может кто-то не знал - в оригинальных прошивках модули релочатся не в алфавитном порядке, а так как прописаны пакеты в packages.cif (внутри пакета в алфавитном)...

[Ответить на тему]   Ответить с цитатой   
taxist@ [18.10.09, 23:00] :
Что ж, про флаг L вполне убедительно icon_smile, спорим мы для постижения истины ,а не ради спора как такового.
Однако разбирая разнообразные оригинальные прошивки, частенько встречал в слоте 0 совершенно разные файлы, я о SYS говорю, возможно неграмотный релок и вендорам не чужд.

[Ответить на тему]   Ответить с цитатой   
Yad [19.10.09, 08:32] :
taxist@ писал(а):
Что ж, про флаг L вполне убедительно icon_smile, спорим мы для постижения истины ,а не ради спора как такового.
Однако разбирая разнообразные оригинальные прошивки, частенько встречал в слоте 0 совершенно разные файлы, я о SYS говорю, возможно неграмотный релок и вендорам не чужд.

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

[Ответить на тему]   Ответить с цитатой   
taxist@ [19.10.09, 12:13] :
Yad писал(а):
taxist@ писал(а):
Что ж, про флаг L вполне убедительно icon_smile, спорим мы для постижения истины ,а не ради спора как такового.
Однако разбирая разнообразные оригинальные прошивки, частенько встречал в слоте 0 совершенно разные файлы, я о SYS говорю, возможно неграмотный релок и вендорам не чужд.

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


Прогнал через твою программу оригинальную прошивку для своего агрегата,
нашлось несколько модулей означенных флагом L в dsm пакетов, несколько из них (ОЕМные) при этом реально имели e32_Vbase в 1 слоте...
Похоже китайцы плевали на рекомендации MS и "пекут" ромы спустя рукава...

P.S.В настоящий момент пишу эти строки с прошивки не имеющей ни единого модуля с e32_Vbase в 0 слоте, просто проша настолько образана ,что и в 1 слоте между xip и imgfs есть приличная "дыра" icon_smile

[Ответить на тему]   Ответить с цитатой   
Yad [19.10.09, 13:51] :
taxist@ писал(а):
Yad писал(а):
taxist@ писал(а):
Что ж, про флаг L вполне убедительно icon_smile, спорим мы для постижения истины ,а не ради спора как такового.
Однако разбирая разнообразные оригинальные прошивки, частенько встречал в слоте 0 совершенно разные файлы, я о SYS говорю, возможно неграмотный релок и вендорам не чужд.

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


Прогнал через твою программу оригинальную прошивку для своего агрегата,
нашлось несколько модулей означенных флагом L в dsm пакетов, несколько из них (ОЕМные) при этом реально имели e32_Vbase в 1 слоте...
Похоже китайцы плевали на рекомендации MS и "пекут" ромы спустя рукава...

P.S.В настоящий момент пишу эти строки с прошивки не имеющей ни единого модуля с e32_Vbase в 0 слоте, просто проша настолько образана ,что и в 1 слоте между xip и imgfs есть приличная "дыра" icon_smile

Такое возможно, наример Bepe пишет, что "L" - это пережиток прошлого, очень возможно, что заработает и без него, но у многих появляются глюки(Barin например описал свой)... Можно в принципе методом исключения переводить по одному из 0го в другие слоты и проверять, если глюков нет то так оно даже лучше будет - больше пр-ва в 0м слоте... И насколько я понял для 6.5 флаг "L" менее актуален чем для 6.1

[Ответить на тему]   Ответить с цитатой   
Alexx~ [19.10.09, 14:03] :
Ну не знаю, это я раньше думал, что дождь духи насылают, теперь я думаю, что если флаг "L" используется в прошивках 6.5 (во всяком случае в оф.) то он для чего то нужен. Кроме того, там ещё десяток флагов есть, то же думаю их не из за любви к труду проставляют.

[Ответить на тему]   Ответить с цитатой   
Yad [19.10.09, 14:16] :
ну тут уже каждый волен решать за себя icon_smile Я для себя тоже решил, што если флаг L есть, то у меня нет желания в будущем получить глюк, который возможно из-за него, потому я следую рекомендациям мелкософта... Russia

[Ответить на тему]   Ответить с цитатой   
Barin [19.10.09, 14:24] :
Yad писал(а):
Можно в принципе методом исключения переводить по одному из 0го в другие слоты и проверять, если глюков нет то так оно даже лучше будет - больше пр-ва в 0м слоте...

Стрёмно это. Если сразу явный глюк вылезет, ещё ничего. А вот если что-то скрытое, которое будет проявлять себя несистематически, то ситуация будет - хуже не придумаешь. Будешь гадать - это из-за того что в полной прошивке или в билде что-то не так или из-за перемещённых модулей.
ИМХО - да здравствует флаг L и признак D=vbase+rva Wink

[Ответить на тему]   Ответить с цитатой   
Yad [19.10.09, 14:50] :
Barin писал(а):
Yad писал(а):
Можно в принципе методом исключения переводить по одному из 0го в другие слоты и проверять, если глюков нет то так оно даже лучше будет - больше пр-ва в 0м слоте...

Стрёмно это. Если сразу явный глюк вылезет, ещё ничего. А вот если что-то скрытое, которое будет проявлять себя несистематически, то ситуация будет - хуже не придумаешь. Будешь гадать - это из-за того что в полной прошивке или в билде что-то не так или из-за перемещённых модулей.
ИМХО - да здравствует флаг L и признак D=vbase+rva Wink

угу и я про то же, см. пост выше icon_smile

Добавлено спустя 6 минут 59 секунд:

Lost_Angel писал(а):

Извиняюсь,что пишу сюда,просто уже не знаю что делать.Прикладываю карту портов.

Для начала возьми DSM_Editor от Эрвиуса и посмотри dsm файлы в папках OEM\OEMDrivers и SYS\OS... на наличие флагов L в разных прошивках и сравни...

[Ответить на тему]   Ответить с цитатой   
Barin [19.10.09, 14:51] :
И ещё одно (люди, простите мне мой склероз, если я уже об этом писал).
Представьте себе такую ситуацию, что попался Вам "коварный" модуль, ресурсы которого Вы собираетесь править, но в этом модуле содержатся не только ресурсы, но ещё и код и другие данные. Допустим Vbase модуля расположен в слоте 1, и секция RW модуля отображается в слот 0 (речь естественно идёт о dll).
Мы его рекмодим и... получаем в файле Vbase 0x10000000 и все секции, выстроенные по Vbase+RVA секции.
Поправили мы ресурсы, реверсмодим его и получаем модуль с адресами, как для модуля с флагом L (реверсмоду-то всё равно) - все секции модуля будут расположены последовательно (выше Vbase).
Далее собираем дамп с объединением всех пакетов в один и естественно теряем в dsm все флаги модулей.
И что получается - при релоке такой модуль ЦЕЛИКОМ попадёт в слот 0, вместо того чтобы находиться в слоте 1, а в слоте 0 держать только секции RW. Таким образом мы сами у себя немного отъели такое дорогое пространство слота 0.
Мне попадалось 2 или 3 таких модуля в OEM, которые пришлось править из-за корявого русского перевода.
А поправить хотелось строку: Ожидание ответа, опжалуйста подождите

Конечно не факт, что такие модули попадутся каждому, но вот мне попались.


[Ответить на тему]   Ответить с цитатой   
Yad [19.10.09, 15:01] :
Barin писал(а):
И
Конечно не факт, что такие модули попадутся каждому, но вот мне попались.

Ну наконец-то Wink Именно поэтому твое условие "признак D=vbase+rva" не проканает, а релочить нужно до того как собираем все *.dsm в один(взять за правило)... Ну а если и тут бардак, тогда тока с оригинальной прошей сравнивать как-то, но и тут может быть облом...

[Ответить на тему]   Ответить с цитатой   
Barin [19.10.09, 15:07] :
Yad писал(а):
...ну наконец-то

Дык я-то учёный уже горьким опытом icon_smile , и если такой модуль поправлю, то потом его релокну вручную с теми же адресами, что и были до рекмода.
А какое условие должно проканать, чтобы отделить Low от обычных, если dsm уже в помине нет, а есть единственный dsm, да и то в нём только provxml прописаны? Я-то про это толкую... Так хоть как-то отделить можно.

[Ответить на тему]   Ответить с цитатой   
Yad [19.10.09, 16:25] :
Barin писал(а):
Yad писал(а):
...ну наконец-то

Дык я-то учёный уже горьким опытом icon_smile , и если такой модуль поправлю, то потом его релокну вручную с теми же адресами, что и были до рекмода.
А какое условие должно проканать, чтобы отделить Low от обычных, если dsm уже в помине нет, а есть единственный dsm, да и то в нём только provxml прописаны? Я-то про это толкую... Так хоть как-то отделить можно.

ИМХО тогда ни какое не проканает, ручками только сравнивать различные проши, в том числе и оригинал...

[Ответить на тему]   Ответить с цитатой   

[Ответить на тему]

На страницу 1, 2, 3  След.
Форум Asus Mobile Club Russia > Полезное > Раздел Разработчика и Программиста > О модулях в слоте 0