2016-04-27

Interactive Bootloader


Доработка стандартного загрузчика от Qualcomm (lk) может обеспечить функцию загрузки Android прошивки с SD-карты, а также может обеспечить функцию раннего перевода устройства в 9006 режим, используя специальное сочетание кнопок. Кроме этого можно добавить ещё много разных фич в загрузчик.

Большинство производителей китайфонов нисколько не заботятся о доработке ПО, которое они получают от Qualcomm. С одной стороны это даже хорошо, т.к. в этом случае обычно не используется блокировка загрузчика и не используется уникальная подпись образов. Но с другой стороны использование "сырых" исходников с CAF-репозитория означает отсутствие довольно полезных функций в загрузчике.

Стандартный qualcomm загрузчик занимается лишь отображением логотипа на экране, обеспечением режима fastboot и загрузкой образов с eMMC чипа. Вот только при переходе eMMC чипа в режим readonly (такое бывает от старения) аппарат становится фактически "кирпичём". Помимо режима readonly eMMC чип может полностью выйти из строя, о чем обычно информирует PBL, переводя аппарат в режим 9008. Но перед переводом в 9008 режим главный загрузчик (PBL) обычно пробует произвести загрузку с SD-карты. Т.е. получается так, что в нормальной ситуации затруднительна установка полноценной прошивки на SD-карту, а в случае readonly eMMC получается "полукирпич".

Ради избавления от вышеперечисленных ограничений стандартного загрузчика было решено сделать свой вариант этого самого appsboot.mbn. Основную часть разработки взял на себя S-trace. Так же S-trace взялся за тестирование самопального загрузчика. Я же написал только графическую составляющую нововведений и исправил крайне грубые реализации некоторых вещей, которые присущи LittleKernel от Qualcomm.

Приведу список всех фич, которые мы добавили в загрузчик:

  1. добавлено распознавание кнопок FUNC и POWER
  2. доработан модуль fbcon и добавлен растровый шрифт 52x27, что позволило выводить произвольный текст на экран
  3. отображение текущего состояния устройства (fastboot, normal boot, recovery boot, 9008, 9006)
  4. возможность перезагрузки в спец режим 9008/9006
  5. возможность выбора устройства для загрузки (либо eMMC, либо SDCard)
  6. на экране главного меню был добавлен 30-секундный таймер, по истечении которого начинается normal boot
  7. добавлено несколько тестов скорости линейного чтения обоих носителей


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

Исходный код кастомного загрузчика IBL: http://github.com/jsr-d10/

Для наглядности приведу несколько скриншотов:



Комментариев нет:

Отправить комментарий