Завантажувач (Bootloader)

Завантажувач — це програмне забезпечення, яке виконується щоразу, коли пристрій вмикається. Це виконуваний машинний код, отже, він є специфічним для конкретної архітектури. Завантажувач також сильно залежить від конкретного пристрою, оскільки його основна задача — ініціалізація всього апаратного забезпечення на низькому рівні. Завантажувач може зберігатись в окремій EEPROM (вкрай рідко) або безпосередньо у флеш-пам’яті (найчастіше).

Оскільки завантажувач є програмним забезпеченням, його можна вважати частиною прошивки, але завантажувач не є частиною OpenWrt!
Лише в окремих випадках виникає потреба змінити налаштування завантажувача або код завантажувача для можливості завантаження чи встановлення OpenWrt.
Існує багато завантажувачів з різними ліцензіями на програмне забезпечення.

Основна функція завантажувача — ініціалізація апаратного забезпечення, передача абстракції (опису) ініціалізованого заліза, а також передача керування ядру та його виконання. (Дуже гарний технічний приклад можна побачити тут, або див. інші приклади: тут і тут) Після цього завантажувач більше не потрібен у пам’яті. Більшість завантажувачів надають додаткові функції.

Насправді — ні. Завантажувач не є обов’язковим для запуску Linux. Використання одного або кількох завантажувачів у ланцюгу (тобто bootstrap) для завантаження ядра — це не категорична необхідність, а скоріше зручний і гнучкий спосіб запуску операційної системи. Основна перевага для OpenWrt полягає в тому, що наявність завантажувача дає користувачам і розробникам додаткові можливості для відновлення (debrick) пристрою.

Деякі завантажувачі або реалізації універсальних завантажувачів можуть містити обмеження, навмисно закладені виробником (OEM), наприклад:

  • спеціально запроєктоване обмеження розміру ядра/прошивки
  • вимога до завантажувача приймати тільки специфічний (екзотичний) формат прошивки
  • нездатність виконувати бінарний формат ELF
  • необхідність наявності певного “магічного значення” у правильному місці
  • й інші подібні умови

Причини можуть бути різні: від некомпетентності розробників до навмисного обмеження спроб користувача запускати вільне ПЗ на власному обладнанні.

Завантажувач може бути простим або складним, і підтримувати нуль, одну або багато додаткових функцій. У багатьох випадках ці функції дають користувачу великі переваги, тому більшість завантажувачів їх реалізовують, зокрема:

  • Прошивання нової прошивки, див. generic.flashing
  • Завантажувач може перевіряти дані у флеш-пам’яті. Наприклад, якщо прошивка не проходить перевірку CRC, завантажувач вважає її пошкодженою і чекатиме нову прошивку через мережу. Але це також означає, що кожного разу при зміні прошивки потрібно оновлювати CRC.
  • Це також може бути активовано встановленням змінної `boot_wait` або через команду в терміналі.
  • CLI (також відомий як консоль), який зазвичай доступний лише через послідовний порт. Є кілька способів доступу до консолі на цільовому пристрої, наприклад через термінальний сервер, але найпоширеніший спосіб — підключення до послідовного порту хост-системи. Також вам знадобиться програма емуляції терміналу, така як `cu` або `kermit`.
    • Оскільки завантажувач припиняє роботу після запуску ядра, для взаємодії з ним потрібно увійти до нього ДО завантаження ядра, а іноді ще й зупинити процес завантаження.
  • Завантаження з USB
    • Подібно до того, як ядро потребує модуля `kmod-fs-ext4` для роботи з файловою системою EXT3, завантажувач потребує відповідного модуля. GRUB2 має таку функціональність, що дозволяє комфортно налаштовувати параметри завантаження та обслуговувати ОС. Легкі завантажувачі, які зазвичай використовуються з OpenWrt, зазвичай цього не підтримують. Але див. flash.layout для додаткових прикладів. Винятком є реалізація U-Boot для dockstar, яка не лише ініціалізує USB, а й підтримує EXT2-файлову систему, тому пристрій можна завантажити прямо з ext2-жорсткого диска чи USB-накопичувача.

→ Детальніший опис міститься на сторінці: boot process — завантажувач є його початком.

Comparison of boot loaders

Будь ласка, використовуйте templates для створення та підтримки цих статей. Наразі вони слабо підтримуються, без структури і майже марні

Вбудований завантажувач виконує ті ж функції, що й BIOS разом з GNU GRUB на звичайному ПК.

  • BIOS пропрієтарний — BIOS вашого ПК — це просто завантажувач
  • UEFI пропрієтарний — спадкоємець BIOS
  • coreboot GPLv2 — вільна альтернатива BIOS/UEFI, заснована на Linux;
    підтримка x86, x86-64, ARM; не підтримує MIPS;
    виконує лише базову ініціалізацію апаратного забезпечення
  • GNU GRUB GPLv2
  • Das U-Boot GPLv2 — найфункціональніший, найгнучкіший і найактивніше розроблюваний FOSS-завантажувач
  • pepe2k-u-boot_mod GPLv2 — модифікація U-Boot 1.1.4 для маршрутизаторів: https://github.com/pepe2k/u-boot_mod
  • RedBoot модифікована GPL
  • CFE BSD-подібна — розроблена Broadcom; оранжевий колір означає, що виробник не зобов’язаний надавати вихідний код
  • Adam2 пропрієтарна для AR7/UR8
    • pspboot пропрієтарна — частково сумісний наступник Adam2
  • brnboot невідомо — іноді називається AMAZON Loader
  • bootbase невідомо — використовується в ZyXEL Prestige 660HW-xx, 660M-xx та, ймовірно, інших моделях ZyXEL http://www.ixo.de/info/zyxel_uclinux/
  • jboot невідомо
  • myloader невідомо
  • pp_boot невідомо
  • yamon невідомо — від Imagination Technology; Linux-ядро має бути у форматі SREC
  • Breed — Breed bootloader
  • Власний завантажувач VxWorks — використовується в більшості пристроїв Atheros (опис доступний на сторінці Netgear WGT624)
  • NetBoot — стандартний завантажувач у DWL7100AP дозволяє завантажувати прошивку по мережі через TFTP прямо в RAM
  • ThreadX — ОС ThreadX використовується D-Link у малобюджетних моделях з 1МБ флеш та 8МБ RAM. Має власний завантажувач, який нічого не виводить у термінал, але має recovery-режим для прошивки через браузер.
  • Last modified: 2025/05/28 12:37
  • by vazaz