📟 Luckfox Pico Pro — Довідник

Живий документ. Оновлюється з кожним етапом проєкту.
Проєкт: DIY IP-камера на embedded Linux


🔧 Характеристики плати

Параметр Значення
Плата Luckfox Pico Pro
Чіп Rockchip RV1106
CPU ARM Cortex-A7 @ 1.2GHz
Co-CPU RISC-V MCU (швидкий старт, low-power)
RAM 128MB DDR2 (доступно ~54MB)
Storage 256MB SPI NAND
Мережа 10/100M Ethernet + USB RNDIS
OS Buildroot Linux (kernel 5.10.110)
Архітектура armv7l (не riscv64!)

🔌 Підключення до комп’ютера

Перше підключення (USB RNDIS)

Плата підключається через USB і прикидається Ethernet адаптером.
Linux бачить її як інтерфейс enx... — назва генерується з MAC адреси.

Крок 1 — знайти інтерфейс:

Крок 2 — призначити IP на комп’ютері:

Крок 3 — знайти IP плати:


Рівень 1 — скрипт автопідключення

Запускати вручну кожного разу — нудно. Скрипт робить все автоматично.

Зберегти як ~/luckfox-connect.sh:


Рівень 2 — udev правило (TODO)

Система сама призначає IP як тільки бачить плату через USB.
Налаштовується через /etc/udev/rules.d/ — додати пізніше.


Рівень 3 — статичний IP на самій платі ✅

Найкраще рішення — плата завжди має однаковий IP незалежно від комп’ютера.

❌ Що не спрацювало — /etc/network/interfaces:

pre-up killall udhcpc — логічно мало б вбивати udhcpc перед підняттям інтерфейсу,
але на Buildroot udhcpc стартує незалежно від ifup і просто приходить знову після хука.
В результаті — після ребуту плата отримує .101 від роутера замість нашого .102.

✅ Правильне рішення — S99staticip:
Створюємо init.d скрипт з найвищим пріоритетом (S99 = виконується останнім).
Він приходить вже після udhcpc і мовчки переписує IP.

ℹ️ sleep 5 — чекаємо поки udhcpc завершить роботу, тільки потім перезаписуємо IP.
Так, це брутально. Але це єдиний надійний спосіб на Buildroot Luckfox.

Перевірити після ребуту:

⚠️ Важливо: після reboot якщо кабель не підключений фізично під час старту —
S99staticip все одно виставить IP, але NO-CARRIER може заважати маршрутизації.
Якщо щось не так: ifdown eth0 && ifup eth0

Перевірити що udhcpc не заважає:

ℹ️ Чому плата зникла зі списку DHCP клієнтів роутера?
Зі статичним IP плата більше не робить DHCP запит.
Роутер бачить трафік але не реєструє в таблиці клієнтів — це нормально.

🩺 Діагностика мережі — алгоритм

Щось не працює? Йди по кроках зверху вниз — знайдеш де обривається.

Крок 1 — фізика

⚠️ Перший підозрюваний завжди кабель — пошевели роз’єми!

Крок 2 — IP адреса

Крок 3 — таблиця маршрутів

Крок 4 — роутер

Крок 5 — інтернет

Крок 6 — сервіс

Гарячі команди — швидка діагностика

⚠️ Too many authentication failures — ssh-agent перебирає всі ключі.
Фікс: -o PubkeyAuthentication=no


🌐 Мережа на платі


💻 Корисні команди всередині плати

Система

Процеси і модулі

Відео (V4L2)


🐍 Python на платі

Запуск HTTP сервера

⚠️ OSError: [Errno 97] Address family not supported — це IPv6 проблема.
Фікс: додати -b 0.0.0.0


📁 Копіювання файлів на плату


🧩 Модулі ядра (lsmod)

Модуль Призначення
video_rkisp Rockchip ISP — обробка зображення
video_rkcif Rockchip Camera Input Framework
mpp_vcodec Hardware відео енкодер/декодер
rknpu Neural Processing Unit (0.5 TOPS)
rga3 2D графічний прискорювач
rockit Rockchip media framework
os04a10 Драйвер камери OS04A10 (CSI)

ℹ️ UVC (USB камери) — не вбудований в цю прошивку.
Рідна камера: MIS5001 5MP або SC3336 3MP


📷 Камера

Параметр Значення
Модель MIS5001 5MP Camera (A)
Інтерфейс MIPI CSI
Сумісність Luckfox Pico Pro/Max/Ultra (RV1106)
Статус ✅ Підключена, працює

Перевірити що камера розпізнана:

RTSP стрім

ℹ️ Нормальна затримка RTSP/H.264 — 1-3 секунди. Якщо 10+ сек — ffplay буферизує занадто агресивно, допомагає -fflags nobuffer -flags low_delay -framedrop.


🔍 Діагностика камери / RTSP — алгоритм

“Все працювало, перезавантажив — і стрім зник”. Йди по кроках:

Крок 1 — rkipc запущений?

Крок 2 — порт 554 слухається?

Крок 3 — порт доступний ззовні?

Крок 4 — запустити rkipc вручну і дивитись лог

Нормальний вивід містить:

Крок 5 — перевірити стрім

Відомі проблеми з RTSP

Проблема Причина Фікс
VLC: “Failed to setup RTSP session” VLC 3.0.16 несумісний з rkipc RTSP Використовувати ffplay
Порт 554 не слухається відразу rkipc ініціалізується ~15 сек Зачекати і перевірити ще раз
rkipc запущений але стрім не йде Гонка старту — rkipc піднявся до того як ISP готовий killall rkipc і запустити знову
Recv failure: Вузол розірвав з'єднання curl не підтримує RTSP Використовувати ffplay або telnet для перевірки

🐹 Go — крос-компіляція для Luckfox

✅ Перевірено: Hello World + HTTP сервер + JSON API успішно запущені на платі

Чому Go а не Node.js?

Node.js Go
Runtime розмір ~50MB 0 (статичний бінарник)
RAM при старті ~40MB ~2MB
Крос-компіляція складна одна команда
Є в Buildroot ні не потрібен

ℹ️ statically linked — Go компілює всі залежності в один бінарник.
Копіюєш один файл на плату і він просто працює. Без apt install, без .so бібліотек.


Крок 1 — Підготовка Dockerfile

Dockerfile.go-luckfox:


Крок 2 — Запуск контейнера


Крок 3 — Крос-компіляція

ℹ️ GOOS=linux — цільова ОС
ℹ️ GOARCH=arm — архітектура ARM
ℹ️ GOARM=7 — версія ARM (Cortex-A7 = ARMv7)


Крок 4 — Копіювання і запуск на платі


API endpoints

Endpoint Опис
GET / список endpoints
GET /api/stats системні метрики (JSON)
GET /metrics raw /proc дані

/api/stats — приклад відповіді

ℹ️ Access-Control-Allow-Origin: * — CORS увімкнено, дашборд може робити fetch()


Підключення дашборду до API


🔤 Мови програмування — шпаргалка

Мова Крос-компіляція Для чого
Python не потрібна (вже є) прототип, скрипти
Go GOOS=linux GOARCH=arm GOARM=7 HTTP сервер, стрімер
C/C++ arm-linux-gnueabihf-gcc системні речі, v4l2
Rust --target armv7-unknown-linux-musleabihf безпека пам’яті

ℹ️ Node.js — не рекомендується: runtime ~50MB, RAM всього ~33MB вільно


🗺️ Roadmap проєкту

  • [x] Етап 1 — Flash Linux, SSH, мережа
  • [x] Go Hello World — крос-компіляція через Docker ✅
  • [x] Go HTTP сервер — /api/stats JSON API ✅
  • [ ] Підключити дашборд до реального API
  • [ ] Етап 2 — підключення камери MIS5001
  • [ ] Етап 3 — MJPEG стрім (Python → Go)
  • [ ] Етап 4 — Watchdog, autostart, init.d

🐛 Відомі проблеми і фікси

Проблема Причина Фікс
Too many authentication failures ssh-agent перебирає ключі -o PubkeyAuthentication=no
OSError: [Errno 97] в http.server немає IPv6 на ядрі додати -b 0.0.0.0
SCP не копіює файл з кирилицею unicode в шляху скопіювати в /tmp спочатку
Дефолтний IP 172.32.0.70 не пінгується плата бере інший IP сканувати через nmap
loadavg постійно ~6.x NPU/RISC-V MCU kernel threads чекають на hardware норма для цієї прошивки, %CPU 0% — система вільна
Samba запущена з коробки Luckfox прошивка включає smbd/nmbd killall smbd nmbd — звільняє ~3MB RAM
http-server VSZ 523MB Go runtime резервує віртуальний адресний простір норма, реальна RAM нормальна
Після ребуту eth0 без IP ifup спрацьовує до підняття PHY link (NO-CARRIER) підключити кабель до ребуту, або ifdown eth0 && ifup eth0
udhcpc перебиває статичний IP після ребуту Buildroot запускає udhcpc до будь-якого нашого конфігу, /etc/network/interfaces не допомагає Використати /etc/init.d/S99staticip — скрипт з sleep 5 + ifconfig що приходить після udhcpc
Плата зникла з DHCP списку роутера статичний IP не реєструється в DHCP таблиці норма, трафік ходить, просто не видно в списку
Нестабільний ping (53ms, 715ms, 759ms) поганий контакт кабелю або роз’єму замінити кабель або пошевелити роз’єми
netstat -tlnp не працює BusyBox версія не підтримує -p використовувати netstat -tln без -p
Камера не розпізнається, rkipc.ini не з’являється прошивка не містить IQ файл для сенсора перепрошити новим образом з підтримкою потрібного сенсора
SSH: “WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED” після перепрошивки плата генерує нові SSH ключі ssh-keygen -f ~/.ssh/known_hosts -R "172.32.0.93"
Два IP одночасно після ifup udhcpc встиг отримати IP до pre-up killall kill $(pgrep udhcpc) + ip addr del 192.168.1.101/24 dev eth0 + ifdown eth0 && ifup eth0

🔄 Перепрошивка (Linux)

Потрібно коли: камера не підтримується, треба оновити систему, або щось зламалось.

Що знадобиться

Ресурс Посилання
Образи прошивок Google Drive Luckfox → buildroot → Flash
upgrade_tool для Linux wiki.luckfox.com → розділ “Image Flashing (Linux Environment)”

⚠️ upgrade_tool офіційно підтримує тільки Ubuntu 22.04 x86_64

Крок 1 — встановити upgrade_tool

Крок 2 — скачати образ

Йдемо на Google Drive (посилання вище):

  • firmware → buildroot → Flash → Luckfox_Pico_Pro_Flash_XXXXXX.zip
  • Розпакувати — всередині має бути update.img

Крок 3 — перевірити підтримку сенсора (до прошивки)

Назва файлу не каже про сенсори — дізнатись можна тільки після прошивки:

Крок 4 — увійти в Maskrom режим

  1. Затиснути кнопку BOOT на платі
  2. Підключити USB до комп’ютера
  3. Відпустити BOOT

Якщо бачимо Rockchip — плата в Maskrom, можна прошивати.

Крок 5 — прошити

Займає ~2 хвилини. Після завершення плата сама перезавантажується.

Крок 6 — після прошивки

Перевірка RTSP стріму

ℹ️ Норма затримки — 1-3 сек. -fflags nobuffer -flags low_delay -framedrop зменшує з 12 сек до 1-2.


Оновлено: прошивка + камера MIS5001 + RTSP стрім працює Наступне: autostart http-server + інтеграція стріму в дашборд

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *