LuckFox Lyra Plus RK3506G2 buildroot开发工作流
本文涵盖从零搭建 Docker 开发环境、编译 Buildroot 系统、烧录、以太网直连 SSH 的完整流程。阅读本文后你将得到一个可以通过 SSH 登录的 Linux 系统。进阶内容(AMP 多核异构部署)见 AMP 开发记录。
环境
| 项目 | 说明 |
|---|---|
| 开发板 | Luckfox Lyra Plus (RK3506G2) |
| 宿主机 | Ubuntu x86_64 + Docker |
| SDK | Luckfox_Lyra_SDK_250815 (kernel 6.1, buildroot 2024.02) |
| 连接 | USB-TTL × 1 + 以太网直连 + USB-C |
硬件需求:一条网线、一条全功能 USB-C 数据线、一个 USB-TTL 串口模块(CH340 等)。
第一步:构建 Docker 镜像
cd ~/Code/LuckFox
docker build -t luckfox-sdk:22.04 .
Dockerfile
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
git ssh make gcc libssl-dev \
liblz4-tool expect expect-dev g++ patchelf chrpath gawk texinfo \
diffstat binfmt-support qemu-user-static live-build bison flex fakeroot \
cmake gcc-multilib g++-multilib unzip device-tree-compiler ncurses-dev \
libgucharmap-2-90-dev bzip2 expat gpgv2 cpp-aarch64-linux-gnu libgmp-dev \
libmpc-dev bc python-is-python3 python2 curl file rsync bsdmainutils scons \
wget vim \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
RUN ln -sf /usr/bin/python2 /usr/bin/python
ARG UID=1000
ARG GID=1000
RUN groupadd -g ${GID} luckfox && \
useradd -m -u ${UID} -g ${GID} -s /bin/bash luckfox
WORKDIR /workspace
USER luckfox
CMD ["/bin/bash"]
要点:python → python2(SDK repo 工具依赖),容器 UID 与宿主机一致避免权限问题。
第二步:解压 SDK 并同步
mkdir -p ~/Code/LuckFox/sdk/Lyra-sdk
cd ~/Code/LuckFox/sdk/Lyra-sdk
tar xf ~/Downloads/Luckfox_Lyra_SDK_250815.tar.gz -C .
# repo sync(宿主机 Python 太高导致 repo 无法运行,用 Docker)
docker run -it --rm \
-v ~/Code/LuckFox/sdk:/workspace \
-u $(id -u):$(id -g) \
luckfox-sdk:22.04 \
bash -c "cd /workspace/Lyra-sdk && .repo/repo/repo sync -l"
第三步:准备离线源码包(GFW 必需)
tar xf ~/Downloads/dl.tar.gz -C ~/Code/LuckFox/sdk/Lyra-sdk/buildroot/
第四步:配置板卡
docker run -it --rm -v ~/Code/LuckFox/sdk:/workspace luckfox-sdk:22.04
cd /workspace/Lyra-sdk
./build.sh lunch # [1] RK3506G_Luckfox_Lyra_Plus → [0] Buildroot
# 关闭网络检查(GFW 环境)
./build.sh menuconfig
# Others configurations → [ ] RK_NETWORK_CHECK → 取消勾选 → Save
第五步:编译
./build.sh # 全量
./build.sh uboot # U-Boot
./build.sh kernel # Kernel → boot.img
./build.sh rootfs # rootfs
./build.sh firmware # 打包
# overlay 修改后必须:
./build.sh clean-rootfs && ./build.sh rootfs && ./build.sh firmware
第六步:烧录
- 开发板断电
- 按住 BOOT 键不放
- USB-C 连接 PC 和开发板 OTG 口
- 松开 BOOT 键,进入 Rockchip Loader 模式
cd ~/Code/LuckFox/sdk/Lyra-sdk
sudo ./rkflash.sh update
烧录完成后断电重启。
第七步:以太网直连 SSH
7.1 快速验证
开发板上电后,手动设置静态 IP 确认硬件链路正常:
# 开发板串口
ifconfig eth0 192.168.1.100 netmask 255.255.255.0 up
# PC 端
sudo ip addr add 192.168.1.200/24 dev enp3s0
sudo ip link set enp3s0 up
ping 192.168.1.100 # 能通就说明硬件 OK
ssh root@192.168.1.100 # 密码 luckfox
验证通过后再做下面的固化方案,避免硬件问题和配置问题混在一起。
7.2 固化方案(重启仍生效)
只需两步:
① 新建 overlay 脚本 custom/root/etc/init.d/S65static-ip:
#!/bin/sh
case "$1" in
start)
echo "Waiting for eth0..."
for i in $(seq 1 10); do
ip link show eth0 >/dev/null 2>&1 && break
sleep 1
done
echo "Setting static IP for eth0: 192.168.1.100"
ip addr replace 192.168.1.100/24 dev eth0
ip link set eth0 up
;;
stop)
ip link set eth0 down
;;
esac
chmod +x custom/root/etc/init.d/S65static-ip
② 修改 SDK 源文件 device/rockchip/common/overlays/rootfs/luckfox-lyra/S60netdevice:删除第 31 行 udhcpc -i eth0 > /tmp/eth0_udhcpc.log 2>&1 &。
然后重编烧录:
./build.sh clean-rootfs && ./build.sh rootfs && ./build.sh firmware
sudo ./rkflash.sh update
7.3 PC 端一键连接
~/Code/LuckFox/ssh_connect.sh:
#!/bin/bash
BOARD_IP="192.168.1.100"
PC_IP="192.168.1.200"
PC_IFACE="enp3s0"
echo "[INFO] Setting IP $PC_IP on $PC_IFACE..."
sudo ip addr replace "$PC_IP/24" dev "$PC_IFACE"
sudo ip link set "$PC_IFACE" up
echo "[INFO] Checking connection to $BOARD_IP..."
if ping -c 1 -W 2 "$BOARD_IP" > /dev/null 2>&1; then
echo "[INFO] Board reachable, connecting..."
ssh "root@$BOARD_IP"
else
echo "[ERROR] Cannot reach $BOARD_IP. Check cable and board power."
exit 1
fi
第八步:Overlay 机制与排错
8.1 原理
build.sh rootfs 末尾,90-overlay.sh 按字母序遍历 overlays/rootfs/ 目录:
① custom → install.sh → rsync custom/root/ → rootfs/
② luckfox-lyra → install.sh → install_sysv_service S60netdevice → 覆盖 ①
custom:用户 overlay,rsync 整个root/目录到 rootfsluckfox-lyra:板级 overlay,显式安装特定的 init 脚本,在 custom 之后执行- 快捷路径
sdk/Lyra-sdk/overlay/是custom/root/的符号链接 - 新建脚本需要
chmod +x
关键结论:同名文件会被
luckfox-lyra覆盖,所以改custom里的S60netdevice无效,必须改luckfox-lyra下的源文件。
8.2 踩坑:为什么简单的 S99 脚本不管用
现象:最初用 S99static-ip(ifconfig eth0 192.168.1.100),boot log 显示执行了,但登录后 ip a 没有 IP。
排查:ps | grep dhcp 发现 udhcpc -i eth0 在后台运行。udhcpc 是 DHCP 客户端,直连无 DHCP 服务器时持续 retry,每次 deconfig 接口冲掉静态 IP。
谁启动的? S60netdevice 硬编码了 udhcpc -i eth0 &,且整个 start() 函数后台运行(start &),时序如下:
S60netdevice → 设 MAC、后台启动 udhcpc -i eth0 &
S65static-ip → ip addr replace 192.168.1.100 ✅
↓ 几秒后
udhcpc retry → deconfig eth0 → IP 被清除 ❌
为什么 overlay 覆盖无效? 8.1 节解释过:luckfox-lyra 在 custom 之后执行,覆盖同名文件。
解决方案:删 luckfox-lyra/S60netdevice 源码中的 udhcpc 行 + 用 S65(S60 之后执行)直接 ip addr replace。
⚠️
repo sync可能还原luckfox-lyra/S60netdevice,记得重新删那一行。
8.3 其他常见问题
| 问题 | 原因 | 解决 |
|---|---|---|
| Docker registry 不可达 | GFW | 换 docker.m.daocloud.io |
| repo sync 失败 | Host Python 太新 | Docker 内用 Python 2 |
| Buildroot 网络不可达 | GFW | 下载 dl.tar.gz 离线包 |
| host-m4 configure 失败 | 增量编译残留 | rm -rf buildroot/output/ |
| overlay 未生效 | 未 clean-rootfs | ./build.sh clean-rootfs |
| overlay 脚本 Permission denied | 未加执行权限 | chmod +x |
8.4 分区布局(非 AMP)
| mtd | 偏移 | 内容 |
|---|---|---|
| u-boot | 0x2000 | MiniLoaderAll.bin + uboot.img |
| boot | 0x4000 | boot.img (kernel + DTB) |
| rootfs | 0x10000 | rootfs.img (UBIFS) |
下一步:AMP 多核异构部署 — Linux + RT-Thread 双系统运行,RPMSG 跨核通信。

浙公网安备 33010602011771号