Завантажувач (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 — завантажувач є його початком.
Індивідуальні завантажувачі
Будь ласка, використовуйте templates для створення та підтримки цих статей. Наразі вони слабо підтримуються, без структури і майже марні |
ПК
Вбудовані пристрої
- 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 невідомо
- Breed — Breed bootloader
- Власний завантажувач VxWorks — використовується в більшості пристроїв Atheros (опис доступний на сторінці Netgear WGT624)
- NetBoot — стандартний завантажувач у DWL7100AP дозволяє завантажувати прошивку по мережі через TFTP прямо в RAM
- ThreadX — ОС ThreadX використовується D-Link у малобюджетних моделях з 1МБ флеш та 8МБ RAM. Має власний завантажувач, який нічого не виводить у термінал, але має recovery-режим для прошивки через браузер.