← Назад к вопросам
Что происходит после подачи питания на устройство?
2.0 Middle🔥 191 комментариев
#Linux и операционные системы
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Что происходит после подачи питания на устройство?
После подачи питания на компьютер или встраиваемое устройство происходит сложная многоэтапная последовательность инициализации аппаратного обеспечения, прошивки и операционной системы.
1. Аппаратная инициализация (Hardware Power-On)
Phase 1: Power Supply Stabilization
Питание -> Конденсаторы стабилизируют напряжение
|
v
Сигнал RESET# генерируется (активный LOW)
|
v
Все компоненты получают сигнал RESET
|
v
CPU выходит из режима RESET
Phase 2: CPU Power-on Reset
// Аппаратно, CPU начинает со специального состояния:
// - EIP/IP регистр = 0xFFFFF0 (Intel x86)
// - Память не инициализирована
// - Прерывания отключены
// - MMU отключена
// ARM Cortex (встраиваемые системы):
// - SP (stack pointer) загружается из адреса 0x00000000
// - PC (program counter) загружается из адреса 0x00000004
// - Выполнение начинается с этого адреса
#define RESET_VECTOR_ADDR 0x00000000
#define STACK_PTR_OFFSET 0x00000000
#define ENTRY_POINT_OFFSET 0x00000004
2. Power-On Self Test (POST) и BIOS
На x86 системах:
CPU начинает выполнять код из ROM
|
v
BIOS инициализирует ключевые компоненты:
- Проверка памяти (memory test)
- Инициализация контроллеров (chipset, PCIe, SATA)
- Проверка видеокарты
- Инициализация дисковода
|
v
Экран черный/серый (BIOS splash screen)
|
v
POST завершён успешно (или ошибка с beep кодами)
На встраиваемых системах (ARM):
Bootloader в ROM (U-Boot, TianoCore или custom):
- Инициализирует DDR память
- Настраивает clock распределение
- Инициализирует консоль (UART для debug)
- Проверяет целостность kernel
3. Загрузка Bootloader
// Bootloader — первый код, запущенный с диска/flash
// Задача: загрузить kernel в память
// GRUB процесс:
// 1. Stage 1 (512 bytes в MBR):
// - Инициализирует дисковой контроллер
// - Загружает Stage 1.5
// 2. Stage 1.5:
// - Драйверы файловой системы
// 3. Stage 2 (основной bootloader):
// - Парсит конфигурацию /boot/grub/grub.cfg
// - Загружает kernel и initramfs
// - Передаёт управление kernel'у
#define KERNEL_LOAD_ADDRESS 0x1000000 // 16MB
#define INITRAMFS_LOAD_ADDRESS 0x2000000
4. Kernel Boot Phase
// После передачи управления от bootloader'а
// kernel начинает инициализацию
asmlinkage __visible void __init start_kernel(void) {
// C код начинается здесь
// 1. Инициализация памяти
mm_init();
// 2. Инициализация процессов/планировщика
sched_init();
// 3. Инициализация прерываний
trap_init();
irq_init();
// 4. Инициализация таймеров
tick_init();
// 5. Инициализация I/O подсистем
init_IRQ();
// 6. Инициализация файловых систем
vfs_init();
// 7. Монтирование rootfs
prepare_namespace();
// 8. Запуск init процесса (PID=1)
rest_init();
}
5. Инициализация Drivers (Device Initialization)
// Порядок инициализации (по приоритету):
// 1. pure_initcall — самые критичные
// 2. core_initcall — core kernel
// 3. subsys_initcall — подсистемы
// 4. fs_initcall — файловые системы
// 5. device_initcall — драйверы устройств
// 6. late_initcall — поздняя инициализация
static int __init my_driver_init(void) {
pr_info("Initializing driver\n");
return 0;
}
module_init(my_driver_init);
6. Монтирование Root Filesystem
# initramfs содержит временную файловую систему
# kernel загружает initramfs из памяти
# Процесс:
# 1. Найти реальный rootfs (на диске, сети, USB)
# 2. Смонтировать реальный rootfs на /
# 3. Удалить initramfs из памяти
# 4. Перейти на реальный rootfs
# Команда для просмотра initramfs:
# lsinitramfs /boot/initrd.img-5.10
7. Запуск Init Process
# PID=1 — первый пользовательский процесс (init/systemd)
# Может быть:
# - systemd (современные системы)
# - sysvinit (старые системы)
# - custom init (embedded, контейнеры)
# systemd инициализирует:
# 1. Парсит /etc/systemd/system/*.target файлы
# 2. Запускает необходимые сервисы
# 3. Инициализирует getty (login prompt)
# Проверить текущий init:
# ps -p 1 -o comm=
8. Полная последовательность
Питание -> BIOS -> Bootloader -> Kernel -> Drivers -> Filesystems -> Init -> Services -> Login
1ms 1s 0.1s 0.5s 0.5s 0.2s 0.1s 1s Ready
9. Диагностика процесса загрузки
# Просмотр timing'ов загрузки
systemd-analyze
# Просмотр по сервисам
systemd-analyze blame
# Просмотр дневника загрузки
journalctl -b 0 | head -50
# Параметры kernel
cat /proc/cmdline
# Kernel messages
dmesg | head -30
10. Практические примеры настройки
Ускорение загрузки:
# Отключить неиспользуемые modules
CONFIG_DEBUG_INFO=n
# Параллельная загрузка драйверов
echo 4 > /proc/sys/kernel/threads-max
Диагностика проблем:
# Если система не загружается:
# linux ... rw init=/bin/bash
# Kernel panic debugging:
dmesg | tail -30
Выводы
После подачи питания на устройство происходит:
- Аппаратная фаза (milliseconds): CPU инициализируется, BIOS запускается
- BIOS/UEFI фаза (1-2 seconds): Инициализация оборудования, POST
- Bootloader фаза (0.5 seconds): Загрузка kernel в память
- Kernel инициализация (1-2 seconds): Memory, interrupts, drivers, filesystems
- Init процесс (1-5 seconds): Запуск сервисов
- Ready для пользователя (5-30 seconds): Зависит от конфигурации
Понимание этого процесса критично для отладки проблем при загрузке, оптимизации времени boot, разработки драйверов и создания custom embedded систем.