Всем привет!
Давненько я не брал в руки шашек.
Мне часто задают вопросы о резидентных флэшерах для CDMA телефонов. Воистину, с их помощью можно творить чудеса.
Предлагаю зафиксировать эту тему в начале данного раздела.
Меня спрашивают: почему у Юры (GT) во флэшере для одного и того же процессора есть три разных резидента?
А вот почему. Скорее всего потому, что он решил пропатчить родной киосеровский резидент для того, чтобы он мог работать с некоторыми новыми микросхемами флэш-памяти! Дело в том, что старый резидент в момент запуска первым делом смотрит какая флэш-память стоит в данном телефоне, и сверяет со списком микросхем, которые он знает и с которыми он УМЕЕТ РАБОТАТь.
Это очень серьезный момент, который не позволяет использовать данный резидент с новыми моделями телефонов в режиме записи. Прочитать флэш-память не проблема, все микросхемы имеют один и тот же алгоритм чтения. А вот при программировании всегда возникают проблемы : стирание, снятие защиты, запись данных - сделаны по разному. К тому же, самое главное, резидент должен знать карту памяти данной микросхемы : количество секторов, размер каждого сектора и его адрес в адресном пространстве. Это особенно важно, если мы хотим сделать частичное флэширование (для записи только однго сектора в области EFS при замене номера ESN).
У меня была мысль сделать универсальный резидент, который можно было бы конфигурировать извне - с помощью программной оболочки под управлением операционной системы Microsoft Windows. По такому принципу работает резидент из программы OCD Flash Programmer, но он заточен под команды джитага и не умеет работать с сотовыми телефонами по протоколу RS232 или USB. Там есть большой конфигурационный файл, который по сути является базой данных и описывает как нужно работать с той или иной микросхемой флэш-памяти.
Резиденты от разных производителей CDMA телефонов сильно отличаются друг от друга, здесь нет единого стандарта. Почти ни один производитель не делает функцию чтения памяти. Такая функция была обнаружена в старых резидентах фирмы Kyocera, а также в резидентах фирмы Sanyo.
Команды и их синтаксис в резидентах разных производителей могут также сильно отличаться.
В любом резиденте всегда есть команда PING, которая ничего не делает, только пингует телефон: мы иногда проверяем не завис ли телефон, посылаем ему команду "06" (в Лыжах), если телефон отвечает на эту команду "02", значит все в порядке, резидент запущен и работает нормально. Если отвечает "03", то значит резидент еще не запущен. Ответ "02" означает, что синтаксис команды правильный (параметры указаны правильно) и команда выполнена без ошибок. Ответ "03" означает ошибку (неверная команда, неправильный синтаксис, неверно указаны параметры) - команда не может быть выполнена.
Команды загрузки и запуска резидента в разных телефонах разных производителей тоже бывают разные, хотя здесь больше порядка - многие фирмы стараются придерживаться стандартных квалькомовских команд. Очень безобразничает, как всегда, Самсунг. У него резидент обычно уже лежит в самой прошивке, и его не требуется загружать извне. Поэтому во многих Самцах вообще отсутствует напрочь команда загрузки резидента извне, а есть только команда загрузки в ОЗУ и запуска встроенного в прошивку резидента.
Иметь рабочий резидент для каждого телефона, который заточен под нужную микросхему флэш-памяти - это большое дело. Вернее, это только полдела. Надо еще уметь ЗАГРУЗИТь этот резидент в оперативную память и ЗАПУСТИТь его! Вот здесь то и возникают зачастую неожиданные проблемы, как например в новых телефонах фирмы Kyocera, которая не на шутку начала защищаться от хакеров.
Что еще вы хотели узнать, но не решались спросить?