Перейти к содержанию
Old Phone Forum
  • Вход

    Вы сейчас не залогинены на форуме.

    Для возможности комментариев, загрузки файлов, подписок на ответы - вам надо войти.

Оптимизация кода и поиск "неиспользуемого" места в прошивке


Рекомендуемые сообщения

Америку не открою, но все же выложу свои соображения по оптимизации кода.

 

Если обращали внимание, размер оригинальной прошивки телефона е630 (файл .cla) составляет порядка 13,3 мб. Притом флешка под это дело-то на 16 метров! Конечно помимо прошивки еще 2 мб - EPROM, но остается еще порядка 700 кб – неиспользуемого кодом места. Так вот, монополия на эти 700 кб у нашей замечательной программы ResMan. Область «свободного» места задается в карте ресурсов (e630xe###.rxt) тэгами… Данная область используется при замене стандартных мелодий, шрифтов, языковых ресурсов, а вот картинки программой меняются поверх существующих. А теперь посмотрим, что же реально происходит. Итак, есть 2 варианта замены контент-начинки телефона: поверх исходных ресурсов, либо добавлением в конец прошивки нового ресурса и перебивкой табличных ссылок на данную область кода. Очевидно, что в первом варианте мы упираемся в размер исходного ресурса и не можем его увеличить, т.е. к примеру, ставя мелодию поверх существующей ее размер не должен превышать оригинала. Но в ResMan’e реализована другая логика – старая мелодия остается в коде прошивки, а новая добавляется в конец, перебиваются только ссылки (именно поэтому существует возможность вернуть все назад). Прошивка соответственно увеличивается в размерах на величину добавляемых ресурсов.

 

С заменой графических ресурсов все наоборот – они замечательно встают поверх существующих один в один, т.к. размеры идентичны, про них речи вести не будем.

 

Если после того, как вы залили прошивку, размер которой некоторым образом отличается от стандартной, вдруг опять решите поменять прошивку размер которой меньше, то «хвост разницы» естественно останется на флешке, на работе телефона это никак не отразится… останется неиспользуемый мусор.

 

Мне представляется, что логичнее было бы предоставить выбор пользователю менять ли ресурсы поверх – с ограничением на исходный размер или добавлять в конец. К сожалению, в ResMan’е такая возможность отсутствует. Возникает вполне обоснованный вопрос, а все ли полностью используют эти 700 кб.?

 

При разработке патчей я не вижу смысла теснится и приносить в жертву «неиспользуемые» ресурсы (иногда они даже очень используемые, ИМХО залазить на хохлянский язык не очень-то и хорошо), когда есть место в конце прошивки. Вот, к примеру, всеми известный автор патча «Черный список», Vadiks, принимая во внимание размеры последнего, уже не стал искать «неиспользуемые» ресурсы, а разместил код в конце бина, что вполне логично. Очевидно, что с ростом количества и размеров патчей, данная тенденция будет усиливаться и поиск «свободных» неиспользуемых участков прошивки будет занимать уйму времени и отобьет всякое желание что-либо делать.

 

Я предлагаю оставить хотя бы часть свободного места для разработчиков. Теперь об ограничениях, на которые мы натолкнемся.

 

Те 700 кб, о которых я говорил, придется делить с ResMan’ом. Т.е. к примеру, если кто-то уже у себя поменял мелодии, то разместить патчи поверх мелодий уже не получится. Кто будет двигаться? Разработчики или пользователи? Я считаю, что приоритет должен быть у патчей, а замена контент-ресурсов должна проходить по остаточному принципу. Отсюда вытекает еще вопрос, резервировать место для кода патчей можно в начале или в конце нашего блока в 700 кб. Если для патчей будет использоваться место в конце «коридора» то проблемы совместного использования сведутся к минимуму… но это вызывает определенные неудобства в размещении кода «от конца», т.е. определяя начальный адрес тела патча от последнего - по его длине (можно конечно и от фиксированного куска, скажем, начиная с 500 кб, но это опять же не оптимально, т.к. заранее резервируется 200 кб неизвестно под что). С точки же зрения пользователя этот вариант предпочтительнее в том плане, если 700 кб ранее были использованы не полностью, то наложения не произойдет. Второй вариант – размещая код в начале нашего блока, мы сразу натолкнемся на наложение. В любом случае указанных проблем не будет, если сначала уменьшить размер свободного блока в карте ресурсов, на размер патча, а потом уже менять контент-ресурсы в ResMan’e.

 

Порядок установки патча будет выглядеть следующим образом (вариант размещения патчей в конце «свободного» блока):

1. В описании патча, автор указывает конечный адрес оставшегося свободного места, который пользователь правит в карте прошивки.

2. Собственно установка патча.

 

Следующий патч, опять потребует места и соответственно, опять правим адрес в карте. Конечно, устанавливая несколько патчей необходимо просто указать последний. Оптимальным вариантом, конечно, было бы научить ResMan определять последний из адресов свободного места. А можно и вручную. Здесь уже возникает такое понятие как последовательность патчей, т.е. каждый патч идет следом друг дружкой, логично было бы присвоить каждому порядковый номер. И уже из группы патчей, которые устанавливает пользователь, он ориентируется на самый большой и берет соответствующее ему значение адреса. Вариант, если идет доработка патча, уже после, тоже возможен… конечный адрес опять меняется, а порядковый номер соответственно увеличивается. Можно пойти еще дальше и сделать темку на форуме-табличку «патч-номер-адрес».

 

Вот такие вот соображения…

Ковыряю e630 :)

Ссылка на комментарий
Поделиться на другие сайты

Vadiks уже не стал искать «неиспользуемые» ресурсы, а разместил код в конце бина

 

если кто-то уже у себя поменял мелодии, то разместить патчи поверх мелодий уже не получится

 

возник такой вопрос:

а мелодии после патча Vadiks-а можно-ли менять? как он учёл этот момент?

если учёл,то значит сделал это автоматически?

интересно... может поделится... алгоритмом...

X100 -> k790i

Ссылка на комментарий
Поделиться на другие сайты

Хацкер,

Млин,по-моему ты хочешь ГОСТировать установку патчей и правку пршивок :shock: .А если отмена патча(из-за конфликта или новая версия)-будут дырки появляться опять?ИМХО это актуально для разработчиков,но они я смотрю и так согласовывают изменения

/ Чтобы боялись чужие, не обязательно бить своих.../
Ссылка на комментарий
Поделиться на другие сайты

Хацкер, а зачем нужет допустим Итальянский язык?

Ну вот не нужен он и все тут....

Что жа он просто так болтается(так же как и свободное место в конце флехи), если его можно заменить хорошим патчем!

Тоже самое про картинки.

Я думаю что все же не будет столько патче что прям придется приходить к таким крайностям. А ели придется то тогда будем уже думать...

Ссылка на комментарий
Поделиться на другие сайты

зачем нужет допустим Итальянский язык?

А если я в Италию поеду?

Хороший враг - мертвый враг

Ericson(damps)->Nokia5525(damps)->Samsung SCH-611(cdma)->Panasonic GD75(Наконец GSM)->Samsung SGH-X100+Samsung SGH-E630->Жду Е350Е!

Ссылка на комментарий
Поделиться на другие сайты

А если я в Италию поеду?

 

И что? Ты туда на ПМЖ чтоль собираешься? ИМХО, это бесполезный флуд с твоей стороны.

Beatitudo nоn est virtutis praemium, sed ipsa virtus
Ссылка на комментарий
Поделиться на другие сайты

будут дырки появляться

И пусть!

В эти дырки как и на диске будут впихиваться данные!

А потом какой-нить умный человек сделает патч "Дефрагментация"!

Хороший враг - мертвый враг

Ericson(damps)->Nokia5525(damps)->Samsung SCH-611(cdma)->Panasonic GD75(Наконец GSM)->Samsung SGH-X100+Samsung SGH-E630->Жду Е350Е!

Ссылка на комментарий
Поделиться на другие сайты

Млин,по-моему ты хочешь ГОСТировать установку патчей и правку пршивок  .А если отмена патча(из-за конфликта или новая версия)-будут дырки появляться опять?ИМХО это актуально для разработчиков,но они я смотрю и так согласовывают изменения

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

Ковыряю e630 :)

Ссылка на комментарий
Поделиться на другие сайты

А вот с согласовыванием ты жутко ошибаешься...

Ну не знаю..Пристально наблюдаю за Swift-ами,а там Freeman и SergeyL ИМХО работают достаточно синхронно :idea:

какой-нить умный человек сделает патч "Дефрагментация"!

Революционный будет патч! :lol:

/ Чтобы боялись чужие, не обязательно бить своих.../
Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...
Но в ResMan’e реализована другая логика – старая мелодия остается в коде прошивки, а новая добавляется в конец, перебиваются только ссылки (именно поэтому существует возможность вернуть все назад). Прошивка соответственно увеличивается в размерах на величину добавляемых ресурсов.  

 

С заменой графических ресурсов все наоборот – они замечательно встают поверх существующих один в один, т.к. размеры идентичны, про них речи вести не будем

Я правильно понимаю: замена графики в ResMan’e не приводит к глюкам тела?

Посоветуйте юзеру порядок замены контент-начинки телефона в ResMan’e-что менять в первую очередь, что потом, когда добавлять-удалять патчи.

Каким образом можно удалть старые мелодии из кода?

Ссылка на комментарий
Поделиться на другие сайты

lygin2006, читай раздел инструкции!!!! хоть бы написал какой телефон!

Выскажи свое мнение о СВОЕМ ОПераторе СОтовой Связи:

Мегафон МТС Билайн Tele2

...другой?

Ищи: ТУТ

а так же узнай последние новости

Ссылка на комментарий
Поделиться на другие сайты

Студенту на gprs сложно просмотреть весь форум, тем более, что название темы "Инструкции" ни о чем не говорит.Спасибо за подсказку, но там нет ответа на мой вопрос: Каким образом можно удалть старые мелодии из кода?

Ссылка на комментарий
Поделиться на другие сайты

Каким образом можно удалть старые мелодии из кода?

lygin2006, например можно так:

Открываешь пришивку BinEdit'ом находишь в прошивке адрес начала мелодии и адрес её конца и забиваешь нулями получившуюся область :idea:

И мелодии уже нет в коде :idea::idea:

GameTeam.ru - Крупнейший каталог бесплатных Java-игр!

Ссылка на комментарий
Поделиться на другие сайты

находишь в прошивке адрес начала мелодии и адрес её конца и забиваешь нулями получившуюся область

Именно так я и делал.Но почему ResMan видит эту иелодию, вернее ее размер.И еще:обнуление области приводит к уменьшению размера проши?

Если вопросы не по теме-подскажите где спросить.Спасибо.

Ссылка на комментарий
Поделиться на другие сайты

И еще:обнуление области приводит к уменьшению размера проши?

Ну это врядли. А обнулить их можно - заменив в ResMan`e файлом нулевой длинны. Хотя смысла никакого. Вот если мелодии в TFS лежат, то толк будет ;) но тут уже желателен патч на удаление стандартных мелодий, например.

А по поводу последовательности, я делаю так:

Шрифты;

Через экспорт-импорт картинки, мелодии;

Патчи;

Яз. ресурсы.

Не претендую на правильность, но косяков особых не имею :roll:

Я правильно понимаю: замена графики в ResMan’e не приводит к глюкам тела?
Если на месте заменяемых ресурсов не расположено патчей, то да. (кроме иконок абонентов при изменении размеров)

Если вопросы не по теме-подскажите где спросить.Спасибо.
Примерно тут: http://OldPh.one/index.php?app=forums&module=forums&section=findpost&pid=188093

PS: Pimen, :!: :lol:

E630XEDK2 + Nokia N72+1Gb

Всё, что нас не убивает, то нас делает сильней! (Е. Летов)

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Я бы предложил другое использование свободного и не очень свободного места в прошивке. Про концовку кода - я бы вообще забыл как про страшный сон. А на форуме тему создать... А там 2 таблицы. В первой колонке занятые адреса, во второй название патча использующего данную область. И во второй таблице адреса свободного и неиспользуемого никем места. А все уважающие себя и других патчмэйкеры постепенно дополняли бы эту таблицу своими данными. В данный момент ustin как раз по моей просьбе забивает все известное ему свободное место в прошивке нулями. Это может быть первым гигантским шагом к реализации данной затеи. :?:

Силы кончались, Слабостей - море...

Разом рухнули все мои сны...

Только я - мимо радости, горя -

Только я продолжаю идти...

Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...

zlodey123, если размер новой мелодии совпадает с размером старой мелодии, то РесМан (при установленном параметре атвозамены) установит поверх старой мелодии.

Бывших SGH`овцев не бывает.

Глупый модератор применяет наказания для самоутверждения.

Умный - для поддержания порядка. Мудрый - не применяет вообще!

 

Убийцу можно понять, но нельзя простить. Предателя можно простить, но нельзя понять. Бойтесь равнодушных - именно с их молчаливого согласия совершаются все предательства и убийства на земле.

Ссылка на комментарий
Поделиться на другие сайты

  • 3 года спустя...

Привет всем! Хочу рассказать как можно найти ещё свободного места в прошивке под патчи. Мыбудем заниматься поиском jar-файлов которые лежат в прошивке. Поиск будет производится в прошивке G600XEGL1. Но сразу же скажу, что найти их можно будет не во всех прошивках. На G600 и D900i я их видел, а вот на D900 найти не смог. Теперь к делу.

 

Формат Jar как известно, это тот же Zip-архив..

Структура файла Zip такова что, он всегда начинается следующими символами: PK.. (50 4B 03 04)

А заканчивается (представление в бинарном коде): 50 4B ....(17 байт зависят от файла и различны у разных файлов) 00 00 00

 

Следовательно, первый этап - произвести поиск в прошивке последовательности 504B0304

62114-10-06-10)1276168858_thumb.jpg

Видим большое количество адресов. перемещаемся сразу к первому. Видим строкe META-INF/MANIFEST.MF, уже что-то похожее на JAR :)

Если приглядеться к найденным адресам о можно заметить что они лежат очень близко к друг другу. На мой взгляд, это как раз описание файлов которые лежат в JAR. а самих JAR-файлов будет намного меньще, на G600 я нашел их 4.

Так, начало архива мы нашли.. или этот первый адрес не начало?!.. Проверить это очень просто, в прошивке лежит таблица адресов которая хранит наших архивов, поэтому если адрес является началом архива, то мы его найдем через поиск адрес с указанием на адрес нашего архива. То есть, мой первый найденный адрес 0x20CE4DA6, в поиск вводим этот адрес в перевернутом виде (A64DCE20)! И нажимаем поиск. У меня адрес нашел сразу, значит начало Jar-файла я нашел верно.

62114-10-06-10)1276169533_thumb.jpg

Перейдем на найденный адрес 0x21AEAF6C поднимемся чуть выше на адрес 0x21AEAF08 - как раз с неё начинается таблица. Копируем первые 4 байта, переворачиваем, получаем адрес 0x210E99F4, перейдем на него и посмотрим что там. Видим названия файлов, а если быть точнее, названия тех файлов, которые лежат у нас в TFS в папке JAVA.

62114-10-06-10)1276170087_thumb.jpg

Поэтому вернемся вновь на адрес 0x21AEAF08 и часть адресов таблицы пропустим, так как они как раз указывают на файлы в Java. Первый отличный от предыдущих будет адрес 0x21AEAF40, который содержит адрес 0x2105CE4C.

62114-10-06-10)1276170482_thumb.jpg

Что это за формат файла, я не вникал, поэтому пока пропустим его, и будем смотреть следующие адреса дальше.

По адресу 0x20CE4C98 (адрес указателя на него 0x21AEAF44) находится название файла Cannonball.jad. Он также лежит в прошивке как свободное место для нас и описание содержимого мы как раз и ищем :)

Следующий адрес как раз и указывает на адрес 0x2033F0B4 где мы и видим описание некоего JAD-файла, а именно игры CannonBall.

62114-10-06-10)1276171105_thumb.jpg

Вернее нет, чуток ошибся :67: Вы наверно заметили, что описание игры ArchAngel, а к чему указание локалхоста, я не понял :) Но это не важно, мы нашли описание Jad файла. Теперь вопрос, а для чего мы его искали? :roll: Для тех кто догадался, прочтение оффтопа не нужно, а тем кто не хочет думать, расскрыть оффтоп :)

 

Итаааак.. :) Адреса начала Jar-файлов мы найдем из таблицы адресов, а как найти их конец? Правильно: из JAD, а именно из строчки MIDlet-Jar-Size: мы узнаем размер архива, прибавляем это значение (предварительно переведя его в HEX-значение) к адресу начала файла. Вот и получится у нас адрес окончания JAR.

Хочу только уточнить, когда я определял адрес конца файла, то у меня всё время получалось что я брал 1 лишний байт прошивки (не знабываем как оканчивается JAR-файл), поэтому и вычитал из полученного адреса 1 байт.

 

Теперь, если вы пройдетесь по всем адресам таблицы, начало которой лежит в 0x21AEAF08, то у вас в итоге получится N-е количество адресов начала JAR-файлов и N-количество размеров JAR-файлов. Остается лишь вас сопоставить эти адреса между собой чтобы получились правильные JAR-файлы. Для этого смотрим на то что получается у вас перед адресом окончания файла!

 

Надеюсь, не слишком вас утомил, лишь только хочу сказать, что таким образом в прошивке G600 было найдено 4 JAR'а, общий их размер составил 698кб. А это достаточно много для патчей. Спасибо всем за внимание!

 

Прикрепил архив с тем что было извлечено.

g600.rar

Изменено пользователем SantaX
  • Like 2

Обожаю свою жену Анюточку! =)

Ссылка на комментарий
Поделиться на другие сайты

что то не до конца понятна сама суть... ведь игры, например, на д780 лежат не в прошивке, а в ТФС... а в G600 прямо в CLA что ли?

Лучше работать завтра, чем сегодня...

Ссылка на комментарий
Поделиться на другие сайты

что то не до конца понятна сама суть... ведь игры, например, на д780 лежат не в прошивке, а в ТФС... а в G600 прямо в CLA что ли?

Просто, когда собирается прошивка, часто бывает так что в папке с нужными ресурсами, лежат и ненужные. В основном картинки. Именно их чаще всего мы и использовали как место для патчей. Но похоже что нетолько картинки бывают ненужные.. но и Jar-файлы. Я называю именно Файлы, а не игры, так как они, извлеченые мной, весят меньше чем те стандартные игры, и содержат в основном не классы, а ресурсы используемые в игре - картинки, звуки, тхт.

Обожаю свою жену Анюточку! =)

Ссылка на комментарий
Поделиться на другие сайты

поставлю вопрос иначе... т.е. после перепрошивки CLA у тебя появляются игры в приложениях?

или просто стандартные игры берут файлы не из архива в приложениях, а из CLA?

или я туплю и чего то не до конца понимаю?

Лучше работать завтра, чем сегодня...

Ссылка на комментарий
Поделиться на другие сайты

BaRsupillamy, Блин.. Вопрос тогда так поставлю для тебя, Картинка с нотами, которая часто используется под патчи на разных прошивках откуда? Для чего она используется? Что она делает в CLA и BIN? :)

P.S. В приложениях игры не появляются, игры берут файлы из архива в приложениях. :)

Обожаю свою жену Анюточку! =)

Ссылка на комментарий
Поделиться на другие сайты

BaRsupillamy,

Дело в том, что в прошивке есть такая функция: TFS Reset, после чего происходит формат TFS и восстановление стандартных игр. Вот как раз, игры и восстанавливаются из бинарника :)

  • Like 3

Ты только пришёл? Тогда: ЧИТАЙ! Если прочитал, то начни от СЮДА!

Ссылка на комментарий
Поделиться на другие сайты

Santax, что там много лишнего, это понятно...

MaksM, вот теперь вообще всё понятно :) буду знать :)

Лучше работать завтра, чем сегодня...

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


×
×
  • Создать...