add: сборка ядра Linux для opi5plus (.2)
This commit is contained in:
parent
7b0853da9c
commit
cbf3ae56bb
@ -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
|
||||
```
|
||||
|
Loading…
x
Reference in New Issue
Block a user