From cbf3ae56bbba6fd426e2a8e717f886619b447100 Mon Sep 17 00:00:00 2001 From: erjemin Date: Sun, 23 Mar 2025 21:35:05 +0300 Subject: [PATCH] =?UTF-8?q?add:=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0=20?= =?UTF-8?q?=D1=8F=D0=B4=D1=80=D0=B0=20Linux=20=D0=B4=D0=BB=D1=8F=20opi5plu?= =?UTF-8?q?s=20(.2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...5plus-rebuilding-linux-kernel-for-iscsi.md | 132 +++++++++++++++--- 1 file changed, 112 insertions(+), 20 deletions(-) diff --git a/raspberry-and-orange-pi/opi5plus-rebuilding-linux-kernel-for-iscsi.md b/raspberry-and-orange-pi/opi5plus-rebuilding-linux-kernel-for-iscsi.md index 8e25b60..bb4f910 100644 --- a/raspberry-and-orange-pi/opi5plus-rebuilding-linux-kernel-for-iscsi.md +++ b/raspberry-and-orange-pi/opi5plus-rebuilding-linux-kernel-for-iscsi.md @@ -25,9 +25,9 @@ дистрибутива. Если выйдет новая версия ядра от Xunlong, придётся вручную повторить процесс компиляции. К счастью, Xunlong обновляет ядро не часто. -| Заметка | -|-----------------------------------------------------------------------------------------------| -| Orange Pi 5 Plus использует процессор Rockchip RK3588, как и другие устройства под брендом Orange. Процесс компиляции ядра для всех RK35xx почти идентичным, и базируется на одном и том же дистрибутиве. Однако, разные периферийные устройства: например, GPIO, USB или Ethernet-контроллеры могут отличаться. Мы будем использовать `.config` от текущего, рабочего ядра, так что настройки будут актуальны. Но следует иметь в виду, что возможно, в будущем могут появиться изменения в конфигурации, дистрибутива и т.п. Следует учитывать, это и **никто ничего не гарантирует**. | +| Заметка | +|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Orange Pi 5 Plus использует процессор **Rockchip RK3588** (как и многие другие устройства под брендом Orange). Процесс компиляции ядра для всех RK35xx почти идентичен, и базируется на одном и том же дистрибутиве. Однако, разные периферийные устройства: например, GPIO, USB или Ethernet-контроллеры могут отличаться. Мы будем использовать `.config` от текущего, рабочего ядра, так что настройки будут актуальны. Но следует иметь в виду, что возможно, в будущем могут появиться изменения в конфигурации, дистрибутива и т.п. Следует учитывать, это и **никто ничего не гарантирует**. | ## План сборки ядра с iSCSI @@ -43,41 +43,133 @@ Xunlong обновляет ядро не часто. ## Резервное копирование текущего ядра и /boot +Архивируем том `/boot` на нашем Orange Pi 5 Plus во временный каталог `/tmp`: +```bash +sudo tar -czf /tmp/boot-backup.tar.gz /boot +``` + +Проверим, что архив создался: +```bash +ls -al /tmp/boot-backup.tar.gz +``` + +Увидим что архив создался: +```text +-rw-r--r-- 1 root root 62116591 мар 23 20:33 /tmp/boot-backup.tar.gz +``` + +Теперь нам нужно скопировать его на какой-нибудь внешний хост (или носитель, но я буду копировать на хост другого +компьютера). Если что-то пойдёт не так (например, после обновления ядра система не загрузится) можно будет восстановить +файлы из этого архива. Мой текущий хост, на котором я буду компилировать ядро -- `opi5plus-3` (замени на свой хост), а +имя пользователя `opi` (замени на свой). На рабочем компьютере у меня есть папка `~/backup/` (`mkdir -p ~/backup`), +куда я и буду копировать архив: +```bash +scp opi@opi5plus-3.local:/tmp/boot-backup.tar.gz ~/backup/opi5plus-3-boot-backup.tar.gz +``` + +### Что в архиве? + +Если что-то пойдет не так, нам надо знать какие файлы в `/boot` важны и для чего предназначены. Вот список файлов +('ls -al /boot'): +```text +drwxr-xr-x 4 root root 4096 янв 1 1970 ./ +drwxr-xr-x 19 root root 4096 фев 16 19:59 ../ +-rwxr-xr-x 1 root root 230456 ноя 21 09:56 boot.bmp* +-rwxr-xr-x 1 root root 3341 ноя 21 09:55 boot.cmd* +-rwxr-xr-x 1 root root 3413 ноя 21 10:04 boot.scr* +-rwxr-xr-x 1 root root 230393 ноя 21 07:08 config-6.1.43-rockchip-rk3588* +drwxr-xr-x 3 root root 4096 ноя 21 09:55 dtb/ +drwxr-xr-x 3 root root 4096 ноя 21 09:55 dtb-6.1.43-rockchip-rk3588/ +-rwxr-xr-x 1 root root 40579584 ноя 21 07:08 Image* +-rwxr-xr-x 1 root root 15462140 мар 21 16:36 initrd.img-6.1.43-rockchip-rk3588* +-rwxr-xr-x 1 root root 1152056 ноя 21 09:56 logo.bmp* +-rwxr-xr-x 1 root root 0 ноя 21 09:55 .next* +-rwxr-xr-x 1 root root 178 фев 16 19:59 orangepiEnv.txt* +-rwxr-xr-x 1 root root 1542 ноя 21 09:56 orangepi_first_run.txt.template* +-rwxr-xr-x 1 root root 6209932 ноя 21 07:08 System.map-6.1.43-rockchip-rk3588* +-rwxr-xr-x 1 root root 15462204 мар 21 16:36 uInitrd* +-rwxr-xr-x 1 root root 40579584 ноя 21 07:08 vmlinuz-6.1.43-rockchip-rk3588* +``` + +Ключевые файлы: +* `Image` -- собственно ядро Linux (в данном случае версия 6.1.43 для Rockchip RK3588). При старте компьютера загрузчик + U-Boot загрузит его в память и передаст ему управление. Без этого файла система не запустится. +* `vmlinuz-6.1.43-rockchip-rk3588` -- копия ядра (в системе уже есть резервная копия). +* `dtb/` -- Каталог файлами **Device Tree Blob** (`DTB`). Это бинарные файлы, описывающие аппаратное обеспечение устройства. + Для Orange Pi 5 Plus используется файл вроде `rk3588-orangepi-5-plus.dtb` (находится в подкаталоге `dtb/rockchip/`). + DTB передаётся ядру, чтобы оно знало, как работать с процессором (количество ядер, частоты), памятью (RAM, её объём + и адреса), периферией (UART, I2C, SPI, Ethernet, USB, GPIO, прерывания и тому подобное). На ARM-устройствах + (в отличие от x86, где есть ACPI) нет стандартного способа обнаружения оборудования. DTB решает эту проблему, + предоставляя ядру "карту" железа. U-Boot загружает DTB из /boot/dtb/ и передаёт его ядру при старте. +* `uInitrd` -- Начальный RAM-диск (initrd), адаптированный для U-Boot. Содержит модули и скрипты, необходимые для + пред-загрузки (выбор накопителя, монтирование корневой файловой системы и т.п.). Если он повреждён или несовместим + с ядром, загрузка может упасть на этапе инициализации. +* `orangepiEnv.txt` -- Конфигурационный файл для U-Boot. Здесь задаются параметры загрузки, такие как путь расположение + дерева DTB, UUID корневой файловой системы, тип файловой системы... Без правильных настроек в этом файле U-Boot не + найдёт нужные для загрузки файлы. +* `boot.scr` -- Скрипт загрузки для U-Boot. Содержит команды для загрузки ядра, initrd и DTB. U-Boot выполняет его + при старте системы. Этот файл создаётся из `boot.cmd` с помощью утилиты `mkimage`. Если он повреждён или отсутствует, + U-Boot не сможет загрузить систему. + +Менее критичные, но полезные файлы: +* `config-6.1.43-rockchip-rk3588` -- Конфигурация ядра, использованная при его сборке (он нам понадобится, чтобы + пересобрать ядро с iSCSI). +* `System.map-6.1.43-rockchip-rk3588` -- Карта меток (символов) ядра, полезна для отладки. +* `initrd.img-6.1.43-rockchip-rk3588` -- Обычный initrd, из которого генерируется uInitrd. +* `boot.bmp` и `logo.bmp` -- Изображения для экрана загрузки (не влияют на работу системы). ## Устанавливать инструменты для сборки ядра -Установи всё необходимое: +Обновим репозитории и установим минимальный инструментарий для сборки ядра: ```bash sudo apt update -sudo apt install -y build-essential bc flex bison libssl-dev libncurses-dev gcc-aarch64-linux-gnu git +sudo apt install -y build-essential bc flex bison libssl-dev libncurses-dev git ``` -Проверь, что gcc-aarch64-linux-gnu установлен: -```bash -aarch64-linux-gnu-gcc --version -``` +Нам понадобятся следующие пакеты: -результат должен быть примерно таким: -```text -aarch64-linux-gnu-gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 -Copyright (C) 2021 Free Software Foundation, Inc. -This is free software; see the source for copying conditions. There is NO -warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -``` +* `build-essential` -- Включает `gcc` (для ARM64, make и другие базовые инструменты компиляции. +* `bc` -- Утилита для точных математических вычислений в командной строке. Используется для вычислений в скриптах сборки ядра. +* `flex` и `bison` -- генератор лексических анализаторов и парсер. Нужны для обработки конфигурационных файлов ядра. +* `libssl-dev` -- Для поддержки криптографии в ядре и `OpenSSL`. +* `libncurses-dev` -- Библиотека для создания текстовых интерфейсов в терминале. Необходимо для работы интерфейса + `menuconfig` при настройке параметров ядра. +* `git` -- Для клонирования исходного кода ядра из репозитория Xunlong. -## Скачивание исходников ядра + +## Скачивание и подготавливаем исходники ядра -Клонируем репозиторий Orange Pi для ядра 6.1: +Клонируем репозиторий Orange Pi для ядра 6.1 из репозитория Xunlong. Мы будем брать ветку (branch) +`orange-pi-6.1-rk35xx`. Это ветка с исходниками для всех устройств на базе Rockchip RK35xx (включая Orange Pi 5 Plus): ```bash git clone --depth 1 https://github.com/orangepi-xunlong/linux-orangepi -b orange-pi-6.1-rk35xx ~/linux-orangepi ``` -После того, как клонировали репозиторий, переходим в него: +После клонирования репозитория, переходим в каталог с ним: ```bash cd ~/linux-orangepi ``` - Копируем конфиг текущего ядра в конфиг для сборки: +И первым делом в `Makefile` установим `EXTRAVERSION` (модификатор версии ядра). Узнаем текущую версию ядра: +```bash +uname -r +``` + +Я на своем Orange Pi 5 Plus вижу (у вас может быть другая версия): +```text +6.1.43-rockchip-rk3588 +``` + +Открываем `Makefile` в текстовом редакторе: +```bash +nano Makefile +``` + +И меняем строку `XTRAVERSION =` (у меня это пятая строчка) на: +```text +EXTRAVERSION = -rockchip-rk3588 +``` +Копируем конфиг текущего ядра в конфиг для сборки: ```bash zcat /proc/config.gz > .config ```