Последовательность запуска: различия между версиями
G-XaD (обсуждение | вклад) м (→Запуск моделей на базе Neptune LT) | |||
(не показано 8 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
− | + | == Общие сведения == | |
− | + | Функции процессора телефонов Motorola серии [[P2K]] выполняет микросхема [[Neptune]]. Существует несколько её версий ([[LCA|LT]], [[ULS]], [[LTE]], [[LTE2]]), различающихся, в первую очередь, содержимым внутреннего ПЗУ - [[irom]]. | |
+ | Процессор начинает работать сразу после включения питания. Включение питания происходит при: | ||
# Установке аккумуляторной батареи в телефон | # Установке аккумуляторной батареи в телефон | ||
# Подключении зарядного устройства | # Подключении зарядного устройства | ||
# Нажатии на клавишу отмены вызова | # Нажатии на клавишу отмены вызова | ||
− | + | При подаче напряжения питания схема POR (Power-on Reset, сброса при включении питания) срабатывает, и ядро ARM7TDMI-S (далее [[MCU]]) начинает выполнение программы с адреса 0x00000000 в режиме RESET. Одновременно начинает выполнение ядро DSP56600 (далее [[DSP]]). | |
− | + | ||
− | # Если на выводе MOD высокий логический уровень, по адресу 0x00000000 находится irom, а по адресу 0x10000000 находится микросхема внешней памяти, идентифицируемая по сигналу выбора CS0 (активному на низкий уровень). | + | == Начало работы == |
− | # Если на выводе MOD низкий логический уровень, по адресу 0x00000000 находится микросхема внешней памяти, подключенная к CS0, а по адресу 0x10000000 - irom. | + | [[DSP]] всегда начинает работу с кода, записанного в [[irom]], и этот адрес постоянен. Что касается [[MCU]], то конфигурация его адресного пространства зависит от уровня на выводе MOD [[Neptune]]: |
− | + | # Если на выводе MOD высокий логический уровень, по адресу 0x00000000 находится [[irom]], а по адресу 0x10000000 находится микросхема внешней памяти, идентифицируемая по сигналу выбора CS0 (активному на низкий уровень). | |
− | + | # Если на выводе MOD низкий логический уровень, по адресу 0x00000000 находится микросхема внешней памяти, подключенная к CS0, а по адресу 0x10000000 - [[irom]]. | |
+ | Вывод MOD снабжён подпорным резистором, так что если он не подключен, на нём наблюдается высокий логический уровень. В моделях телефонов с микросхемой Neptune LT этот вывод через внешний резистор малого сопротивления подключен к общему проводу. У всех моделей к CS0 подключена микросхема флеш-памяти. <br> | ||
+ | Таким образом, на моделях с [[LCA|Neptune LT]] первым получает управление Boot Core (буткор) первого уровня, а во всех остальных моделях - стартовый код в irom. Рассмотрим их функции и порядок их действий. | ||
+ | |||
+ | == Запуск моделей на базе Neptune LT == | ||
Буткор первого порядка выполняет следующие функции: | Буткор первого порядка выполняет следующие функции: | ||
# Инициализирует процессор | # Инициализирует процессор | ||
− | # Проверяет наличие буткора второго порядка; при его отсутствии инициализирует USB, и телефон определяется как "Blank LCA Neptune" с интерфейсом Motorola Boot. | + | # Проверяет наличие буткора второго порядка; при его отсутствии инициализирует USB, и телефон определяется как "Blank LCA Neptune" с интерфейсом [[Motorola Boot]]. |
# Запускает буткор второго порядка | # Запускает буткор второго порядка | ||
Буткор второго порядка: | Буткор второго порядка: | ||
− | # Проверяет наличие прошивки; при её отсутствии инициализирует USB, и телефон определяется как "Flash LCA Neptune" с интерфейсом Motorola Flash | + | # Проверяет наличие прошивки; при её отсутствии инициализирует USB, и телефон определяется как "Flash LCA Neptune" с интерфейсом [[Motorola Flash]] |
# Запускает прошивку | # Запускает прошивку | ||
− | + | При замыкании +1,875 Вольта (питания процессора) на точку MOD по адресу 0x00000000 оказывается [[irom]], в котором находится функциональный аналог буткора первого порядка. Этот приём называется "[[TestPoint|тест-поинт]]" и на [[LCA|LCA-моделях]] используется для начальной заводской прошивки телефона, а также для его восстановления в случае повреждения буткора первого или второго порядка. | |
− | У моделей на других версиях Neptune вывод MOD никуда не подключен (но выведен в качестве тестовой площадки на плату), поэтому на них управление первым получает стартовый код в irom. Этот стартовый код выполняет следующие действия: | + | |
+ | == Запуск моделей на базе других версий Neptune == | ||
+ | У моделей на других версиях Neptune вывод MOD никуда не подключен (но выведен в качестве тестовой площадки на плату), поэтому на них управление первым получает стартовый код в [[irom]]. Этот стартовый код выполняет следующие действия: | ||
# Инициализирует процессор | # Инициализирует процессор | ||
# Инициализирует интерфейс внешней памяти - включает CS0 | # Инициализирует интерфейс внешней памяти - включает CS0 | ||
− | # Проверяет наличие Boot | + | # Проверяет наличие [[Boot loader]]а на микросхеме флеш-памяти; при его отсутствии запускается [[Boot loader|бут]], встроенный в irom |
− | # Проверяет цифровую подпись Boot | + | # Проверяет цифровую подпись [[Boot loader]]а. При отрицательном исходе проверки запускается [[Boot loader|бут]], встроенный в [[irom]] |
− | # Проверяет наличие прошивки. При её отсутствии запускается бут с флеш-памяти | + | # Проверяет наличие прошивки. При её отсутствии запускается [[Boot loader|бут]] с флеш-памяти |
− | # Проверяет цифровую подпись прошивки. При отрицательном исходе проверки запускается бут, встроенный в irom. Логика этого шага непонятна. | + | # Проверяет цифровую подпись прошивки. При отрицательном исходе проверки запускается [[Boot loader|бут]], встроенный в [[irom]]. Логика этого шага непонятна. |
# Запускает прошивку | # Запускает прошивку | ||
− | + | ||
− | # Инициализирует USB; телефоны на основе Neptune ULS определяются как "Blank ULS Neptune" с интерфейсом Motorola Boot, остальные модели - как "S Blank Neptune LTE/LTE2" с интерфейсом Motorola Flash | + | == Немного о бутлоадерах == |
+ | [[Boot loader]], встроенный в [[irom]], выполняет следующие действия: | ||
+ | # Инициализирует USB; телефоны на основе [[ULS|Neptune ULS]] определяются как "Blank ULS Neptune" с интерфейсом [[Motorola Boot]], остальные модели - как "S Blank Neptune LTE/LTE2" с интерфейсом [[Motorola Flash]] | ||
# Собственно выполняет прошивание. | # Собственно выполняет прошивание. | ||
− | + | [[Boot loader]] из флеш-памяти выполняет следующие действия: | |
# Инициализирует контроллер питания и дисплей | # Инициализирует контроллер питания и дисплей | ||
# Определяет версию и состояние прошивки | # Определяет версию и состояние прошивки | ||
# Отображает на дисплее свою версию и версию прошивки, сообщения об ошибках (при их наличии) | # Отображает на дисплее свою версию и версию прошивки, сообщения об ошибках (при их наличии) | ||
− | # Инициализирует USB; телефон определяется как "S Flash Neptune LTE/LTE2" (на телефонах с Neptune ULS как такового | + | # Инициализирует USB; телефон определяется как "S Flash Neptune [[LTE]]/[[LTE2]]" (на телефонах с [[ULS|Neptune ULS]] как такового [[boot loader]]а в флеш-памяти нет). |
− | + | ||
− | # Точку входа в | + | == Структура прошивки == |
− | # Сертификат подписи | + | Заголовок [[boot loader]]а, находящегося в флеш-памяти, содержит указатели на: |
+ | # Точку входа в [[boot loader]] | ||
+ | # Сертификат подписи [[boot loader]]а | ||
+ | # [[PDS]] | ||
+ | # [[CG5|Конфигурацию оборудования]] | ||
# Заголовок прошивки | # Заголовок прошивки | ||
− | + | Заголовок прошивки содержит указатели на: | |
# Точку входа в прошивку | # Точку входа в прошивку | ||
− | # CG1, CG3, CG4, CG7 (при её наличии), CG15 (при её наличии), CG18. Заголовок CG18 содержит указатель на сертификат подписи прошивки. | + | # [[CG1]], [[CG3]], [[CG4]], [[CG7]] (при её наличии), [[CG15]] (при её наличии), [[CG18]]. Заголовок [[CG18]] содержит указатель на сертификат подписи прошивки. |
− | + | ||
− | # В качестве точки входа в прошивку - адрес кода дополнительной проверки прошивки, лежащего внутри бута | + | == Варианты == |
− | # В качестве указателей на кодовые группы - произвольные данные (возможно, 0xFFFFFFFF), кроме указателя на CG18 - он содержит указатель на подменный заголовок CG18, лежащий внутри бута и указывающий на сертификат подписи бута. | + | В ряде [[boot loader]]ов для [[LTE|LTE-моделей]] (и всех [[boot loader]]ах для [[LTE2|LTE2-моделей]]) в поле для указателя на заголовок прошивки записан указатель на подменный заголовок, содержащий следующие данные: |
− | + | # В качестве точки входа в прошивку - адрес кода дополнительной проверки прошивки, лежащего внутри [[Boot loader|бута]] | |
+ | # В качестве указателей на кодовые группы - произвольные данные (возможно, 0xFFFFFFFF), кроме указателя на CG18 - он содержит указатель на подменный заголовок [[CG18]], лежащий внутри [[Boot loader|бута]] и указывающий на сертификат подписи [[Boot loader|бута]]. | ||
+ | Таким образом, вместо проверки прошивки [[irom]] во второй раз проверяет [[Boot loader|бут]] и запускает в нём код дополнительной проверки. Этот код проверяет подпись прошивки и в случае отрицательного исхода запускает собственно [[boot loader]]. | ||
+ | |||
+ | == См. также == | ||
+ | * [[TestPoint]] |
Текущая версия на 16:03, 22 февраля 2010
Содержание
Общие сведения
Функции процессора телефонов Motorola серии P2K выполняет микросхема Neptune. Существует несколько её версий (LT, ULS, LTE, LTE2), различающихся, в первую очередь, содержимым внутреннего ПЗУ - irom. Процессор начинает работать сразу после включения питания. Включение питания происходит при:
- Установке аккумуляторной батареи в телефон
- Подключении зарядного устройства
- Нажатии на клавишу отмены вызова
При подаче напряжения питания схема POR (Power-on Reset, сброса при включении питания) срабатывает, и ядро ARM7TDMI-S (далее MCU) начинает выполнение программы с адреса 0x00000000 в режиме RESET. Одновременно начинает выполнение ядро DSP56600 (далее DSP).
Начало работы
DSP всегда начинает работу с кода, записанного в irom, и этот адрес постоянен. Что касается MCU, то конфигурация его адресного пространства зависит от уровня на выводе MOD Neptune:
- Если на выводе MOD высокий логический уровень, по адресу 0x00000000 находится irom, а по адресу 0x10000000 находится микросхема внешней памяти, идентифицируемая по сигналу выбора CS0 (активному на низкий уровень).
- Если на выводе MOD низкий логический уровень, по адресу 0x00000000 находится микросхема внешней памяти, подключенная к CS0, а по адресу 0x10000000 - irom.
Вывод MOD снабжён подпорным резистором, так что если он не подключен, на нём наблюдается высокий логический уровень. В моделях телефонов с микросхемой Neptune LT этот вывод через внешний резистор малого сопротивления подключен к общему проводу. У всех моделей к CS0 подключена микросхема флеш-памяти.
Таким образом, на моделях с Neptune LT первым получает управление Boot Core (буткор) первого уровня, а во всех остальных моделях - стартовый код в irom. Рассмотрим их функции и порядок их действий.
Запуск моделей на базе Neptune LT
Буткор первого порядка выполняет следующие функции:
- Инициализирует процессор
- Проверяет наличие буткора второго порядка; при его отсутствии инициализирует USB, и телефон определяется как "Blank LCA Neptune" с интерфейсом Motorola Boot.
- Запускает буткор второго порядка
Буткор второго порядка:
- Проверяет наличие прошивки; при её отсутствии инициализирует USB, и телефон определяется как "Flash LCA Neptune" с интерфейсом Motorola Flash
- Запускает прошивку
При замыкании +1,875 Вольта (питания процессора) на точку MOD по адресу 0x00000000 оказывается irom, в котором находится функциональный аналог буткора первого порядка. Этот приём называется "тест-поинт" и на LCA-моделях используется для начальной заводской прошивки телефона, а также для его восстановления в случае повреждения буткора первого или второго порядка.
Запуск моделей на базе других версий Neptune
У моделей на других версиях Neptune вывод MOD никуда не подключен (но выведен в качестве тестовой площадки на плату), поэтому на них управление первым получает стартовый код в irom. Этот стартовый код выполняет следующие действия:
- Инициализирует процессор
- Инициализирует интерфейс внешней памяти - включает CS0
- Проверяет наличие Boot loaderа на микросхеме флеш-памяти; при его отсутствии запускается бут, встроенный в irom
- Проверяет цифровую подпись Boot loaderа. При отрицательном исходе проверки запускается бут, встроенный в irom
- Проверяет наличие прошивки. При её отсутствии запускается бут с флеш-памяти
- Проверяет цифровую подпись прошивки. При отрицательном исходе проверки запускается бут, встроенный в irom. Логика этого шага непонятна.
- Запускает прошивку
Немного о бутлоадерах
Boot loader, встроенный в irom, выполняет следующие действия:
- Инициализирует USB; телефоны на основе Neptune ULS определяются как "Blank ULS Neptune" с интерфейсом Motorola Boot, остальные модели - как "S Blank Neptune LTE/LTE2" с интерфейсом Motorola Flash
- Собственно выполняет прошивание.
Boot loader из флеш-памяти выполняет следующие действия:
- Инициализирует контроллер питания и дисплей
- Определяет версию и состояние прошивки
- Отображает на дисплее свою версию и версию прошивки, сообщения об ошибках (при их наличии)
- Инициализирует USB; телефон определяется как "S Flash Neptune LTE/LTE2" (на телефонах с Neptune ULS как такового boot loaderа в флеш-памяти нет).
Структура прошивки
Заголовок boot loaderа, находящегося в флеш-памяти, содержит указатели на:
- Точку входа в boot loader
- Сертификат подписи boot loaderа
- PDS
- Конфигурацию оборудования
- Заголовок прошивки
Заголовок прошивки содержит указатели на:
- Точку входа в прошивку
- CG1, CG3, CG4, CG7 (при её наличии), CG15 (при её наличии), CG18. Заголовок CG18 содержит указатель на сертификат подписи прошивки.
Варианты
В ряде boot loaderов для LTE-моделей (и всех boot loaderах для LTE2-моделей) в поле для указателя на заголовок прошивки записан указатель на подменный заголовок, содержащий следующие данные:
- В качестве точки входа в прошивку - адрес кода дополнительной проверки прошивки, лежащего внутри бута
- В качестве указателей на кодовые группы - произвольные данные (возможно, 0xFFFFFFFF), кроме указателя на CG18 - он содержит указатель на подменный заголовок CG18, лежащий внутри бута и указывающий на сертификат подписи бута.
Таким образом, вместо проверки прошивки irom во второй раз проверяет бут и запускает в нём код дополнительной проверки. Этот код проверяет подпись прошивки и в случае отрицательного исхода запускает собственно boot loader.