LuckFox FAQ |
![]() |
Добавил(а) microsin | |||||||||||||||||||||||||||||||||
Решения различных вопросов, возникающих при работе с аппаратной платформой LuckFox (серия плат для разработки на основе процессоров Rockchip RV1103 и RV1106). Инструкция [1], под Ubuntu 24.04.3 LTS: 1. Установка зависимостей: $ sudo apt update
$ sudo apt-get install -y git ssh make gcc gcc-multilib g++-multilib module-assistant expect g++ gawk \
texinfo libssl-v bison flex fakeroot cmake unzip gperf autoconf device-tree-compiler libncurses5-dev \
pkg-config bc python-is-python3 passwd openssl openssh-server openssh-client vim file cpio rsync
2. Клонирование последнего SDK: $ git clone https://gitee.com/LuckfoxTECH/luckfox-pico.git
[Структура каталога SDK (luckfox-pico)] ├── build.sh -> project/build.sh ---- скрипт компиляции SDK Примечание (1): можно компилировать независимо. Директория хранилища образа: output/ [Файл конфигурации SDK] 1. Файлы конфигурации Luckfox-Pico series SDK находятся в папке project/cfg/BoardConfig_IPC. luckfox-pico$ ls project/cfg/BoardConfig_IPC -1BoardConfig-EMMC-Buildroot-RV1106_Luckfox_Pico_86Panel-IPC.mk
BoardConfig-EMMC-Buildroot-RV1106_Luckfox_Pico_86Panel_W-IPC.mk
BoardConfig-EMMC-Buildroot-RV1106_Luckfox_Pico_Pi-IPC.mk
BoardConfig-EMMC-Buildroot-RV1106_Luckfox_Pico_Pi_W-IPC.mk
BoardConfig-EMMC-Buildroot-RV1106_Luckfox_Pico_Ultra-IPC.mk
BoardConfig-EMMC-Buildroot-RV1106_Luckfox_Pico_Ultra_W-IPC.mk
BoardConfig-EMMC-Buildroot-RV1106_Luckfox_Pico_Zero-IPC.mk
BoardConfig-EMMC-Busybox-RV1106_Luckfox_Pico_Ultra-IPC_FASTBOOT.mk
BoardConfig-SD_CARD-Buildroot-RV1103_Luckfox_Pico-IPC.mk
BoardConfig-SD_CARD-Buildroot-RV1103_Luckfox_Pico_Mini-IPC.mk
BoardConfig-SD_CARD-Buildroot-RV1103_Luckfox_Pico_Plus-IPC.mk
BoardConfig-SD_CARD-Buildroot-RV1103_Luckfox_Pico_WebBee-IPC.mk
BoardConfig-SD_CARD-Buildroot-RV1106_Luckfox_Pico_Pro_Max-IPC.mk
BoardConfig-SPI_NAND-Buildroot-RV1103_Luckfox_Pico_Mini-IPC.mk
BoardConfig-SPI_NAND-Buildroot-RV1103_Luckfox_Pico_Plus-IPC.mk
BoardConfig-SPI_NAND-Buildroot-RV1103_Luckfox_Pico_WebBee-IPC.mk
BoardConfig-SPI_NAND-Buildroot-RV1106_Luckfox_Pico_Pro_Max-IPC.mk
BoardConfig-SPI_NAND-Busybox-RV1106_Luckfox_Pico_Pro_Max-IPC_FASTBOOT.mk
luckfox-buildroot-nocsi-oem-pre.sh
luckfox-buildroot-oem-pre.sh
luckfox-glibc-oem-pre.sh
luckfox-rv1106-tb-emmc-post.sh
luckfox-rv1106-tb-spi_nand-post.sh
luckfox-systemd-off-modem-post.sh
luckfox-userdata-pre.sh
2. Если взять в качестве примера конфиг BoardConfig-SD_CARD-Buildroot-RV1106_Luckfox_Pico_Pro_Max-IPC.mk, то можно рассмотреть его основные ключи. # Размер CMA в окружении Здесь: RK_BOOTARGS_CMA_SIZE: выделение памяти для камеры; если камера не используется, измените это значение на 1M. RK_KERNEL_DTS: указывает файл дерева устройств (device tree file, DTS). RK_BOOT_MEDIUM: указывает носитель загрузки (target boot medium), который может быть emmc (карта SD), sd_card (карта SD), spi_nor (SPI NOR Flash) или spi_nand (SPI NAND Flash). RK_PARTITION_CMD_IN_ENV: эта информация используется для конфигурирования таблицы разделов. Если вам нужно сопоставить дисковое пространство с SD-картой, то вы можете изменить раздел rootfs. LF_TARGET_ROOTFS: указывается корневая файловая система target (Root File System). LF_SUBMODULES_BY: указывается источник субмодулей. RK_BUILDROOT_DEFCONFIG: указывается конфигурационный файл Buildroot. [Компиляция образов] Из описания в предыдущем разделе можно увидеть, что образ Ubuntu поддерживает загрузку только с SD-карточки (SD card boot), в то время как образ Buildroot поддерживает как загрузку с TF-карты (TransFlash), так и загрузку из микросхемы памяти (SPI NAND FLASH boot). 1. Если вам нужно компилировать образ для системы Ubuntu и использовать gitee, то измените соответствующий mk-файл, задающий тип платы, чтобы отредактировать LF_SUBMODULES_BY для gitee, примерно так: LF_SUBMODULES_BY=gitee 2. Если вы хотите компилировать образ Buildroot для загрузки TF card boot, то измените соответствующий файл BoardConfig-EMMC-Ubuntu-xxx.mk, чтобы поменять LF_TARGET_ROOTFS на buildroot, примерно так: export LF_TARGET_ROOTFS=buildroot 3. Установите cross-compilation toolchain: $ cd {SDK_PATH}/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/
$ source env_install_toolchain.sh
4. Скомпилируйте все образы: $ cd luckfox-pico
Примечание: когда компилируется Ubuntu, используйте sudo, чтобы избежать файловых ошибок системы. Следующие инструкции не делают различий между этими двумя вариантами компиляции, но вы действуйте в соответствии с вашей ситуацией. [Компиляция по частям] Отдельная компиляция загрузчика U-Boot: $ ./build.sh clean uboot
$ ./build.sh uboot
Сгенерированные файлы образа: output/image/MiniLoaderAll.bin и output/image/uboot.img Отдельная компиляция ядра: $ ./build.sh clean kernel
$ ./build.sh kernel
Сгенерированный файл образа: output/image/boot.img Отдельная компиляция корневой файловой системы: $ ./build.sh clean rootfs
$ ./build.sh rootfs
Примечание: после компиляции используйте команду ./build.sh firmware для переупаковки. Отдельная компиляция media: $ ./build.sh clean media
$ ./build.sh media
Файлы сохраняются в директории: output/out/media_out. После компиляции используйте команду ./build.sh firmware для переупаковки. Отдельная компиляция образцовых приложений: $ ./build.sh clean app
$ ./build.sh app
Примечания: app зависит от media. После компиляции используйте команду ./build.sh firmware для переупаковки. Упаковка прошивки (firmware packaging): $ ./build.sh firmware
Компиляция busybox/buildroot: $ ./build.sh lunch
$ ./build.sh
Компиляция Ubuntu: $ sudo ./build.sh lunch
$ sudo ./build.sh
Это принципиально разные подходы к сборке операционной системы для вашего Luckfox Pico. Сравнительная таблица:
[Подробное объяснение] 1. Compile busybox/buildrootЭто стандартный способ для embedded-устройств. Buildroot — это инструмент для сборки, который: ls , cp , mv , vi , ifconfig и т.д.) одним бинарным файлом, экономя огромное количество места.Когда использовать: для готовых устройств, где важны размер, скорость загрузки и безопасность. 2. Compile ubuntuЭто способ для тех, кому нужна полноценная и привычная среда. Здесь скрипты не собирают систему с нуля, а кастомизируют и адаптируют готовые образы Ubuntu (чаще всего Ubuntu Base или Core) под архитектуру Luckfox Pico. В результате вы получаете почти ту же Ubuntu, что и на ПК, но собранную для ARM-процессора. В ней есть менеджер пакетов Почему нужен Когда использовать: Для разработки и отладки, когда вам нужен доступ к большому количеству инструментов и библиотек без необходимости их самостоятельной кросс-компиляции. [Итог: Какой вариант выбрать?] Если вы разработчик и хотите быстро протестировать код, использовать привычные инструменты ( На практике часто начинают с Ubuntu для удобства прототипирования, а для финальной версии продукта переходят на Buildroot, чтобы оптимизировать образ. Gitee Source (или Gitee источник) — это серверы-зеркала (репозитории) на платформе Gitee.com, которые хранят копии исходного кода и пакетов с других открытых платформ (в первую очередь — GitHub). Их основная цель — ускорение доступа к этим ресурсам для разработчиков внутри Китая. Если говорить проще, Gitee Source — это "зеркало" или "кэш" для исходного кода. Детальное объяснение:Для чего это нужно?
Как это работает?
Где вы с этим сталкиваетесь? Именно в сценариях, подобных вашему — при сборке прошивок для embedded-устройств (Luckfox Pico, Raspberry Pi, Orange Pi и т.д.) с помощью скриптов вроде
Пример из практики: допустим, скрипту сборки нужен исходный код ядра Linux ( Итог:Gitee Source — это техническое решение для ускорения и стабилизации разработки внутри Китая путем создания локальных копий международных opensource-репозиториев. Когда вы в процессе сборки видите упоминание В вашем случае, при выполнении TF card — это старое название карт microSD. По современным стандартам это одно и то же. Подробности см. в Википедии. В контексте одноплатных компьютеров LuckFox (и других подобных плат на процессорах Rockchip), термин `media` имеет очень конкретное и важное значение. `Media` здесь — это сокращение от "Multimedia" и относится к подсистеме обработки мультимедиа внутри процессора (SoC). Это целый набор аппаратных блоков (IP-ядер) и программного обеспечения, отвечающих за работу с видео и изображениями. Если говорить просто, `media` в LuckFox — это всё, что позволяет плате "видеть" и "показывать". [Что входит в подсистему Media?] Эта подсистема включает в себя два основных направления: 1. Видеозахват (Video Input - VI). Это аппаратные блоки и драйверы, отвечающие за приём видео от камер. ISP (Image Signal Processor): "Мозги" обработки изображения. Он преобразует сырые данные (raw data) с матрицы камеры в привычное нам изображение, выполняя: • Дебейеризацию (Demosaic) — преобразование сырых данных с Bayer-фильтра в цветное изображение. MIPI CSI (Camera Serial Interface): hardware-интерфейс, к которому физически подключаются современные камерные модули (например, ваши камеры LuckFox). VIPP (Video Input Post Processor): блок для дальнейшей обработки уже сформированного изображения (масштабирование, обрезка). 2. Видеовывод и Кодирование/Декодирование (Video Output & Codec). Это аппаратные блоки, отвечающие за сжатие, распаковку и вывод видео. VPU (Video Processing Unit): hardware-энкодер и декодер. Именно он позволяет кодировать (сжимать) видео с камеры в форматы **H.264** или **H.265 (HEVC)** с очень малым потреблением энергии процессора. Это критически важно для видеорегистраторов, камер наблюдения. VOP (Video Output Processor): блок, управляющий выводом изображения на дисплей (например, по HDMI или через LVDS-интерфейс). [Где вы встречаетесь с термином "media" в LuckFox?] 1. В Device Tree (`*.dts`): конфигурация всей подсистемы `media` (какие камеры подключены, их разрешение, режимы работы ISP) прописывается в файле дерева устройств. 2. В ядре Linux (`kernel/`): драйверы, находящиеся в разделах типа `drivers/media/platform/rockchip/isp/`, `.../mipi-csi/`, `.../rkcif/`. 3. В пользовательском пространстве: • Утилита `rkisp_demo`: позволяет тестировать и настраивать работу ISP (задавать параметры цветокоррекции, резкости и т.д.). Пример рабочего потока (pipeline) `media`: Камера (Sensor) -> MIPI CSI-2 Interface Итог: В контексте LuckFox термин `media` — это не абстрактное "медиа", а конкретное название мощной аппаратно-программной подсистемы, которая отвечает за: * Захват видео с камеры Именно эта подсистема является ключевым преимуществом процессоров Rockchip и делает платы LuckFox такими популярными для проектов компьютерного зрения, видеонаблюдения и потокового вещания. Buildroot — это не дистрибутив Linux (как Ubuntu или Debian), а система автоматизации сборки. Её главная задача — собрать всё необходимое для работы встроенной системы (embedded Linux) из исходного кода с помощью инструмента make. Представьте себе конструктор или конвейер, который по вашему заказу: • Скачивает исходные коды нужной версии ядра Linux, библиотек и программ. Главная философия Buildroot — создавать минималистичные и эффективные системы без лишнего софта, что идеально для устройств с ограниченными ресурсами, наподобие плат разработчика Luckfox Pico Mini. Buildroot предоставляется производителем (Luckfox) в составе Software Development Kit (SDK), и внутри этого SDK Buildroot является основным движком для сборки всей операционной системы. Когда вы скачиваете официальный SDK для Luckfox Pico, его структура обычно включает: buildroot/ — Сама система Buildroot с конфигурациями и настройками от Luckfox. Процесс разработки выглядит так: 1. Вы входите в директорию SDK. 2. Запускаете команду ./build.sh (это скрипт-обертка от Luckfox). Он скрипт запускает Buildroot, который, в свою очередь: - Компилирует кросс-компилятор (gcc) для архитектуры ARM. 3. В результате в папке output/ вы получаете файлы rootfs.img, kernel.img и другие, которые можно прошить на вашу плату с помощью инструмента RKDevTool. Buildroot для Luckfox Pico Mini используется по следующим оображениям: • Легковесность: итоговая система получается очень маленькой. Образ rootfs.img может весить всего несколько десятков мегабайт, что идеально для встроенных устройств. [Альтернативы Buildroot] Часто Buildroot сравнивают с Yocto Project. Оба решают одну задачу, но по-разному: Buildroot: Проще в освоении, быстрее собирает систему, идеален для относительно простых устройств и быстрого прототипирования (как в случае с Luckfox Pico). Yocto: Более мощный, гибкий и сложный инструмент, предназначенный для создания промышленных дистрибутивов с поддержкой множества пакетов и архитектур. Его кривая обучения значительно круче. Итог: Buildroot в контексте Luckfox Pico Mini — это "сердце" процесса сборки прошивки. Это инструмент, который превращает исходные коды ядра Linux, загрузчика U-Boot и сотен отдельных программ в единый, готовый к прошивке, минималистичный и оптимизированный образ операционной системы, который превращает голое "железо" Luckfox Pico в работающий мини-компьютер с Linux, способный выполнять ваши задачи. Без Buildroot вам пришлось бы вручную компилировать и компоновать все части ОС, что является невероятно сложной и трудоемкой задачей. Buildroot автоматизирует этот процесс до одной команды. Определить модель платы LuckFox Pico можно несколькими способами, от самого простого (визуальный осмотр) до более сложных (программных). [Способ 1: визуальный осмотр (cамый быстрый и простой)] Это первый и часто самый эффективный шаг. Посмотрите на вашу плату и найдите ключевые отличия. Ниже перечислены ключевые признаки для идентификации. 1. Размер и форма платы: LuckFox Pico: самая маленькая плата (примерно 20x20 мм), квадратной формы. Выглядит как "голый" модуль без портов. 2. Наличие и тип интерфейсов: Ethernet (Сетевой порт RJ45): есть только у LuckFox Pico Mini A и LuckFox Pico Mini B. У модели "A" один порт, у модели "B" два порта. 3. Количество и расположение контактов GPIO: LuckFox Pico: 24 контакта (2 ряда по 12 с каждой стороны). LuckFox Pico: LuckFox Pico Mini A/B: LuckFox Pico Plus: LuckFox Pico Pro/Max: LuckFox Pico Ultra/Ultra W: [Способ 2: определение через Linux (если плата уже прошита)] Если плата запускается, и у вас есть доступ к её командной строке (через UART, SSH или ADB []), то вы можете использовать несколько команд. 1. Посмотреть модель в `proc/device-tree/` (самый точный способ). Проприетарные параметры платы хранятся в Device Tree. Выполните команду: # cat /proc/device-tree/model
Результат будет прямо указывать на модель, например: `luckfox,pico` → LuckFox Pico 2. Посмотреть информацию о процессоре. Следующая команда покажет не модель платы, а модель чипа, это тоже может быть полезно. [root@luckfox ]# cat /proc/cpuinfo
processor : 0
model name : ARMv7 Processor rev 5 (v7l)
BogoMIPS : 26.08
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc07
CPU revision : 5
3. Проверить наличие определенных устройств (косвенный метод). Проверить сетевые интерфейсы позволяет команда `ifconfig -a` или `ip addr`: [root@luckfox ]# ifconfig -a
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:11948 errors:0 dropped:0 overruns:0 frame:0
TX packets:11948 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:884044 (863.3 KiB) TX bytes:884044 (863.3 KiB)
usb0 Link encap:Ethernet HWaddr 06:2C:70:05:43:2B
inet addr:172.32.0.93 Bcast:172.32.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2043 errors:0 dropped:1563 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:334536 (326.6 KiB) TX bytes:0 (0.0 B)
Если видите `eth0` и `eth1`, то скорее всего это Pico Mini B. Если видите только `eth0`, то скорее всего это Pico Mini A. Если Ethernet-интерфейсов нет вообще, то это базовая Pico (без Ethernet). Проверить наличие аудиоустройства: команда `ls /dev/snd/`. [root@luckfox ]# ls /dev/snd/
Наличие звуковых устройств характерно для моделей Plus и Pro. [Способ 3: по надписям на упаковке или плате] Производитель часто наносит шелкографию с названием модели на саму плату. Ищите надписи типа "Pico", "Pico Mini", "Pico Plus" или "Pico Pro". Коробка или антистатический пакет, в котором пришла плата, почти всегда имеют наклейку с точным указанием модели (например, "LuckFox Pico Mini B"). BusyBox — это единственный исполняемый файл, который заменяет собой сотни маленьких стандартных UNIX-утилит (команд), таких как: `ls`, `cp`, `mv`, `mkdir`, `rm` (команды работы с файлами) И также многие другие команды. Это видно по множеству символических ссылок с команд на единственный исполняемый файл busybox: [root@luckfox ]# ls -la /bin
total 5936
drwxrwxr-x 2 1000 1000 5768 Sep 16 2025 .
drwxr-xr-x 20 1000 1000 1584 Sep 16 2025 ..
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 arch -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 ash -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 base32 -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 base64 -> busybox
-rwxr-xr-x 1 1000 1000 990960 Sep 16 2025 bash
-rwxr-xr-x 1 1000 1000 857296 Sep 16 2025 busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 cat -> busybox
-rwxr-xr-x 1 1000 1000 9304 Sep 16 2025 chattr
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 chgrp -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 chmod -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 chown -> busybox
-rwxr-xr-x 1 1000 1000 1342 Sep 16 2025 compile_et
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 cp -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 cpio -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 date -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 dd -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 df -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 dmesg -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 dnsdomainname -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 dumpkmap -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 echo -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 egrep -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 false -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 fdflush -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 fgrep -> busybox
-rwxr-xr-x 1 1000 1000 3477 Sep 16 2025 gcore
-rwxr-xr-x 1 1000 1000 3486000 Sep 16 2025 gdb
-rwxr-xr-x 1 1000 1000 4045 Sep 16 2025 gdb-add-index
-rwxr-xr-x 1 1000 1000 253404 Sep 16 2025 gdbserver
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 getopt -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 grep -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 gunzip -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 gzip -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 hostname -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 kill -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 link -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 linux32 -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 linux64 -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 ln -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 login -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 ls -> busybox
-rwxr-xr-x 1 1000 1000 9304 Sep 16 2025 lsattr
-rwxrwxr-x 1 1000 1000 17900 Sep 16 2025 memtester
-rwxr-xr-x 1 1000 1000 1102 Sep 16 2025 mk_cmds
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 mkdir -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 mknod -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 mktemp -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 more -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 mount -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 mountpoint -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 mt -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 mv -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 netstat -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 nice -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 nuke -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 pidof -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 ping -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 pipe_progress -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 printenv -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 ps -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 pwd -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 resume -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 rm -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 rmdir -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 run-parts -> busybox
-rwxrwxr-x 1 1000 1000 88 Sep 16 2025 sdkinfo
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 sed -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 setarch -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 setpriv -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 setserial -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 sh -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 sleep -> busybox
-rwxr-xr-x 1 1000 1000 236644 Sep 16 2025 stressapptest
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 stty -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 su -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 sync -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 tar -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 touch -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 true -> busybox
-rwxr-xr-x 1 1000 1000 178592 Sep 16 2025 udevadm
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 umount -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 uname -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 usleep -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 vi -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 watch -> busybox
lrwxrwxrwx 1 1000 1000 7 Sep 16 2025 zcat -> busybox
Таким образом, какждая из этих команд представлена не отдельной программой, а всего лишь "ссылкой" на главный исполняемый файл `busybox`. Например, когда вывы вызываете команду `ls`, на самом деле система запускает `busybox ls`, и BusyBox "понимает", что нужно выполнить функцию `ls`. Почему BusyBox КРИТИЧЕСКИ важен для LuckFox Pico Mini? Именно здесь преимущества BusyBox раскрываются в полной мере: 1. Экономия места файловой системы (что крайне важно!): - LuckFox Pico Mini имеет ограниченный объем флеш-памяти (обычно 4GB или 16GB eMMC), часть которой занята ядром Linux и вашими приложениями. 2. Экономия оперативной памяти: запущенные программы занимают оперативную память (RAM). Так как BusyBox — это одна программа, а не множество, она использует меньше RAM при выполнении различных задач. 3. Упрощение сборки и управления: разработчикам встраиваемых устройств проще управлять одним пакетом (BusyBox), который предоставляет весь базовый функционал, вместо того чтобы отслеживать сотни отдельных мелких утилит. При сборке прошивки с помощью Buildroot (см. Q002) просто выбирается конфигурация BusyBox с нужным набором функций. 4. Скорость и эффективность: BusyBox оптимизирован для работы на системах с ограниченными ресурсами, таких как LuckFox Pico Mini. Его код написан с упором на минимализм и скорость. Итак, когда вы подключаетесь к своей плате через UART, SSH или ADB и попадаете в командную строку встраиваемой системы, практически с каждым вашим действием происходит взаимодейстие с BusyBox. Проверка, что вы используете BusyBox: введите любую команду с ключом --help, и вы увидите сигнатуру BusyBox. Например: .[root@luckfox ]# ls --help
BusyBox v1.36.1 (2025-09-16 13:42:36 MSK) multi-call binary.
Первая строка четко указывает, что это BusyBox. Можно посмотреть, какие функции встроены в BusyBox. Для этого выполните команду `busybox` без аргументов, и она выведет большой список всех поддерживаемых applets (маленьких приложений-функций). Таким образом, BusyBox в контексте LuckFox — это фундаментальный строительный блок встраиваемой операционной системы. Это минималистичная, невероятно эффективная и универсальная замена всем стандартным UNIX-инструментам, которая позволяет уместить мощную и функциональную командную среду Linux в несколько мегабайт, что идеально соответствует ограниченным ресурсам платы. Без BusyBox встроенные Linux-системы like LuckFox Pico Mini были бы гораздо больше, дороже и менее эффективны. На самой плате поддерживаются busybox, buildroot и Ubuntu 22.04. На машине разработчика для кросс-компиляции может использоваться Ubuntu 24.04 или Docker. Запустите SocToolKit с правами администратора, и затем установите TF-карту. Если она все еще не распознается, закройте ПО антивируса. Попробуйте также загрузить новую версию SocToolKit. Емкость TF-карты слишком маленькая; рекомендуется использовать 8GB или больше. При использовании SocToolKit для прошивки firmware платы Luckfox Pico, утилита показывает, что файл luckfox pico\image\media.img не существует. Причина в том, что Luckfox Pico поддерживает только лишь загрузку с TF-карты (TF card boot), и она должна быть записана с помощью картридера. Облачный диск не предоставляет образ системы buildroot, подходящий для загрузки с карты SD. Вам нужно самостоятельно скомпилировать его в соответствии с секцией SDK. Поскольку емкость SD-карт может быть разной, вам необходимо вручную подстроить емкость раздела. При установке TF-карты в плату Luckfox Pico и подключении к компьютеру SocToolKit показывает режим Maskrom, и программа не может быть прошита. Причина в том, что Luckfox Pico поддерживает только лишь загрузку с TF-карты (TF card boot). Используйте картридер для записи карты в соответствии с пошаговым руководством [], после чего установите карту в слот платы для запуска системы. Попытка подключения не удается с сообщением, что подключенная сторона не ответила должным образом через определенный промежуток времени, или из-за того, что подключенный узел не ответил. Для решения проблемы сконфигурируйте виртуальный сетевой интерфейс RNDIS (см. []). Проверьте совместимость уровней логики последовательного интерфейса, и не перепутаны ли прием с передачей (сигналы RX и TX). Luckfox-Pico работает с сигналами уровня логики 3.3V, и требует соответствующей установки уровней на модуле переходника USB - TTL UART. На официальном сайте заявлено, что у Luckfox-Pico и Luckfox-Pico-Mini/Plus установлено 64MB памяти, но фактический объем памяти около 34 MB. Вероятно проблема в том, что память выделена системой и работающим программным обеспечением. Пример вывода: [ 0.000000] Memory: 34328K/65536K available (3452K kernel code, 283K rwdata, 1644K rodata,
144K init, 127K bss, 6632K reserved, 24576K cma-reserved)
После подключения Luckfox-Pico-Plus/Pro/Max через последовательный порт устройство все время посылает сообщение "udhcpc: sending discover". Если сетевой кабель не подключен, то в лог будет выводиться сообщение "udhcpc: sending discover". Подключите сетевой кабель, или используйте команду kill для остановки процесса udhcpc. # ps | grep udhcpc
248 root 1196 S udhcpc -i eth0
311 root 1192 S grep udhcpc
# kill 248
udhcpc: received SIGTERM
Причина в том, что factory image предназначен главным образом для тестирования функционала GPIO. Вам необходимо самостоятельно прошить образ из онлайн-репозитория. Вы должны использовать инструментарий кросс-компиляции из SDK. После кросс-компиляции на хосте Ubuntu или виртуальной машине выгрузите результат компиляции на плату. При загрузке виртуальной машины VirtualBox появляется ошибка "VT-x is disabled in the BIOS for both all CPU modes (VERR_VMX_MSR_ALL_VMX_DI)". Причина ошибки в том, что не разрешена технология виртуализации CPU на материнской плате хоста. Выполните следующие шаги, основываясь на модели вашей материнской платы для доступа к BIOS компьютера: 1. Например, материнские платы ASUS для входа в BIOS используют клавишу F2 во время запуска. Программа VLC по умолчанию использует видеобуфер размером в 1 секунду (1000ms = 1s). Можно умеренно сократить время буферизации для улучшения real-time производительности, но слишком низкая задержка может привести к потере пакетов и заиканию. Не рекомендуется устанавливать размер буфера меньше 300ms. VBUS подключен ко входному напряжению интерфейса Type-C; VSYS это входное напряжение основной системы, с напряжением в диапазоне от 4.5V до 5.5V. $ sudo cp -r luckfox-pico/ ~/Luckfox-test/
$ cd ~/Luckfox-test/luckfox-pico/
$ ./build.sh lunch
ls: cannot access 'BoardConfig*.mk': No such file or directory
Возможная причина ошибки в том, что используется команда sudo в процессе копирования, поэтому могут быть измерены права доступа к файлам в SDK. Удалите и заново выполните копирование с правами обычного пользователя. При компиляции происходит ошибка загрузки модуля драйвера Linux, SDK не компилируется после clean. Случай 1: Решение: используйте ./build.sh для полной перекомпиляции. Случай 2: Решение: выполните команду: $ make ARCH=arm CROSS_COMPILE=/home/luckfox/Luckfox-Pico/luckfox-pico/tools/linux/toolchain/\
arm-rockchip830-linux-uclibcgnueabihf/bin/arm-rockchip830-linux-uclibcgnueabihf-
На платах LuckFox, включая Pico Mini, нет единой универсальной команды, которая бы просто вывела "список разрешенных периферийных устройств". Вместо этого используется комбинация команд для анализа Device Tree (дерева устройств) и состояния ядра Linux. Вот как это правильно сделать: 1. Основной способ: анализ Device Tree Device Tree (DT) — это структура данных, которая описывает аппаратное обеспечение платы ядру Linux. Именно в ней "разрешаются" или "запрещаются" периферийные устройства. Самая важная команда: # cat /sys/firmware/devicetree/base/compatible
Эта команда покажет модель вашей платы, которую ядро использует для загрузки правильной конфигурации. Для LuckFox Pico Mini вы увидите что-то вроде: $ adb shell
[root@luckfox ]# cat /sys/firmware/devicetree/base/compatible
rockchip,rv1103g-38x38-ipc-v10rockchip,rv1103
Чтобы посмотреть, какие устройства "включены" в текущей Device Tree, используйте: a) Просмотр всех узлов (devices) в дереве: [root@luckfox ]# ls /proc/device-tree/
#address-cells pwm@ff350010
#size-cells pwm@ff350020
acodec-sound pwm@ff350030
acodec@ff480000 pwm@ff360000
adc-keys pwm@ff360010
aliases pwm@ff360020
arm-debug@ff200000 pwm@ff360030
arm-pmu pwm@ff490000
chosen pwm@ff490010
clock-controller@ff3a0000 pwm@ff490020
clocks pwm@ff490030
compatible restart-poweroff
cpu0-opp-table rga@ff980000
cpuinfo rkcif-dvp
cpus rkcif-mipi-lvds
csi2-dphy-hw@ff3e8000 rkcif-mipi-lvds-sditf
csi2-dphy0 rkcif-mipi-lvds1
csi2-dphy1 rkcif@ffa10000
csi2-dphy2 rkdvbm@ffa70000
dht11_sensor rkisp-vir0
dma-controller@ff420000 rkisp@ffa00000
ethernet@ffa80000 rkvenc-pp@ffa60000
fiq-debugger rkvenc@ffa50000
i2c@ff310000 rng@ff448000
i2c@ff320000 rockchip-amp
i2c@ff450000 rockchip-suspend
i2c@ff460000 rockchip-system-monitor
i2c@ff470000 rve@ffad0000
i2s@ffae0000 saradc@ff3c0000
interrupt-controller@ff1f0000 serial-number
interrupt-parent serial@ff4a0000
leds serial@ff4b0000
memory serial@ff4c0000
mipi-csi2-hw@ffa20000 serial@ff4d0000
mipi-csi2-hw@ffa30000 serial@ff4e0000
mipi0-csi2 serial@ff4f0000
mmc@ff9a0000 spi@ff500000
mmc@ffa90000 spi@ff510000
mmc@ffaa0000 spi@ffac0000
model sram@ff6c0000
mpp-srv syscon@ff000000
mpp-vcodec syscon@ff388000
name syscon@ff538000
npu@ff660000 thermal-zones
otp@ff3d0000 timer
pinctrl tsadc@ff3c8000
power-management@ff300000 usb2-phy@ff3e0000
psci usbdrd
pvtm@ff240000 vcc-1v8
pvtm@ff390000 vcc-3v3
pwm@ff350000 vdd-arm
Это покажет список всех узлов высокого уровня (например, `gpio@fdd60000`, `serial@ff9c0000`). Это не названия периферии в привычном виде, а технические имена. b) Поиск по ключевым словам (самый практичный метод). Используйте `grep` для поиска упоминаний конкретных интерфейсов в смонтированном дереве устройств. Для UART (последовательный порт): # find /proc/device-tree/ -name "*uart*" | head -5
Для I2C: # find /proc/device-tree/ -name "*i2c*" | head -5
Для SPI: # find /proc/device-tree/ -name "*spi*" | head -5
Для PWM: # find /proc/device-tree/ -name "*pwm*" | head -5
Если команда возвращает пути к файлам (например, `/proc/device-tree/pwm@fdd70000`), значит, этот контроллер активирован в Device Tree. 2. Проверка, загрузились ли драйверы устройств. Даже если устройство разрешено в DT, стоит проверить, увидело ли его ядро и загрузило ли драйвер. a) Просмотр списка зарегистрированных устройств: # ls /sys/devices/platform/
Здесь вы увидите список платформенных устройств, которые были обнаружены ядром. b) Проверка конкретных интерфейсов. I2C: посмотреть, какие I2C адаптеры (шины) доступны в системе. # i2cdetect -l
SPI: проверить, есть ли устройства SPI. # ls /dev/spidev*
PWM: посмотреть, экспортированы ли каналы PWM. # ls /sys/class/pwm/
GPIO: управление GPIO происходит через sysfs. # ls /sys/class/gpio/
UART: последовательные порты. # ls /dev/ttyS*
3. Прямой просмотр исходного файла Device Tree (если есть доступ). Самый полный, но и самый сложный способ — посмотреть исходный файл *.dts. Его обычно нет на самой плате, но он есть в SDK на вашем компьютере. Путь в SDK, на примере платы LuckFox Pico Mini: $ find . -name rv1103g-luckfox-pico-mini.dts
./sysdrv/source/kernel/arch/arm/boot/dts/rv1103g-luckfox-pico-mini.dts
В этом файле вы можете найти все блоки вида: &pwm0 { Строка `status = "okay";` означает, что устройство разрешено. Если стоит `status = "disabled";` — устройство отключено. Краткий итог для быстрой проверки на плате LuckFox Pico Mini: 1. UART: `ls /dev/ttyS*` (должен быть `ttyS0` и другие). Вывод: не существует команды наподобие `list-peripherals`. Чтобы узнать список разрешенных устройств, нужно анализировать дерево устройств через `/proc/device-tree/` и проверять состояние драйверов в `/sys/` и `/dev/`. Предположим, что на плате LuckFox Pico Mini есть директория /oem/spitest, и в ней вы тестируете программу в исполняемом файл spi, который для обновления нужно каждый раз перезаписывать. Тогда скрипт компиляции может выглядеть примерно так: #!/bin/bash В этом примере команда adb shell "rm /oem/spitest/spi" удалит исполняемый файл на плате LuckFox Pico Mini, а команда adb push ./spi /oem/spitest запишет его обновленную версию. Можно посмотреть и отфильтровать лог компиляции, но ИМХО самый простой и надежный способ - внести в файл *.dts намеренную ошибку. Можно временно переименовать измененный вами файл, либо вставить в него что-то недопустимое, например: ... Выполните команду ./build.sh, и если этот исправленный файл компилируется, то скрипт выдаст ошибку: ...
Error: /home/user/luckfox-pico/sysdrv/source/kernel/arch/arm/boot/dts/rv1103g-luckfox-pico-mini.dts:
61.1-45 syntax error
FATAL ERROR: Unable to parse input tree
make[4]: *** [scripts/Makefile.lib:381: arch/arm/boot/dts/rv1103g-luckfox-pico-mini.dtb] Error 1
make[3]: *** [/home/user/luckfox-pico/sysdrv/source/kernel/Makefile:1464: rv1103g-luckfox-pico-mini.dtb]
Error 2
make[3]: *** Waiting for unfinished jobs....
CALL /home/user/luckfox-pico/sysdrv/source/kernel/scripts/atomic/check-atomics.sh
CALL /home/user/luckfox-pico/sysdrv/source/kernel/scripts/checksyscalls.sh
make[2]: *** [arch/arm/Makefile:375: rv1103g-luckfox-pico-mini.img] Error 2
make[2]: Leaving directory '/home/user/luckfox-pico/sysdrv/source/objs_kernel'
make[1]: *** [Makefile:185: __sub-make] Error 2
make[1]: Leaving directory '/home/user/luckfox-pico/sysdrv/source/kernel'
make: *** [Makefile:486: kernel] Error 1
make: Leaving directory '/home/user/luckfox-pico/sysdrv'
[Ссылки] 1. SDK Environment Deployment(on the PC) site:wiki.luckfox.com. |