Всі команди перевірені на Luckfox Pico Pro (RV1106, Buildroot). Команди для хоста позначені 🖥️, для плати (SSH) — 📡.
1. Пошук і перегляд DTS файлів
Знайти DTS для своєї плати
|
1 2 3 4 5 6 |
# 🖥️ Всі DTS файли для SoC find ~/luckfox-pico/sysdrv/source/kernel -name "*.dts" | grep rv1106 # 🖥️ Всі DTSI (includes) ls ~/luckfox-pico/sysdrv/source/kernel/arch/arm/boot/dts/rv1106*.dtsi |
Подивитись ланцюжок includes
|
1 2 3 |
# 🖥️ Які файли включає DTS плати head -20 ~/luckfox-pico/sysdrv/source/kernel/arch/arm/boot/dts/rv1106g-luckfox-pico-pro-max.dts |
Типовий ланцюжок:
|
1 2 3 4 5 |
rv1106g-luckfox-pico-pro-max.dts ├── rv1106.dtsi (SoC — всі контролери) ├── rv1106-evb.dtsi (EVB базове) └── rv1106-...-ipc.dtsi (специфіка плати) |
Шукати конкретну периферію
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# 🖥️ Знайти опис UART в базовому DTSI grep -A 15 "uart2:" ~/luckfox-pico/sysdrv/source/kernel/arch/arm/boot/dts/rv1106.dtsi # 🖥️ Знайти опис I2C grep -A 15 "i2c3:" ~/luckfox-pico/sysdrv/source/kernel/arch/arm/boot/dts/rv1106.dtsi # 🖥️ Знайти pinctrl для UART grep -A 8 "uart3m1_xfer" ~/luckfox-pico/sysdrv/source/kernel/arch/arm/boot/dts/rv1106-pinctrl.dtsi # 🖥️ Знайти де вмикається периферія (status = okay) grep -rn "uart3" ~/luckfox-pico/sysdrv/source/kernel/arch/arm/boot/dts/rv1106*.dts* |
2. Runtime — що бачить ядро
/proc/device-tree/ — живе дерево
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# 📡 Модель плати cat /proc/device-tree/model # 📡 Всі ноди верхнього рівня ls /proc/device-tree/ # 📡 Знайти serial ноди ls /proc/device-tree/ | grep serial # 📡 Aliases — нумерація пристроїв ls /proc/device-tree/aliases/ cat /proc/device-tree/aliases/serial2 # → /serial@ff4c0000 cat /proc/device-tree/aliases/serial3 # → /serial@ff4d0000 # 📡 Статус конкретного пристрою cat /proc/device-tree/serial@ff4d0000/status # disabled cat /proc/device-tree/serial@ff4c0000/compatible # rockchip,rv1106-uart... # 📡 Всі властивості ноди ls /proc/device-tree/serial@ff4c0000/ # 📡 Bootargs — командний рядок ядра cat /proc/device-tree/chosen/bootargs # 📡 FIQ debugger (Rockchip консоль) cat /proc/device-tree/fiq-debugger/compatible cat /proc/device-tree/fiq-debugger/status |
⚠ Важливо: /proc/device-tree/ — це результат компіляції DTB. Якщо змінили DTS але не перезібрали і не прошили — тут буде старе.
Перевірка пристроїв
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 📡 Які serial порти доступні ls /dev/ttyS* 2>/dev/null # стандартні UART ls /dev/ttyFIQ* 2>/dev/null # FIQ debugger (Rockchip) ls /dev/ttyUSB* 2>/dev/null # USB-serial # 📡 Яке ядро і DTS завантажено uname -r dmesg | grep -i "machine\|model\|device.tree" # 📡 Які драйвери прив'язались до пристроїв dmesg | grep -i "uart\|serial\|ttyS" dmesg | grep -i "i2c\|spi" |
3. Компіляція і декомпіляція DTB
dtc — Device Tree Compiler
|
1 2 3 4 5 6 7 8 9 10 11 |
# 📡 Версія dtc (на Luckfox є dtc 1.6.1) dtc --version # 📡 Декомпілювати DTB → читабельний DTS dtc -I dtb -O dts /tmp/.fdt.dtb -o /tmp/decompiled.dts 2>/dev/null # 📡 Декомпілювати і знайти конкретну ноду dtc -I dtb -O dts /tmp/.fdt.dtb 2>/dev/null | grep -A 10 "serial@ff4d0000" # 🖥️ Скомпілювати DTS → DTB (зазвичай через make, але можна вручну) dtc -I dts -O dtb -o output.dtb input.dts |
⚠ /tmp/.fdt.dtb на Luckfox — це DTB який ядро завантажило. Декомпіляція показує фінальний результат після всіх includes.
Збірка ядра з DTS через Luckfox SDK
|
1 2 3 4 5 6 7 8 9 10 |
# 🖥️ Збірка тільки ядра (включає DTS компіляцію) cd ~/luckfox-pico ./build.sh kernel # 🖥️ Або повна збірка ./build.sh # 🖥️ Результат: DTB у складі boot image ls output/image/boot.img |
4. Модифікація DTS
Увімкнути периферію
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// В файлі плати (rv1106g-luckfox-pico-pro-max.dts): // Увімкнути UART3 &uart3 { status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&uart3m1_xfer>; }; // Увімкнути I2C3 &i2c3 { status = "okay"; clock-frequency = <100000>; }; // Додати I2C пристрій &i2c3 { status = "okay"; bmp180@77 { compatible = "bosch,bmp180"; reg = <0x77>; }; }; |
Процес: змінити DTS → перезібрати → прошити
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# 🖥️ 1. Редагувати DTS nano ~/luckfox-pico/sysdrv/source/kernel/arch/arm/boot/dts/rv1106g-luckfox-pico-pro-max.dts # 🖥️ 2. Перезібрати ядро (включає компіляцію DTS) cd ~/luckfox-pico ./build.sh kernel # 🖥️ 3. Зібрати повний образ ./build.sh # 🖥️ 4. Прошити # Варіант A: повний образ через Maskrom sudo upgrade_tool uf output/image/update.img # Варіант B: тільки boot через flashcp (якщо система жива) scp output/image/boot.img root@192.168.1.125:/tmp/ ssh root@192.168.1.125 "flashcp /tmp/boot.img /dev/mtd3" |
⚠ DTB входить до складу boot.img, тому для оновлення DTS потрібно перепрошити boot розділ (mtd3), а не повний update.img.
5. Прошивка: MTD, flashcp, upgrade_tool
Що таке MTD
MTD (Memory Technology Devices) — підсистема Linux для роботи з flash пам’яттю напряму (NOR/NAND). На відміну від HDD/SSD (блочні пристрої /dev/sda), flash вимагає стирання перед записом і має обмежену кількість перезаписів.
На STM32 ви робили st-flash write firmware.bin 0x08000000 — писали прямо у Flash. MTD — та ж ідея, тільки через Linux підсистему з іменованими розділами.
Розмітка MTD на Luckfox Pico Pro
|
1 2 3 |
# 📡 Подивитись розмітку cat /proc/mtd |
|
1 2 3 4 5 6 7 8 |
mtd0 env 256K — U-Boot змінні середовища mtd1 idblock 256K — Rockchip ID block mtd2 uboot 512K — U-Boot bootloader mtd3 boot 4M — ядро + DTB (Device Tree) mtd4 oem 30M — OEM дані (Rockchip демо, бібліотеки) mtd5 userdata 10M — користувацькі дані mtd6 rootfs 210M — файлова система (UBIFS) |
⚠ Ця розмітка задається в bootargs: mtdparts=spi-nand0:256K(env),256K@256K(idblock),...
Прошивка по мережі (SSH)
|
1 2 3 4 5 6 7 |
# 🖥️ Прошити тільки boot (ядро + DTB) — після зміни DTS scp -o PubkeyAuthentication=no output/image/boot.img root@192.168.1.125:/tmp/ ssh -o PubkeyAuthentication=no root@192.168.1.125 "flashcp /tmp/boot.img /dev/mtd3 && reboot" # 🖥️ Прошити тільки U-Boot — після зміни конфігурації U-Boot scp -o PubkeyAuthentication=no output/image/uboot.img root@192.168.1.125:/tmp/ ssh -o PubkeyAuthentication=no root@192.168.1.125 "flashcp /tmp/uboot.img /dev/mtd2 && reboot" |
Прошивка по USB (Maskrom)
|
1 2 3 |
# 🖥️ Повний образ — перезаписує все (env, uboot, boot, rootfs) sudo upgrade_tool uf output/image/update.img |
⚠ Maskrom режим: затисни BOOT кнопку → підключи USB → відпусти. Використовуй коли SSH недоступний або зламав boot/rootfs.
Збірка окремих компонентів
|
1 2 3 4 5 6 7 8 |
# 🖥️ Тільки ядро (включає компіляцію DTS → DTB) cd ~/luckfox-pico && ./build.sh kernel # 🖥️ Тільки U-Boot cd ~/luckfox-pico && ./build.sh uboot # 🖥️ Повна збірка cd ~/luckfox-pico && ./build.sh |
6. Робота з Serial портами (UART)
Налаштування порту
|
1 2 3 4 5 6 7 8 9 |
# 📡 Подивитись поточні налаштування stty -F /dev/ttyS3 # 📡 Налаштувати: 9600 baud, raw режим, без echo stty -F /dev/ttyS3 9600 raw -echo # 📡 Інші baud rates stty -F /dev/ttyS3 115200 raw -echo |
Відправка і прийом даних
|
1 2 3 4 5 6 7 8 9 |
# 📡 Відправити рядок (з \r для STM32) echo -ne "on\r" > /dev/ttyS3 # 📡 Слухати відповіді (Ctrl+C для виходу) cat /dev/ttyS3 # 📡 Слухати у фоні + відправити cat /dev/ttyS3 & echo -ne "on\r" > /dev/ttyS3 |
Інтерактивний термінал
|
1 2 3 4 |
# 📡 microcom — як minicom, тільки простіший microcom -s 9600 /dev/ttyS3 # Вихід: Ctrl+X |
Перевірка доступних портів
|
1 2 |
# 📡 Всі serial пристрої ls /dev/ttyS* /dev/ttyFIQ* /dev/ttyUSB* 2>/dev/null |
Карта UART на Luckfox Pico Pro (з Pi Pico Sim800 платою)
|
1 2 3 4 5 |
/dev/ttyS1 → UART1 → піни 21-22 → конектор U3 → STM32 / периферія /dev/ttyS3 → UART3 → піни 19-20 → конектор U4 → STM32 / периферія /dev/ttyS4 → UART4 → піни 6-7 → гребінка U11 → STM32 / периферія ttyFIQ0 → UART2 → піни 1-2 → консоль (FIQ debugger) |
7. Діагностика проблем
Пристрій не з’являється в /dev/
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# 📡 Перевірити статус в DTS cat /proc/device-tree/serial@ff4d0000/status # Якщо "disabled" — DTS не змінився або не прошили # 📡 Чи є драйвер dmesg | grep "ff4d0000" # Якщо нічого — драйвер не знайшов compatible # 📡 Чи є модуль ядра lsmod | grep serial # Якщо вбудований в ядро — не буде в lsmod # 📡 Перевірити compatible cat /proc/device-tree/serial@ff4d0000/compatible # Має збігатись з тим що підтримує драйвер |
Перевірка pinctrl
|
1 2 3 4 5 6 7 8 |
# 📡 Які pinctrl групи зареєстровані ls /sys/kernel/debug/pinctrl/ 2>/dev/null # 📡 Pinmux стан (не завжди доступно) cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins 2>/dev/null # 📡 GPIO стан cat /sys/kernel/debug/gpio 2>/dev/null |
Порівняти DTS з runtime
|
1 2 3 4 5 6 |
# 📡 Декомпілювати поточний DTB і порівняти з вихідним DTS dtc -I dtb -O dts /tmp/.fdt.dtb 2>/dev/null > /tmp/runtime.dts # 🖥️ Скопіювати на хост і порівняти scp root@192.168.1.125:/tmp/runtime.dts ./ diff runtime.dts ~/luckfox-pico/sysdrv/source/kernel/arch/arm/boot/dts/rv1106g-luckfox-pico-pro-max.dts |
8. Корисні шаблони grep
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# 🖥️ Всі пристрої з status = "okay" в DTS плати grep -B2 "okay" rv1106g-luckfox-pico-pro-max.dts # 🖥️ Всі compatible рядки в SoC DTSI grep "compatible" rv1106.dtsi # 🖥️ Всі базові адреси периферії grep "reg = <" rv1106.dtsi | head -20 # 🖥️ Всі переривання grep "interrupts = <" rv1106.dtsi # 🖥️ Pinctrl варіанти для конкретного UART grep -B1 -A8 "uart[0-9]m" rv1106-pinctrl.dtsi # 📡 Всі serial aliases for i in 0 1 2 3 4 5; do echo -n "serial$i = " cat /proc/device-tree/aliases/serial$i 2>/dev/null || echo "(немає)" echo done |
9. Швидка довідка: адреси периферії RV1106
| Периферія | Адреса | Розмір | IRQ (GIC SPI) |
|---|---|---|---|
| uart0 | 0xff4a0000 | 0x100 | 25 |
| uart1 | 0xff4b0000 | 0x100 | 26 |
| uart2 | 0xff4c0000 | 0x100 | 27 |
| uart3 | 0xff4d0000 | 0x100 | 28 |
| uart4 | 0xff4e0000 | 0x100 | 29 |
| uart5 | 0xff4f0000 | 0x100 | 30 |
| i2c0 | 0xff310000 | 0x1000 | 18 |
| i2c1 | 0xff320000 | 0x1000 | 19 |
| i2c3 | 0xff460000 | 0x1000 | 21 |
| i2c4 | 0xff470000 | 0x1000 | 22 |
| spi0 | 0xff500000 | — | — |
| spi1 | 0xff510000 | — | — |
⚠ Адреси UART йдуть з кроком 0x10000 (64KB блоки). I2C — теж 0x10000.
10. Посилання
- devicetree.org/specifications — офіційна специфікація
- Bootlin Device Tree training — безкоштовні слайди + лабораторні
- Luckfox Wiki — документація і pinout
- Luckfox SDK DTS:
sysdrv/source/kernel/arch/arm/boot/dts/rv1106*.dts* - Runtime DTS:
/proc/device-tree/на живій системі
Шпаргалка створена на основі реальної роботи з Luckfox Pico Pro (RV1106G) Серія “STM32 з нуля без HAL” · github.com/pipicosim800-maker/stm32F103