RK3506-G2 开箱使用体验
前言
使用淘宝买的99元,制作的瑞芯微RK3506-G2开发板,分享开箱使用体验以及一些及简单的编译、操作等。
如果对开发板感兴趣,可以直接淘宝搜rk3506,下单学习一下,也不是很贵。性价比还是挺高的。
一、开箱
下图是拿到手的样子。
二、上电
拿到手的开发板出厂自带镜像,上电后,电源灯常亮,有LED蓝灯闪烁
我们可以看到使用buildroot 文件系统,使用内核版本为6.1.99
三、开发环境
对SDK进行编译,编译完成后下载到
使用环境为ubuntu 22,编译在docker中进行
检查相关依赖,安装编译所需的软件包,中间可能会停止,选择相应时区,选择Asia-Shanghai
即可。
sudo apt-get update && sudo apt-get install git ssh make gcc libssl-dev \
liblz4-tool expect expect-dev g++ patchelf chrpath gawk texinfo chrpath \
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 file rsync bsdmainutils
检查相关版本是否符合编译要求
- python3 >=3.6
- make >=4.2
- lz4 版本1.9.3
四、编译SDK
根据提供资料,解压SDK,目录如下。
我们可以根据docs目录中提供的文档资料来进行学习如何编译
我们查看官方文档了解如何编译。
进入SDK/docs/cn
目录,查看Rockchip_Developer_Guide_Linux_Software_CN.pdf
文档,这个文档是Rockchip Linux 软件开发指南
我们主要查看第8章,SDK编译说明
SDK编译命令
SDK可以通过make
或./build.sh
后加参数进行相关配置和编译。官方文档说可以参考device/rockchip/common/README.md
文档,如下。
建议第一次编译首先,清除SDK相关编译产物,确保编译成功。
# Rockchip Linux SDKRockchip Linux SDK for the Rockchip SOC boards- wiki <http://opensource.rock-chips.com/wiki_Main_Page>.## Quick Start1. Check supported targets:~ $ make help
2. Choose SDK's defconfig:~ $ make rockchip_defconfig
3. Change SDK's configs:~ $ make menuconfig~ $ make savedefconfig
4. Run "make" to build the images, logs saved at "output/log/"
5. Flash the generated "output/firmware/update.img" to your device
6. Boot your device and enjoy it
我们一步一步,根据文档来操作
make help
,其下有几个选项。如下:
menuconfig
,一般是相关配置选项,比如内核配置、文件系统配置图形化配置等。oldconfig
,一般是syncconfig
,保存相关配置olddefconfig
,设置相关配置项为默认值savedefconfig
,保存配置clean
,清除配置
itrunk@ubuntu22:/work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk$ make helpmenuconfig - interactive curses-based configuratoroldconfig - resolve any unresolved symbols in .configsyncconfig - Same as oldconfig, but quietly, additionally update depsolddefconfig - Same as syncconfig but sets new symbols to their default valuesavedefconfig - Save current config to $RK_CHIP_DIR/$RK_DEFCONFIG (minimal config)clean - Cleanup
make
实际上就是./build.sh
,可以通过./build.sh help
查看相关命令。在实际开发过程中,还是./build.sh <target>
命令用的比较多,所以建议使用这个命令进行开发。当然,这个看个人习惯。
可以看到有几个defcongfig,这是板级配置,即我们第一次开发时,需要配置板级配置选项,来告诉SDK我要编译这个配置项的内容。我们需要关心的只有rockchip_rk3506_g_mini_defconfig
,这个是这个开发板对应的板级配置。
itrunk@ubuntu22:/work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk$ ./build.sh help############### Rockchip Linux SDK ###############Manifest: rk3506_linux6.1_release_v1.1.0_20241128.xmlLog colors: message notice warning error fatalUsage: build.sh [OPTIONS]
Available options:
chip[:<chip>[:<config>]] choose chip
defconfig[:<config>] choose defconfig*_defconfig switch to specified defconfigavailable defconfigs:rockchip_rk3502_robot_defconfigrockchip_rk3506_b_evb1_defconfigrockchip_rk3506_g_demo_defconfigrockchip_rk3506_g_evb1_amp_defconfigrockchip_rk3506_g_evb1_defconfigrockchip_rk3506_g_evb1_smp_defconfigrockchip_rk3506_g_mini_defconfigolddefconfig resolve any unresolved symbols in .configsavedefconfig save current config to defconfigmenuconfig interactive curses-based configurator
config modify SDK defconfig
print-parts print partitions
list-parts alias of print-parts
mod-parts interactive partition table modify
edit-parts edit raw partitions
new-parts:<offset>:<name>:<size>... re-create partitions
insert-part:<idx>:<name>[:<size>] insert partition
del-part:(<idx>|<name>) delete partition
move-part:(<idx>|<name>):<idx> move partition
rename-part:(<idx>|<name>):<name> rename partition
resize-part:(<idx>|<name>):<size> resize partition
misc pack misc image
kernel-6.1[:dry-run] build kernel 6.1
kernel[:dry-run] build kernel
recovery-kernel[:dry-run] build kernel for recovery
kernel-modules[:<dst dir>:dry-run] build kernel modules
modules[:<dst dir>:dry-run] alias of kernel-modules
linux-headers[:<arch>:dry-run] build linux-headers
kernel-config[:dry-run] modify kernel defconfig
kconfig[:dry-run] alias of kernel-config
kernel-make[:<arg1>:<arg2>] run kernel make
kmake[:<arg1>:<arg2>] alias of kernel-make
wifibt[:<dst dir>[:<chip>]] build Wifi/BT
amp build and pack amp system
buildroot-config[:<config>] modify buildroot defconfig
bconfig[:<config>] alias of buildroot-config
buildroot-make[:<arg1>:<arg2>] run buildroot make
bmake[:<arg1>:<arg2>] alias of buildroot-make
rootfs[:<rootfs type>] build default rootfs
buildroot build buildroot rootfs
yocto build yocto rootfs
debian build debian rootfs
recovery build recovery
security-createkeys create keys for security
security-misc build misc with system encryption key
security-ramboot build security ramboot
security-system build security system
loader[:dry-run] build loader (u-boot)
uboot[:dry-run] build u-boot
u-boot[:dry-run] alias of uboot
uefi[:dry-run] build uefi
extra-parts pack extra partition images
firmware pack and check firmwares
edit-package-file edit package-file
edit-ota-package-file edit package-file for OTA
updateimg build update image
ota-updateimg build update image for OTA
all build images
release[:<subdir>[:<name>]] release images and build info
all-release[:<subdir>[:<name>]] build and release images
shell setup a shell for developing
buildroot-shell setup a shell for buildroot developing
bshell alias of buildroot-shell
cleanall cleanup all
clean-amp cleanup amp
clean-config cleanup config
clean-extra-parts cleanup extra-parts
clean-firmware cleanup firmware
clean-kernel cleanup kernel
clean-loader cleanup loader
clean-misc cleanup misc
clean-recovery cleanup recovery
clean-rootfs cleanup rootfs
clean-security cleanup security
clean-updateimg cleanup updateimg
post-rootfs <rootfs dir> trigger post-rootfs hook scripts
help display this
单独编译uboot、Kernel、Buildroot
单独编译uboot。使用./build.sh uboot
单独编译Kernel。使用./build.sh kernel
单独编译buildroot。使用./build.sh rootfs
SDK编译步骤
经过上述描述,我们知道了,SDK编译的编译命令。下面我们使用命令来编译SDK。
1- 选择板级配置
第一步,选择板级配置。使用make +板级配置
或使用./build.sh lunch
来选择板级配置文件。我们上面SDK编译命令章节知道了开发板的板级配置是rockchip_rk3506_g_mini_defconfig
。下面展示两种命令如何配置,只需要配置一种即可。
使用make rockchip_rk3506_g_mini_defconfig
命令
itrunk@ubuntu22:/work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk$ make rockchip_rk3506_g_mini_defconfig
mkdir -p /work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/output/kconf/lxdialog
make CC="gcc" HOSTCC="gcc" \obj=/work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/output/kconf -C /work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/device/rockchip/common/kconfig -f Makefile.br conf
make[1]: Entering directory '/work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/device/rockchip/common/kconfig'
gcc -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -DCURSES_LOC="<ncurses.h>" -DNCURSES_WIDECHAR=1 -DLOCALE -I/work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/output/kconf -DCONFIG_=\"\" -MM *.c > /work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/output/kconf/.depend 2>/dev/null || :
gcc -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -DCURSES_LOC="<ncurses.h>" -DNCURSES_WIDECHAR=1 -DLOCALE -I/work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/output/kconf -DCONFIG_=\"\" -c conf.c -o /work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/output/kconf/conf.o
gcc -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -DCURSES_LOC="<ncurses.h>" -DNCURSES_WIDECHAR=1 -DLOCALE -I/work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/output/kconf -DCONFIG_=\"\" -I. -c /work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/output/kconf/zconf.tab.c -o /work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/output/kconf/zconf.tab.o
gcc -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=600 -DCURSES_LOC="<ncurses.h>" -DNCURSES_WIDECHAR=1 -DLOCALE -I/work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/output/kconf -DCONFIG_=\"\" /work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/output/kconf/conf.o /work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/output/kconf/zconf.tab.o -o /work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/output/kconf/conf
rm /work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/output/kconf/zconf.tab.c
make[1]: Leaving directory '/work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/device/rockchip/common/kconfig'
#
# configuration written to /work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/output/.config
#
使用./build.sh lunch
itrunk@ubuntu22:/work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk$ ./build.sh lunch############### Rockchip Linux SDK ###############Manifest: rk3506_linux6.1_release_v1.1.0_20241128.xmlLog colors: message notice warning error fatalLog saved at /work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/output/sessions/2025-07-30_11-00-25
Pick a defconfig:1. rockchip_rk3502_robot_defconfig
2. rockchip_rk3506_b_evb1_defconfig
3. rockchip_rk3506_g_demo_defconfig
4. rockchip_rk3506_g_evb1_amp_defconfig
5. rockchip_rk3506_g_evb1_defconfig
6. rockchip_rk3506_g_evb1_smp_defconfig
7. rockchip_rk3506_g_mini_defconfig
Which would you like? [1]: 7
Switching to defconfig: /work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/device/rockchip/.chip/rockchip_rk3506_g_mini_defconfig
#
# configuration written to /work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/output/.config
#
Using current kernel version(6.1)
2- 配置menuconfig
使用make menuconig
即可进入配置页面。如下图,可以根据自己的需求来编译。
键盘上下左右移动,Enter选中
选择完成后,就可以直接save退出,这样更改的配置项就会保存到配置文件中。
默认配置文件会放在output/.config
文件中,这是一个临时文件。
3- 开始编译
使用./build.sh cleanall
清除之前编译的产物。
可以使用两种方式,不同就是第一种方式编译完成后,需要执行命令打包
1- ./build.sh all
编译uboot、kernel、Rootfs、Recovery。 编译完成后使用./build.sh ./mkfirmware.sh
打包固件
2- 直接./build.sh
,这种方式和上面基本相同,不同的就是这个命令不需要额外执行命令打包,生成的是update.img,编译信息生成到out目录下。
我直接使用./build.sh
进行编译。
itrunk@ubuntu22:/work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk$ ./build.sh############### Rockchip Linux SDK ###############Manifest: rk3506_linux6.1_release_v1.1.0_20241128.xmlLog colors: message notice warning error fatalLog saved at /work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/output/sessions/2025-07-30_11-17-30
Using last kernel version(6.1)......................................
接下来就是漫长的编译过程,等待ing。
中间报错过一次,由于是docker环境,重新安装一下curl就行了,最好再使用一下魔法上网,ubuntu设置网络代理。
sudo apt install curl
/work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/device/rockchip/common/scripts/check-network.sh: line 7: curl: command not foundYour network is not able to access sources.buildroot.net!
Please retry later (it could be down for a while) or setup a VPN to bypass the GFW.
Unset RK_NETWORK_CHECK in the SDK config to continue...ERROR: Running /work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/device/rockchip/common/scripts/mk-rootfs.sh - build_buildroot failed!
ERROR: exit code 1 from line 16:"$RK_SCRIPTS_DIR/mk-buildroot.sh" $RK_BUILDROOT_CFG "$IMAGE_DIR"
ERROR: call stack:mk-rootfs.sh: build_buildroot(16)mk-rootfs.sh: build_hook(297)mk-rootfs.sh: main(326)
ERROR: Running /work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/device/rockchip/common/build-hooks/99-all.sh - build_all failed!
ERROR: exit code 1 from line 21:"$RK_SCRIPTS_DIR/mk-rootfs.sh"
ERROR: call stack:99-all.sh: build_all(21)99-all.sh: build_hook(136)build-helper: try_func(63)build-helper: try_hook(96)build-helper: source(165)99-all.sh: main(147)
ERROR: Running /work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/device/rockchip/common/build-hooks/99-all.sh - try_func build_hook all failed!
ERROR: exit code 1 from line 67:build_hook
ERROR: call stack:build-helper: try_func(67)build-helper: try_hook(96)build-helper: source(165)99-all.sh: main(147)
编译完成后,相关的固件在SDK/rockdev
目录下。
itrunk@ubuntu22:/work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk$ ls
app buildroot build.sh common device docs external hal kernel kernel-6.1 Makefile output prebuilts README.md rkbin rkflash.sh rockdev rtos tools u-boot yocto
itrunk@ubuntu22:/work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk$ cd rockdev
itrunk@ubuntu22:/work/prj/rk3506/rk3506_mini/rk3506_linux6.1_sdk/rockdev$ ls
boot.img MiniLoaderAll.bin misc.img oem.img parameter.txt recovery.img rootfs.img uboot.img update.img userdata.img
对应的文件描述:
- boot.img Kernel镜像
- MiniLoaderAll.bin 引导文件
- misc.img 来自rockchip的自定义文件
- oem.img oem分区的固件镜像
- parameter.txt 分区表
- recovery.img recovery镜像
- rootfs.img 文件系统镜像
- uboot.img uboot镜像
- update.img 总镜像,完整的系统镜像
- userdata.img 用户空间的镜像
五、SDK固件升级
可以参考瑞芯微,开发工具使用说明文档进行操作。
瑞芯微芯片烧写模式
rockchip芯片,有几种运行模式,Maskrom、Loader、Recovery、Normal Boot模式。如下:
Maskrom
,Flash 在未烧录固件时,芯片会引导进入 Maskrom 模式,可以进行初次固件的烧写。开发调试过程中若遇到 Loader 无法正常启动的情况,也可进入 Maskrom模式烧写固件。Loader
,Loader 模式下,可以进行固件的烧写、升级。可以通过工具单独烧写某一个分区镜像文件,方便调试。Recovery
,系统引导recovery启动,主要是升级、恢复出厂等操作。Normal Boot
,系统引导rootfs启动,加载rootfs,大多数的开发都是在这个模式。
使用RKDevTool工具烧写固件
我们首先需要下载更新固件所需的软件。根据开发板提供的资料,下载开发工具。具体驱动安装,软件解压过程就不说了,直接上步骤。
使用瑞芯微开发工具RKDevTool
进行烧写固件。这个工具使用前需要安装ADB驱动等。
进入烧录模式
我们烧写固件时,开发板需要进入MASKROM
模式或者LOADER
模式,加载相应的路径,点击执行完成烧写。
如何进入烧写模式。官方文档记录了几种方式:
- 未烧录过固件,上电,进入 Maskrom 模式。
- 烧录过固件,按住 recovery 按键上电或复位,系统将进入 Loader 固件烧写模式。
- 烧录过固件,按住 Maskrom 按键上电或复位,系统将进入 MaskRom 固件烧写模式。
- 烧录过固件,上电或复位后开发板正常进入系统后,瑞芯微开发工具上显示“发现一个 ADB设备”或“发现一个 MSC 设备”,然后点击工具上的按钮“切换”,进入 Loader 模式。
- 烧录过固件,可在串口或 ADB 命令行模式下,输入 reboot loader 命令,进入 Loader 模式。
导入烧录配置
引导板子进入LOADER模式,这个开发板,长按LOADER
,复位重启。系统进入LOADER
模式,可以看到第一次解压后进入,下方的配置很奇怪,我们需要导入配置。
第一步,右键清空所有项。
导入烧录配置。烧录配置可以在tools/windows/RKDevTool/RKDevTool_Release
中找到。我们选择rk3506-config.cfg
配置导入
导入成功后,如下图。
选择自己固件所在的位置,按下执行开始烧录。
烧录成功如下图。
六、读取开发板信息
1- 查看文件系统大小
文件系统好像是只读的,/oem 可读写。
root@rk3506-buildroot:/# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 38.9M 38.9M 0 100% /
devtmpfs 52.2M 0 52.2M 0% /dev
tmpfs 52.3M 124.0K 52.2M 0% /var/log
tmpfs 52.3M 8.0K 52.3M 0% /tmp
tmpfs 52.3M 164.0K 52.1M 0% /run
tmpfs 52.3M 0 52.3M 0% /dev/shm
/dev/ubi6_0 9.9M 160.0K 9.7M 2% /oem
/dev/ubi7_0 7.9M 384.0K 7.6M 5% /userdata
2- 查看内存占用情况
这个RK3506-G2 内存还是太小了,128M,不过价格摆在那,性价比还是很高的。
root@rk3506-buildroot:/userdata# free -htotal used free shared buff/cache available
Mem: 104.6M 62.9M 9.0M 300.0K 32.6M 36.2M
Swap: 0 0 0
3- 查看CPU信息
这款芯片是三核A7的
root@rk3506-buildroot:/proc# cat cpuinfo
processor : 0
model name : ARMv7 Processor rev 5 (v7l)
BogoMIPS : 40.00
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 : 5processor : 1
model name : ARMv7 Processor rev 5 (v7l)
BogoMIPS : 40.00
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 : 5processor : 2
model name : ARMv7 Processor rev 5 (v7l)
BogoMIPS : 40.00
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 : 5Hardware : Generic DT based system
Revision : 0000
Serial : b610aaef9f86385d
4- 查看内核版本
内核版本6.1,文件系统使用buildroot文件系统
root@rk3506-buildroot:/# uname -a
Linux rk3506-buildroot 6.1.99 #1 SMP PREEMPT Wed Jul 30 11:28:29 CST 2025 armv7l GNU/Linux
吐槽
CSDN的markdown编辑器还是不太行,导入md文件,还是会出现乱码等现象。