Что происходит после подачи питания на устройство (boot process)?

Ответ

После подачи питания выполняется последовательность инициализации (boot process), которая зависит от архитектуры, но общие этапы включают:

  1. Сброс процессора (Reset Vector): Процессор начинает выполнение кода с фиксированного адреса (например, 0x00000000 для ARM Cortex-M), где находится начальный обработчик прерывания.
  2. Аппаратная инициализация (Startup Code): Написанный на ассемблере или C код выполняет:
    • Настройку указателя стека (SP).
    • Копирование секции .data (инициализированных статических/глобальных переменных) из флэш-памяти в RAM.
    • Обнуление секции .bss (неинициализированных статических/глобальных переменных).
    • Вызов глобальных конструкторов (для C++).
  3. Переход к ядру ОС (или main): Управление передаётся функции main() в standalone-приложении или загрузчику ядра (bootloader).

Пример минимального startup-кода для ARM Cortex-M (C):

// Объявления линкера для адресов секций
extern uint32_t _sidata, _sdata, _edata, _sbss, _ebss;

void Reset_Handler(void) {
    // Копирование .data из FLASH в RAM
    uint32_t *src = &_sidata;
    uint32_t *dst = &_sdata;
    while (dst < &_edata) {
        *dst++ = *src++;
    }

    // Обнуление .bss секции
    uint32_t *bss = &_sbss;
    while (bss < &_ebss) {
        *bss++ = 0;
    }

    // Вызов системной инициализации (такты, память)
    SystemInit();

    // Переход в main приложение
    main();
}

После этого, если загружается Linux, bootloader (например, U-Boot) загружает ядро и передаёт ему управление.

Ответ 18+ 🔞

А, ну это же классика, ёпта! Сейчас расскажу, как железка просыпается, чтобы ты не думал, что там магия какая-то. Представь, ты врубаешь питание — и процессор такой: «Опа, свет есть! Начинаем шоу».

Первым делом он, как конь испуганный, несётся по абсолютно фиксированному адресу. Это типа его домашний адрес после сброса, с него всё начинается. Для многих ARM'ов это, допустим, 0x00000000. Там его уже ждёт первая инструкция — стартовый обработчик. Это как будто ты просыпаешься и первым делом тян