add: сборка ядра Linux для opi5plus (.2)
This commit is contained in:
parent
7b0853da9c
commit
cbf3ae56bb
@ -26,8 +26,8 @@
|
|||||||
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
|
## План сборки ядра с iSCSI
|
||||||
|
|
||||||
@ -43,40 +43,132 @@ Xunlong обновляет ядро не часто.
|
|||||||
|
|
||||||
## Резервное копирование текущего ядра и /boot
|
## Резервное копирование текущего ядра и /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
|
```bash
|
||||||
sudo apt update
|
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
|
|
||||||
```
|
|
||||||
|
|
||||||
результат должен быть примерно таким:
|
* `build-essential` -- Включает `gcc` (для ARM64, make и другие базовые инструменты компиляции.
|
||||||
```text
|
* `bc` -- Утилита для точных математических вычислений в командной строке. Используется для вычислений в скриптах сборки ядра.
|
||||||
aarch64-linux-gnu-gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
|
* `flex` и `bison` -- генератор лексических анализаторов и парсер. Нужны для обработки конфигурационных файлов ядра.
|
||||||
Copyright (C) 2021 Free Software Foundation, Inc.
|
* `libssl-dev` -- Для поддержки криптографии в ядре и `OpenSSL`.
|
||||||
This is free software; see the source for copying conditions. There is NO
|
* `libncurses-dev` -- Библиотека для создания текстовых интерфейсов в терминале. Необходимо для работы интерфейса
|
||||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
`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
|
```bash
|
||||||
git clone --depth 1 https://github.com/orangepi-xunlong/linux-orangepi -b orange-pi-6.1-rk35xx ~/linux-orangepi
|
git clone --depth 1 https://github.com/orangepi-xunlong/linux-orangepi -b orange-pi-6.1-rk35xx ~/linux-orangepi
|
||||||
```
|
```
|
||||||
|
|
||||||
После того, как клонировали репозиторий, переходим в него:
|
После клонирования репозитория, переходим в каталог с ним:
|
||||||
```bash
|
```bash
|
||||||
cd ~/linux-orangepi
|
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
|
```bash
|
||||||
zcat /proc/config.gz > .config
|
zcat /proc/config.gz > .config
|
||||||
|
Loading…
x
Reference in New Issue
Block a user