?

Log in

No account? Create an account

Previous Entry | Next Entry

Сегодня был не самый лучший день для могих пользователей Samsung Galaxy S2. При попытке поставить на него утекшую прошивку с использованием утилиты Odin, у многих телефоны превратились в "кирпичи". Пользуясь случаем, хочу рассказать, как это все работает, и откуда появляется риск "окирпичивания" телефона.

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

C: бутлоадер, он же загрузчик.
D: ядро
E: recovery
F: система/платформа
G: кэш
H: данные пользователя
I: модем

Предназначения партиций D-H мы уже обсуждали. Давайте теперь поговорим про бутлоадер.


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

Но сейчас нам интересен бутлоадер. А умеет он больше, чем просто загружать ядро:

- Он умеет "общаться" с ядром через общую маленькую партицию. Таким образом, он может запускать телефон в разных режимах: нормальной работы, восстановления (recovery), загрузки прошивки (download) и т.п.

- Также он "понимает" определенные комбинации клавиш, чтобы загружать телефон в вышеупомянутых режимах.

- Он понимает структуру разбивки на партиции, то есть он знает, где какая партиция начинается и где она заканчивается.

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

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

- На некоторых телефонах он умеет "опозновать" свое ядро и загружать только его. (secure bootloader)

А вот теперь представим, что что-то пошло не так при заливке, и новый бутлоадер у вас не запислался. Понятно, что пока он загружен в память, что-то еще можно делать. А вот когда перезпустим телефон - получим кирпич. Телефон как положено, считает байты с того же адреса и начнет их запускать. А новые байты окажутся испорченными и бесполезными. Где ядро, они не знают, как общаться с загрузочной программой - тоже. То есть "режим заливки" пропадет, и прошивку мы уже никак не сможем загрузить - телефон просто в него больше не грузится. В таком случае восстановить телефон можно в сервис центре при помощи программатора JTAG. На плате телефона есть специальные контакты, позволяющие "прошить" те же образы прошивки в телефон, минуя загрузку и общение с загрузочной программой.

Еще один хороший способ испортить бутлоадер и брикнуть телефон - это запортить процесс перебивки хард драйва на новые партиции. Так как при этом информация на диске становится бесполезной (размеры партиций могут поменяться, и/или информация просто может оказаться недоступной после разбивки), при репартиции все надо прошивать заново, и любая ошибка при репартиции или последующей пршивке бутлоадера будет фатальной.

В самсунговских упаковках прошивок, бутлоадер (их там на самом деле три, и они разные) обычно включенв комплект, и я рекомедую его оттуда убирать перед прошивкой. И .pit файлом (файлом переразбивки прошивок) я рекомендую пользоваться в крайнем случае. Шанс того, что новые ядро и платформа уместятся в старые партиции, довольно высок. А если не уместятся - пока вы можете телефон загрузить в загрузочный режим, вы его сможете сами восстановить, бутлоадер же не тронут и прошьет что надо куда надо.

Удачи в прошиваниях девайсов!

Comments

( 6 comments — Leave a comment )
legi
Dec. 15th, 2011 11:35 am (UTC)
а как правило, почему случается fail при перепрошивке бутлоадера?

кроме как электричество скакнуло :)
oshpaz
Dec. 15th, 2011 05:22 pm (UTC)
USB может сбойнуть, программка прошивки может не сработать, и т.п. Это все редко происходит, но происходит.

Самое вероятное - бутлоадер может оказаться неправильным. :)
legi
Dec. 16th, 2011 07:45 am (UTC)
а как бутлоадер может оказаться не правильным, если на одном телефоне работает, а на другом нет? из-за всяких ревизий железа?
oshpaz
Dec. 16th, 2011 07:51 am (UTC)
От другого телефона, например. Они же все одинаково называются.
Mayamsin Valentine
Dec. 15th, 2011 07:26 pm (UTC)
А в сервис-центре такой телефон починят? И как насчет аппаратов без гарантии?
oshpaz
Dec. 16th, 2011 07:55 am (UTC)
Тут от производителя зависит. И от того, насколько грохнулся телефон. Эппл, например, починит, если не сможет доказать, что ты не делал jailbreak. Другие, по идее, вполне могут починить и ничего не сказать. Главное, не рекламировать, как он у тебя так хорошо испортился. Например, прикинуться шлангом и сказать типа "ой, а вот обновление по воздуху пришло, я его ставил, и у меня телефон теперь не загружается".

С технической точки зрения в сервис-центре такое починить легко - разобрать аппарат, подключить JTAG и записать прошивку прямо на флэш.
( 6 comments — Leave a comment )