Перейти к основному содержимому

Запись образа операционной системы

Для запуска системы на одноплатном компьютере необходимо подготовить носитель с записанным на него валидным образом системы (os.img). Самые распространенные носители - microSD, eMMC, SPI-Flash + SD/eMMC/NVMe.
Для контроля процесса запуска системы можно подключиться к плате по UART и просматривать логи загрузки в консоли. Консоль подключена к 3-контактному разъёму TTL Debug UART, который расположен рядом с портом питания Type-C. Подключите к нему любой USB-UART преобразователь (например, на базе микросхем CP2102 или СР340) и откройте соединение на скорости 1500000 бод/с.
Далее рассмотрим подробнее способы записи образа и запуска системы для каждого носителя.

Этапы и приоритеты загрузки

На разных этапах загрузки операционной системы действуют свои приоритеты. Рассмотрим их поэтапно.

  1. При включении питания ROM-код, записанный производителем в процессор RK3566, последовательно ищет загрузчик в нескольких типах постоянной памяти. По умолчанию порядок проверки следующий:

    • SPI-Flash
    • Встроенная eMMC память
    • Карта памяти microSD

    На каждом шаге ROM-код SoC проверяет, есть ли на носителе валидный загрузочный образ (SPL). Если загрузчик найден, загрузка выполняется с этого носителя, источники с более низким приоритетом уже не рассматриваются. Если загрузчик не найден или носитель физически отсутствует/отключён, выполнение переходит к следующему устройству в списке.

  2. Первичный загрузчик (SPL) найден и запущен. После инициализации необходимой периферии SPL передаёт управление основному загрузчику U-Boot: он пытается запустить FIT-образ U-Boot с того же носителя, с которого был запущен сам SPL.

  3. После запуска и инициализации U-Boot сканирует доступные носители в поисках сценария загрузки ядра (boot.scr / extlinux.conf / EFI). Порядок сканирования следующий:

    • SD
    • eMMC
    • NVMe
    • USB
    • сеть
  4. После загрузки ядра необходимо смонтировать корневую файловую систему (rootfs). Если в сценарии загрузки для файловой системы указана метка, например root=PARTLABEL=rootfs, ядро выберет первый найденный раздел среди подключённых устройств с указанной меткой. Если на плате присутствует несколько носителей с валидной rootfs и меткой rootfs (например, SD-карта и NVMe-диск), корневая файловая система может быть загружена с NVMe, даже если ядро и DTB были загружены с SD-карты.

Таким образом, при выборе носителя для записи образа ОС важно учитывать описанные приоритеты загрузки: если планируется запуск системы с менее приоритетного устройства, предварительно необходимо удалить первичный и основной загрузчики со всех носителей, имеющих более высокий приоритет на соответствующем этапе загрузки.

Подключение платы к ПК в режиме Maskrom

Для работы с платой на ПК необходимо подключать её к ПК в режиме Maskrom. Для этого:

  1. Отключите питание от платы. Выньте microSD карту из разъема.
  2. Подключите плату к ПК кабелем USB-A (male-to-male) с поддержкой передачи данных. На плате для подключения необходимо использовать левый верхний USB-разъем, как показано на картинке. Для стабильной работы рекомендуется подключать плату напрямую к ПК без использования USB-хабов.

maskrom_port

  1. Зажмите кнопку Boot на плате и подайте питание, подключив источник питания в USB Type-C разъем платы. Через 2-3 секунды после подачи питания отпустите кнопку Boot. ПК должен распознать подключение нового устройства. Теперь можно переходить непосредственно к работе с устройством.

Предварительная подготовка при работе с ПК

Для работы с устройством на ПК необходимо подготовить для работы некоторые инструменты.

Для работы с eMMC памятью напрямую с ПК на ОС Windows используется утилита RKDevTool и инструменты DriverAssitant и MiniLoader. Весь пакет инструментов доступен по ссылке. Скачанный пакет рекомендуется расположить так, чтобы в пути до него не было кириллических символов, иначе могут возникнуть ошибки при запуске.
Предварительно для работы с устройством необходимо установить драйвер:

  1. Зайдите в папку DriverAssitant.
  2. Запустите файл DriverInstall.exe. Откроется окно установки драйверов.
  3. В открывшемся окне нажмите кнопку Install Driver.

driver_install

  1. После завершения установки появится еще одно всплывающее окно, сообщающее об успешной установке. Теперь оба окна можно закрыть.

driver_install_done

  1. Перейдите в папку RKDevTool и запустите RKDevTool.exe. Откроется окно приложения.
  2. Подключите устройство к ПК в режиме Maskrom. При успешном подключении внизу отобразится подключенное в режиме MASKROM устройство.

maskrom

Теперь устройство готово к работе.


Запись на microSD карту

Для записи образа на microSD карту можно использовать программу balenaEtcher:

balena_screen

  1. Запустите программу.
  2. Нажмите кнопку Flash from file и в открывшемся окне выберите образ, который необходимо записать (os.img).
  3. Нажмите кнопку Select target и выберите вашу microSD карту из списка доступных.
  4. Нажмите кнопку Flash!. Начнется процесс записи образа, это может занять некоторое время. При запуске Windows может спросить разрешение на внесение изменений программой balenaEtcher - необходимо согласиться.
  5. По окончании записи программа balenaEtcher пришлет уведомление Flash Complete, а на главном окне в случае успешной загрузки помимо этого будет отображаться надпись 1 Successful target. Теперь microSD карта готова к работе.

Работа с EMMC памятью

Запись

Для записи образа в eMMC память:

  1. Подготовьте образ операционной системы с расширением .img. Если образ был заархивирован, его необходимо распаковать перед записью.
  2. Подключите плату к ПК в режиме Maskrom после предварительной подготовки.
  3. Перейдите в папку RKDevTool и запустите RKDevTool.exe.
  4. Сначала нужно загрузить конфигурацию, подходящую для работы с eMMC памятью. Для этого в открывшемся окне программы наведите курсор на выделенную на картинке ниже область и нажмите правую кнопку мыши. Откроется контекстное меню. Выберите предпоследний пункт меню, как показано на картинке ниже.

import_configuration

  1. Откроется окно выбора конфигурационного файла. Перейдите в папку MiniLoader и выберите файл rk356x_linux_emmc.cfg. Нажмите кнопку Открыть.

load_emmc_config

После загрузки конфигурации появится окно подтверждения загрузки. Закройте его. В основном окне останутся две строки - загрузчик и ядро Linux. Так же в одном из столбцов будет указано, что запись производится в EMMC.
6. Для выбора файла загрузчика в строке Loader нажмите на кнопку, обозначенную цифрой 1 на картинке ниже. Откроется окно выбора файла. Перейдите в папку MiniLoader и выберите файл MiniLoaderAll.bin. Нажмите кнопку Открыть.

load_emmc_img

  1. Для выбора образа операционной системы в строке linux нажмите на кнопку, обозначенную цифрой 2 на картинке выше. Откроется окно выбора файла. Выберите подготовленный образ ОС, который необходимо записать. Нажмите кнопку Открыть.
  2. Для записи файлов необходимо выбрать опцию Force write to address, обозначенную цифрой 1 на картинке ниже, и нажать кнопку запуска загрузки, обозначенную цифрой 2.

start_emmc_loading

  1. После запуска загрузки в пустом окне появятся логи загрузки. В них отображается тип записываемой памяти - EMMC, а так же название записываемого образа и прогресс записи в процентах. Если название образа слишком длинное, прогресс записи может быть вытеснен из области видимости.
    При окончании загрузки устройство выходит из Maskrom режима, происходит автоматический запуск загруженной операционной системы.

finish_emmc_loading

Очистка

Для очистки eMMC памяти:

  1. Подключите плату к ПК в режиме Maskrom после проведения предварительной подготовки.
  2. Перейдите в папку RKDevTool и запустите RKDevTool.exe.
  3. В открывшемся окне перейдите на вкладку расширенных функций, нажав кнопку, выделенную на картинке ниже.

select_advanced_func

  1. Для доступа к eMMC памяти сначала нужно временно записать загрузчик. Для этого на вкладке расширенных функций нажмите кнопку, обозначенную цифрой 1 на картинке ниже. В открывшемся окне зайдите в папку MiniLoader и выберите файл MiniLoaderAll.bin. Нажмите Открыть. После выбора файла запишите загрузчик, нажав кнопку, обозначенную цифрой 2.

advanced_load_boot

  1. После записи загрузчика в окне логов появятся соответствующие надписи. Теперь в окне выбора типа памяти выделите пункт 2. EMMC, как показано на картинке ниже, и нажмите кнопку Switch storage, обозначенную цифрой 1. Далее для очистки eMMC памяти нажмите кнопку Erase All, обозначенную цифрой 2.

advanced_select_emmc

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

advanced_erase_emmc


Работа с SPI Flash памятью

подсказка

Наличие SPI Flash памяти на плате ELTAY RM66 зависит от конкретной комплектации. Рекомендуется предварительно проверить наличие микросхемы на плате.

SPI Flash на модуле используется только для хранения загрузчика (SPL/U-Boot и сопутствующих данных конфигурации). Ядро операционной системы и корневая файловая система в типовой конфигурации размещаются на другом носителе. Загрузчик из SPI Flash инициализирует SoC и периферию, после чего передаёт управление ядру, расположенному на выбранном загрузочном устройстве.

Для организации загрузки платы из SPI Flash необходим специальный вариант загрузчика, адаптированный для работы из данного типа памяти. В случае SoC семейства Rockchip RK3566/RK3568 загрузчик должен соответствовать требованиям загрузочной цепочки Rockchip и включать:

  • начальный загрузчик IDBLoader (инициализация DDR и ранний SPL);
  • основной образ U-Boot в формате FIT (U-Boot + ARM Trusted Firmware + DTB), размещённый по ожидаемым Rockchip смещениям для SPI Flash внутри единого бинарного файла.

Загрузчик из SPI Flash может передавать управление системе, размещённой на одном из следующих носителей:

  • microSD-карта
  • eMMC
  • NVMe SSD (M.2)
  • опционально: USB-накопитель или сетевой загрузчик (PXE), если это предусмотрено конкретной сборкой U-Boot.

Конкретный порядок опроса доступных носителей (приоритет источников загрузки ядра и rootfs) определяется конфигурацией SPL/U-Boot, записанного в SPI Flash.

Загрузчик для SPI Flash памяти для платы ELTAY RM66

SPI Flash загрузчик, адаптированный для платы ELTAY RM66, можно скачать здесь.

внимание

Образ SPI-загрузчика имеет разметку и смещения, специфичные для SPI Flash, и предназначен только для записи в SPI NOR. Использование этого файла как загрузчика на eMMC/SD не приведёт к успешной загрузке.

Возможности предоставляемого загрузчика:

  • поддерживает запуск из SPI Flash;
  • после старта U-Boot последовательно выполняет поиск операционной системы на:
    • SD-карте,
    • встроенной памяти eMMC,
    • NVMe-накопителе;
  • включает поддержку NVMe на уровне U-Boot (возможность просмотра устройств NVMe и загрузки ядра непосредственно с NVMe-раздела);
  • по умолчанию загрузчик использует device tree файл rockchip/rk3566-eltay-rm66.dtb (путь записан в переменную U-Boot fdtfile). Если загружается сторонний дистрибутив с другим названием DTB, необходимо или разместить нужный DTB по пути /boot/rockchip/rk3566-eltay-rm66.dtb или в скрипте загрузки дистрибутива явно указать корректное имя DTB, тем самым переопределив переменную fdtfile.

Для использования загрузчика достаточно записать указанный бинарный образ в SPI Flash и подготовить на целевом носителе образ операционной системы с разделом ext4, содержащим каталог /boot и корректную инструкцию загрузки - extlinux.conf или boot.scr.

Запись

внимание

Перед записью нового загрузчика необходимо предварительно очистить SPI Flash память.

Для записи загрузчика в SPI Flash память:

  1. Подготовьте файл загрузчика.
  2. Подключите плату к ПК в режиме Maskrom после предварительной подготовки.
  3. Перейдите в папку RKDevTool и запустите RKDevTool.exe.
  4. Сначала нужно загрузить конфигурацию, подходящую для работы с SPI Flash памятью. Для этого в открывшемся окне программы наведите курсор на выделенную на картинке ниже область и нажмите правую кнопку мыши. Откроется контекстное меню. Выберите предпоследний пункт меню, как показано на картинке ниже.

import_configuration

  1. Откроется окно выбора конфигурационного файла. Перейдите в папку MiniLoader и выберите файл rk356x_linux_spiflash.cfg. Нажмите кнопку Открыть.

load_spi_flash_config

После загрузки конфигурации появится окно подтверждения загрузки. Закройте его. В основном окне останутся две строки - Loader и загрузчик для SPI Flash (uboot).

  1. Для выбора файла загрузчика, необходимого для текущей записи файлов, в строке Loader нажмите на кнопку, обозначенную цифрой 1 на картинке ниже. Откроется окно выбора файла. Перейдите в папку MiniLoader и выберите файл MiniLoaderAll.bin. Нажмите кнопку Открыть.

load_spi_flash_img

  1. Для выбора файла загрузчика для ОС в строке uboot нажмите на кнопку, обозначенную цифрой 2 на картинке выше. Откроется окно выбора файла. Выберите подготовленный файл загрузчика, который необходимо записать. Нажмите кнопку Открыть.
  2. Для записи файлов необходимо выбрать опцию Force write to address, обозначенную цифрой 1 на картинке ниже, и нажать кнопку запуска загрузки, обозначенную цифрой 2.

start_spi_flash_loading

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

finish_spi_flash_loading

Очистка

Для очистки SPI Flash памяти:

  1. Подключите плату к ПК в режиме Maskrom после проведения предварительной подготовки.
  2. Перейдите в папку RKDevTool и запустите RKDevTool.exe.
  3. В открывшемся окне перейдите на вкладку расширенных функций, нажав кнопку, выделенную на картинке ниже.

select_advanced_func

  1. Для доступа к SPI Flash памяти сначала нужно временно записать загрузчик. Для этого на вкладке расширенных функций нажмите кнопку, обозначенную цифрой 1 на картинке ниже. В открывшемся окне зайдите в папку MiniLoader и выберите файл MiniLoaderAll.bin. Нажмите Открыть. После выбора файла запишите загрузчик, нажав кнопку, обозначенную цифрой 2.

advanced_load_boot

  1. После записи загрузчика в окне логов появятся соответствующие надписи. Теперь в окне выбора типа памяти выделите пункт 5. SPINOR, как показано на картинке ниже, и нажмите кнопку Switch storage, обозначенную цифрой 1. Далее для очистки SPI Flash памяти нажмите кнопку Erase All, обозначенную цифрой 2.

advanced_select_spi_flash

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

advanced_erase_spi_flash


Работа с NVME диском

Диск NVMe SSD, подключённый к разъёму M.2 (PCIe), может использоваться как системный диск: на нём размещаются ядро операционной системы и корневая файловая система.
ROM-код SoC не может загружаться напрямую с NVMe, поэтому для запуска системы необходим загрузчик на другом носителе, который:

  • инициализирует контроллер PCIe/NVMe;
  • находит разделы на NVMe-диске;
  • загружает ядро и initramfs с NVMe;
  • передаёт управление ядру на NVMe.

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

  • SPI Flash
  • eMMC
  • microSD

При этом NVMe выступает именно как основной системный диск, а выбранный носитель (SPI/eMMC/SD) содержит только загрузчик (SPL/U-Boot и служебные данные), собранный с поддержкой NVMe.
Порядок, в котором загрузчик будет пробовать использовать носители для дальнейшей загрузки, задаётся конкретной сборкой SPL/U-Boot.

внимание

Для корректной работы системы, установленной на NVMe, необходимо, чтобы ни один более приоритетный носитель не содержал валидную ОС.

Для корректной загрузки ОС с NVMe образ должен удовлетворять нескольким условиям:

  • образ должен быть дисковым образом целиком, а не просто архивацией rootfs.
  • ядро должно иметь поддержку NVMe - драйвер NVMe должен быть встроен в ядро или доступен через initramfs, а параметр root= в конфигурации загрузки должен указывать на раздел NVMe (например, root=PARTLABEL=rootfs или root=/dev/nvme0n1p2).
  • конфигурация загрузчика должна быть согласована с разметкой диска - правильные пути к Image/zImage, и DTB-файлу, корректное имя DTB.

Запись

Если в наличии есть microSD карта с записанным валидным образом дистрибутива, можно запустить систему на плате с карты, загрузить нужный дистрибутив в систему и записать его на NVMe диск. Для этого:

  1. Вставьте подготовленную ранее microSD карту в плату ELTAY RM66 и подайте питание на плату. Дождитесь окончания загрузки системы.
  2. Подключитесь к плате по UART (через USB-UART преобразователь) или по SSH, чтобы получить доступ к командной строке системы.
  3. Скачайте нужный образ ОС в систему. Некоторые варианты скачивания:
    • скачать образ из сети Интернет.
    • подключиться к плате напрямую, например, с помощью программы fileZilla, и скопировать нужный образ с ПК в систему на плате.
    • если система на карте поддерживает работу с USB-Flash накопителями, можно перенести нужный образ с ПК в систему на плате через промежуточный накопитель.
  4. Убедитесь, что NVMe виден в системе:
    lsblk
    Диск может определиться как, например, /dev/nvme0n1.
  5. Запишите образ на диск, используя команду dd (образ должен быть предварительно разархивирован):
    sudo dd if=/путь/до/os.img of=/dev/nvme0n1 bs=4M status=progress
    sudo sync
    Здесь:
    • if=/путь/до/os.img - полный путь в системе до нужного образа.
    • of=/dev/nvme0n1 - устройство, соответствующее диску NVMe.
    • bs=4M - размер блока ввода/вывода (4 MiB).
    • status=progress - показывать прогресс записи.
  6. После окончания записи проверьте наличие разделов на диске. После записи на NVMe должны появиться как минимум два раздела (например, /dev/nvme0n1p1, /dev/nvme0n1p2 — загрузочный раздел и раздел с корневой файловой системой):
    sudo fdisk -l /dev/nvme0n1
  7. Выключите плату:
    sudo shutdown now
    или
    sudo poweroff
    и отключите питание.
  8. Выньте microSD карту и снова подайте питание на плату. Если загрузчик и образ ОС сконфигурированы правильно, система должна загрузиться с NVMe диска.

Очистка

Если в наличии есть microSD карта с валидным образом дистрибутива, можно запустить систему на плате с карты и очистить NVMe диск из этой системы.

  1. Вставьте подготовленную ранее microSD карту в плату ELTAY RM66 и подайте питание на плату. Дождитесь окончания загрузки системы.
  2. Подключитесь к плате по UART (через USB–UART преобразователь) или по SSH, чтобы получить доступ к командной строке.
  3. Убедитесь, что NVMe виден в системе и определите имя устройства:
    lsblk
    NVMe может определиться, например, как /dev/nvme0n1.
  4. Очистите сигнатуры файловых систем и таблицу разделов на NVMe:
    sudo wipefs -a /dev/nvme0n1
    После выполнения команды диск будет восприниматься как «пустой» и готовый к повторной записи образа. Если утилита wipefs недоступна (не установлен пакет util-linux), можно «занулить» начало диска командой:
    sudo dd if=/dev/zero of=/dev/nvme0n1 bs=4M count=64 status=progress
    sudo sync
    Эта команда перезапишет нулями первые 256 МБ диска, удалив возможные служебные области и разметку.
  5. Проверьте, что на диске отсутствует таблица разделов:
    sudo fdisk -l /dev/nvme0n1
    В выводе не должно быть действующих разделов (/dev/nvme0n1p1, /dev/nvme0n1p2 и т.п.).