Пост

Обновление загрузчика на Raspberry Pi

Процесс загрузки Raspberry Pi представляет собой многоэтапную процедуру, инициируемую при включении питания устройства. Понимание этого процесса крайне полезно для диагностики проблем и выполнения расширенных конфигураций. В отличие от традиционных ПК, загрузка Pi начинается не с BIOS или UEFI, а с встроенного в чип загрузчика, который отвечает за инициализацию оборудования и последующую загрузку операционной системы. Данная статья детально разбирает каждый этап этого процесса.

Описание/Введение

Процесс загрузки Raspberry Pi представляет собой многоэтапную процедуру, инициируемую при включении питания устройства. Понимание этого процесса крайне полезно для диагностики проблем и выполнения расширенных конфигураций. В отличие от традиционных ПК, загрузка Pi начинается не с BIOS или UEFI, а с встроенного в чип загрузчика, который отвечает за инициализацию оборудования и последующую загрузку операционной системы. Данная статья детально разбирает каждый этап этого процесса.

Рекомендации

Перед внесением любых изменений в конфигурацию загрузчика или параметры ядра настоятельно рекомендуется создать резервную копию важных данных и критических системных файлов, таких как /boot/firmware/config.txt и cmdline.txt. Неправильная модификация этих файлов может привести к невозможности загрузки системы.

Процесс загрузки Raspberry Pi

Процесс загрузки можно разделить на несколько ключевых этапов, начиная с подачи питания на плату.

Первый этап загрузки

Первый этап загрузки (Stage 1) выполняется встроенным в SoC (System-on-a-Chip) загрузчиком. Этот код, “прошитый” в самом чипе и неизменяемый, отвечает за начальную инициализацию и запуск второго этапа загрузчика, который хранится на SD-карте или другом загрузочном носителе. На данном этапе происходит базовая настройка оборудования, необходимая для чтения с внешнего накопителя.

Второй этап загрузки

Второй этап загрузки (Stage 2) представляет собой файл bootcode.bin, расположенный в загрузочном разделе (обычно с меткой bootfs). Его основная задача — инициализировать SDRAM, что позволяет системе получить доступ к большему объему памяти, а затем загрузить основной загрузчик или напрямую вызвать ядро ОС. На современных моделях Raspberry Pi, начиная с Pi 4, этот этап часто пропускается, так как встроенный загрузчик обладает достаточной функциональностью для чтения файловой системы FAT и непосредственной загрузки следующих компонентов.

Третий этап загрузки

На третьем этапе загружается основной загрузчик. В зависимости от конфигурации и версии ОС, это может быть файл start4.elf (для Pi 4) или аналогичный файл для других моделей. Этот загрузчик отвечает за дальнейшую инициализацию оборудования, включая графический процессор (GPU), и загрузку файлов конфигурации, таких как config.txt и cmdline.txt. Именно на этом этапе система считывает параметры, заданные пользователем.

Загрузка ядра ОС

После успешного выполнения всех предыдущих этапов основной загрузчик загружает ядро операционной системы, которое обычно представляет собой файл vmlinuz или kernel8.img. Путь к ядру и параметры его загрузки определяются в файле config.txt (например, kernel=vmlinuz-5.10.0-21-rpi4) и cmdline.txt. После этого управление передается ядру, которое завершает инициализацию системы и запускает процесс init (или systemd в современных дистрибутивах), что знаменует начало работы пользовательской среды.

Экран загрузки Raspberry Pi OS с логотипом малины

Файлы конфигурации загрузки

Ключевые параметры загрузки управляются через файлы, расположенные в загрузочном разделе.

Файл config.txt

Файл config.txt является основным конфигурационным файлом, влияющим на оборудование и параметры загрузки до старта ядра. Он позволяет настраивать разрешение HDMI, тактовые частоты процессора и GPU, режимы аудиовыхода и многое другое. Например, для фиксации разрешения дисплея можно использовать директиву hdmi_group и hdmi_mode.

1
2
3
# Пример настройки разрешения HDMI в config.txt
hdmi_group=2
hdmi_mode=82

Файл cmdline.txt

Файл cmdline.txt содержит параметры командной строки, которые передаются непосредственно загружаемому ядру Linux. Эти параметры определяют, среди прочего, корневой раздел файловой системы (root partition), режим вывода ядра (console) и другие низкоуровневые настройки.

1
console=serial0,115200 console=tty1 root=PARTUUID=12345678-02 rootfstype=ext4 fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh

Обновление загрузчика

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

Проверка текущей версии

Чтобы проверить текущую установленную версию загрузчика, выполните следующую команду в терминале.

1
vcgencmd bootloader_version

Обновление через rpi-eeprom-update

Процесс обновления упрощен с помощью утилиты rpi-eeprom-update. Для проверки наличия и установки обновлений загрузчика используйте эту команду.

1
sudo rpi-eeprom-update

Если обновление доступно, его можно применить, выполнив команду с ключом -a.

1
2
sudo rpi-eeprom-update -a
sudo reboot

Ручное обновление загрузчика

Для продвинутых сценариев существует возможность ручного обновления. Сначала загрузите архив с последней версией загрузчика.

1
sudo rpi-eeprom-update -r

Затем вручную укажите файл для прошивки, используя команду vcgencmd.

1
sudo vcgencmd bootloader_config /lib/firmware/raspberrypi/bootloader-xxx/pieeprom-2023-xx-xx.bin

Типичные проблемы и решения

Проблема: После обновления загрузчика или редактирования config.txt система не загружается и может показывать пустой экран или мигающий курсор. Решение: Подключите SD-карту к другому компьютеру и проверьте синтаксис файла config.txt на наличие опечаток. Временно переименуйте файл в config.bak, чтобы загрузиться со стандартными настройками.

Проблема: Компьютер не распознает загрузочную SD-карту, и Pi не выходит за пределы первого этапа загрузки. Решение: Убедитесь, что SD-карта корректно отформатирована (загрузочный раздел в FAT32), а файлы загрузчика (start*.elf, bootcode.bin, kernel*.img) присутствуют и не повреждены. Попробуйте перезаписать образ ОС на карту заново.

Проблема: Утилита rpi-eeprom-update не находит обновлений или завершается с ошибкой. Решение: Проверьте подключение к интернету. Убедитесь, что ваша система обновлена (sudo apt update && sudo apt upgrade). Также проверьте, поддерживает ли ваша модель Pi обновление EEPROM (Pi 4 и новее).

Глубокое понимание процесса загрузки Raspberry Pi, от инициализации оборудования до запуска ядра Linux, является мощным инструментом для любого пользователя. Оно позволяет не только эффективно устранять неполадки, но и тонко настраивать систему под конкретные задачи, будь то оптимизация производительности или конфигурация для работы без монитора. Знание роли таких файлов, как config.txt и cmdline.txt, открывает путь к полному контролю над вашим устройством.

Авторский пост защищен лицензией CC BY 4.0 .

© evdokimoff. Некоторые права защищены.

Использует тему Chirpy для Jekyll