Bootloader mode

Микроконтроллер и Bootloader. Описание и принцип работы

Bootloader mode

Приветствую всех на нашем сайте и сегодня мы после небольшого перерыва вернемся к теме микроконтроллеров.

А если быть совсем точным, то мы начинаем обсуждать одну очень интересную и важную тему, а именно использование bootloader (загрузчика) при программировании контроллеров.

Сегодня мы разберем теоретическую часть – зачем bootloader нужен, как он работает и что это вообще такое. Следующая статья будет посвящена целиком и полностью практике. Забегая вперед скажу, что мы напишем свой bootloader для любимых микроконтроллеров STM32!

Итак, простыми словами, bootloader – это специальная программа, которая располагается в памяти микроконтроллера и может самостоятельно перепрограммировать его. Давайте для лучшего понимания процесса посмотрим как вообще выполняется программа, прошитая в микроконтроллер, и где она располагается.

Как вы помните из статьи, посвященной flash-памяти микроконтроллеров STM32, основная пользовательская программа начинается с первой страницы памяти, а точнее с адреса 0х08000000. То есть при подаче питания контроллер сразу же убегает по этому адресу.

При использовании загрузчика все выглядит несколько иначе. Основная программа записывается уже по другим адресам и располагается начиная, например, с адреса 0х0800A000. А область памяти (0х08000000 – 0х0800А000) целиком и полностью отдается bootloader’у. В итоге в flash-памяти контроллера у нас находятся две полноценные программы.

При включении устройства управление получает bootloader (поскольку он находится в области, начинающейся со “стартового” адреса 0х08000000), а при дальнейшей работе bootloader, выполнив все свои задачи передает управление нашей основной программе, которая располагается по адресу 0х0800А000 (этот адрес мы взяли для примера).

Вот небольшая схемка для демонстрации работы загрузчика:

Вроде бы понятно как устроено, но возникает вопрос – зачем все это надо? Давайте разбираться!

Первостепенной задачей bootloader’а является программирование микроконтроллера. Он не просто выполняет какие-то действия, а затем передает управление основной программе (переходит на адрес, который соответствует началу основной программы), он, в первую очередь, самостоятельно записывает эту основную программу в flash-память по нужным адресам.

Давайте разберем небольшой пример для лучшего понимания. Пусть мы создали bootloader (bootloader – точно такой же обычный проект, как и любая другая программа для микроконтроллера), который реализует взаимодействие с внешней картой памяти, ищет на карте файл программы и, если находит, записывает программу в нужную область памяти.

Небольшое отступление от основной темы… Поясню, что я тут имею ввиду под “файлом программы”.

Когда мы создаем проект (Keil, IAR – без разницы), то на выходе (после сборки проекта) мы получаем скомпилированный файл для прошивки в микроконтроллер. Чаще всего мы использовали .hex файл программы. Так вот именно этот файл нам и нужен в данном случае.

Но именно hex-файл не совсем подходит для наших целей, поскольку помимо кода нашей программы он несет в себе дополнительную служебную информацию. Чтобы ее не обрабатывать и не вытаскивать из hex-файла нужный нам код, который bootloader должен записать во flash, мы в настройках компилятора во вкладке Output попросим его генерировать нам вместо hex-файла bin-файл.

Бинарник, в отличие от hex, содержит в себе только последовательный код программы и ничего больше. То есть bootloader’у остается только читать байты из bin-файла и записывать их во flash-память. То есть в нашем примере задачей загрузчика является чтение байт из файла на карте памяти и запись их по адресам, начиная с 0х0800A000. Вот псевдокод для наглядности:

void main(){ // Инициализируем интерфейс SDIO для общения с картой памяти SDIO_Init(); while(1) { // Ищем файл прошивки if (f_open(файл.bin) == FR_OK) { ProgramFlash(); JumpToMainProgram(); } }}

Конечно, это сильно упрощенная версия загрузчика.

Тут мы в вечном цикле пытаемся открыть файл с программой, а как только это нам удается (пользователь записал на карту долгожданный файл) bootloader программирует flash-память и перескакивает на адрес записанной им же программы.

После этого контроллер начинает выполнять пользовательскую программу. Еще раз повторюсь, это всего лишь псевдокод для примера, полноценный bootloader для STM32 мы обязательно напишем в следующей статье!

Все это, конечно, очень интересно, но по-прежнему, непонятно, зачем нужны все эти сложности….

С этим на самом деле все просто – вот, например, первая ситуация – есть огромное количество устройств, на заводе работники прошили в каждый контроллер (например, при помощи ST-Link) на каждой плате bootloader, который при подключении к плате флешки (в заранее предусмотренный разъем) ищет на ней файл прошивки и выполняет программирование. Основную программу, конечно же, тоже можно прошить вместе с bootloader’ом через ST-Link. Но тонкость тут в том, что проект bootloader’а остается всегда неизменным и перепрошивать его не надо, а вот версия основной программы может обновляться кучу раз в процессе тестирования устройств.

И тут уже гораздо проще один раз подключить ST-Link и прошить загрузчик, а впоследствии просто скидывать новую версию основной программы на флешку и втыкать ее в готовое устройство, где перепрошивкой займется bootloader, чем по сто раз бегать от одной платы к другой, втыкать ST-Link, при этом перенося с собой ноутбук с ST-Link Utility

Источник: https://microtechnics.ru/mikrokontroller-i-bootloader-opisanie-i-princip-raboty/

Мобильные устройства изнутри. Исследование режимов загрузки планшета YB1-X90L

Bootloader mode

Давайте продолжим рассматривать планшет YB1-X90L, который я начал исследовать в предыдущей публикации:
Рис.1. Общий вид планшета

Поиск в Google выдал, что планшет создан на процессоре Intel Atom x5-Z8550, имеющем 4 ядра [1,2]. Для пользователя, как всегда, имеются 2 внешних элемента управления стандартного назначения:

  • кнопка Power — включение/выключение планшета;
  • качелька Vol+/Vol- — управление громкостью встроенных динамиков, которых, кстати, два.

Ну, что ж, поэкспериментировав с ними, я обнаружил, что существуют 4 варианта загрузки. Так и появилась эта статья…

2. Режимы загрузки планшета

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

  1. BOOT — загрузка ОС;
  2. FASTBOOT — режим FASTBOOT;
  3. TEST — режим тестирования;
  4. DNX FASTBOOT — FASTBOOT для DNX.

Давайте рассмотрим их поочередно.

2.1. Режим BOOT (загрузка ОС)

Этот режим используется чаще всего, т.к. позволяет загрузить планшет для работы обычного пользователя. При этом производится стандартная загрузка прошивки МУ: BOOTLOADER->BOOT->SYSTEM.

Для загрузки в этот режим нужно нажать на выключенном планшете кнопку включения питания Power и подержать ее до появления звукового сигнала (примерно 1 сек).

Через 3-5 сек на экране появится логотип фирмы производителя:

Рис.2. Логотип lenovo
Дальнейшие Ваши действия обусловлены только желаниями и фантазией как пользователя. Перейдем к следующему режиму.

2.2. Режим FASTBOOT

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

Для входа в него на выключенном планшете нужно зажать кнопку увеличения громкости Vol+ и следом нажать кнопку включения питания Power. Подержите их вместе до появления звукового сигнала.

Затем кнопку питания можно отпустить (это примерно 1 сек после начала загрузки), но продолжать держать нажатой кнопку Vol+ до появления на экране логотипа фирмы производителя (примерно еще 3-5 сек).

Через несколько секунд после появления логотипа производителя появится окно с надписью FASTBOOT MODE, в котором можно выбрать один из режимов работы, указанных в окне выбора, выделенным на рис.3 желтой линией:

Рис.3. Режимы работы из FASTBOOT

Это окно дополнительно выводит также некоторую служебную информацию: серийный номер, состояние блокировки загрузчика, состояние режима защиты и др.

Из этого режима можно выполнить любую fastboot-команду самостоятельно.

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

Если изменить состояние окна выбора, то можно выполнить следующие команды:

  • загрузка в режим восстановления (RECOVERY MODE);
  • перезагрузка в ОС (REBOOT);
  • перезапуск bootloader (RESTART BOOTLOADER);
  • выключить питание планшета (POWER OFF);
  • загрузку ОС (NORMAL BOOT).

Выбор команды осуществляется кнопками управления громкостью Vol+ и Vol-, а запуск выбранной команды производится кнопкой включения питания Power. Выход из этого режима возможен или при помощи вышеописанных команд FASTBOOT, или через выключение планшета, т.е. зажав кнопку POWER на 5-10 сек. Давайте рассмотрим каждый из режимов по отдельности.

2.2.1. Режим RECOVERY MODE

При выборе этой команды планшет загрузится в режим восстановления, т.е. RECOVERY. Доступность по ADB и наличие ROOT-доступа в этом режиме обусловливается только настройками самого режима восстановления. Стоковый вариант не богат на возможности, поэтому многие пользователи в качестве recovery устанавливают custom-recovery, например TWRP.

2.2.2. Режим REBOOT

При выборе этой команды произойдет полная перезагрузка планшета в режим загрузки ОС, аналогично режиму BOOT (см. п.2.1).

2.2.3. Режим RESTART BOOTLOADER

При выборе этой команды произойдет перезагрузка опять в режим BOOTLOADER.

2.2.4. Режим POWER OFF

При выборе этой команды произойдет полное выключение питания планшета.

2.2.5. Режим NORMAL BOOT

При выборе этой команды продолжится загрузка ОС без перезагрузки.

2.3. Загрузка в режим TEST

Для входа в режим тестирования на выключенном планшете зажмите кнопку уменьшения громкости Vol- и нажмите кнопку включения питания Power. Подержите их до появления звукового сигнала.

Затем кнопку питания можете отпустить (это примерно 1 сек от начала загрузки), но продолжать держать нажатой кнопку Vol- до появления на экране логотипа фирмы производителя (примерно еще 3-5 сек). До полной загрузки в режим TEST пройдет еще, примерно, 5 сек.:
Рис.4.

Меню команд TEST В этом режиме возможно выполнение следующих команд тестирования:

  1. Board Test — выбор тестов планшета.
  2. Current Test — выполнение выбранных ранее (текущих) тестов.
  3. RF Antena Test — тест RF-антенны.
  4. Test Info — данные тестов.

  5. Reboot — перезагрузка планшета (выход из режима тестирования).
  6. Droidboot
  7. RF calibration & IMEI write — калибровка RF и запись значений IMEI.
  8. Factory Reset — сброс до заводских настроек.
  9. Erase Userdata — очистить (удалить) содержимое Userdata.

  10. Security Boot — загрузка в режиме Security Boot.
  11. PMIC FW Update — установка обновлений PMIC.

Перемещение по командам осуществляется кнопками управления громкостью Vol+ и Vol-, а запуск выбранной команды производится кнопкой включения питания Power.

Чтобы выйти из этого режима выполните команду Reboot — произойдет загрузка ОС, или зажмите кнопку Power примерно на 10 сек. до полного выключения.

2.4. Загрузка в режим DNX FASTBOOT

Этот режим предназначен для восстановления загрузчиков планшета.

Для входа в этот режим на выключенном планшете зажмите одновременно обе кнопки качельки управления громкостью Vol+ и Vol- и нажмите кнопку включения питания Power.

Подержите их до появления звукового сигнала. Затем кнопку питания можете отпустить (это примерно 1 сек от начала загрузки), но продолжать держать нажатыми кнопки Vol+ и Vol- до появления на экране логотипа фирмы производителя (примерно еще 3-5 сек).

На экране под логотипом появится надпись DNX FASTBOOT MODE:

Рис.5 DNX режим

и планшет зависнет, ожидая ввода команд для работы с DNX.

Выйти из этого режима можно только через выключение планшета, т.е. зажав кнопку POWER на 5-10 сек.

3. Заключение

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

4. Источники информации

1. Обзор Lenovo Yoga Book: гость из будущего.
2. Обзор планшета-ноутбука Lenovo Yoga Book Android.

  • мобильные устройства изнутри
  • bootloader
  • fastboot
  • reboot
  • recovery

Хабы:

  • Разработка мобильных приложений
  • Реверс-инжиниринг

Источник: https://habr.com/ru/post/348294/

Поделиться:
Нет комментариев

    Добавить комментарий

    Ваш e-mail не будет опубликован. Все поля обязательны для заполнения.