
1. 2800页手册和220集视频凭什么值得你花时间做嵌入式开发这些年手里的开发板从MCS-51一路玩到Cortex-A系教程资源见过不少但迅为这套RK3568开发板配套的2800页用户手册加220集视频是我见过的同类资料里最舍得“上量”的。很多新入门或者刚转到瑞芯微平台的朋友可能对这个数字没有概念一般市面上的开发板手册能做到500页已经算用心了2800页意味着里面除了硬件参数和接口定义之外大量的篇幅是在讲系统移植、驱动适配、外设调试和实战问题基本可以当工具书来查。再加上220集视频逐个知识点串讲整个学习曲线被拉得非常平缓。这块板子能做的事情很明确跑Linux、跑Android、做边缘计算、做人机交互终端、做工业控制面板、做视觉识别的前端采集设备。RK3568这颗芯片的最大好处就是接口覆盖面足够广从MIPI-CSI摄像头到BT1120视频输出从PCIe到SATA到千兆网口都带再加上四核Cortex-A55的性能兜底让它天然适合做“什么都要会一点”的开发载体。这套资料的主要价值不是让你抄完一个例程就完事而是让你在看手册、跟视频、动手改代码的过程中真正形成一套“拿到一个芯片平台能自己玩得转”的能力。无论你是刚接触ARM Linux开发的学生、要从单片机转应用处理器开发的工程师还是公司里需要快速评估RK3568做量产方案的负责人员这套“板子手册视频”的组合都是效率很高的一条路径。但我必须提前说一句大实话资料多不等于你不用动脑子。这2800页如果一页一页翻你会被淹没在细节里如果只看视频不动手你会发现眼睛会了手还没会。真正高效的做法是把它当作“字典实验指导书”来使用——遇到问题时知道去哪里查跟着有目的的例程一步步操作这才是我这篇内容想帮你解决的核心问题如何把这套资源用出最大价值而不只是收藏吃灰。2. 动手之前先搞懂RK3568这颗芯片和迅为的板级设计2.1 RK3568的核心特性和选型逻辑瑞芯微RK3568是这几年中端工业/嵌入式市场里很“能打”的一颗SoC。它采用四核Cortex-A55架构最高频率2.0GHz虽然性能上限不算炸裂但胜在均衡。GPU是ARM Mali-G52支持OpenGL ES 1.1/2.0/3.2、Vulkan 1.1应付常规的QT界面、Android UI、基础图像处理完全够用。NPU算力0.8TOPS可以做轻量级的人工智能推理比如人脸检测、物体分类、关键词唤醒。媒体方面它支持4K H.264/H.265硬解码和1080P H.264编码这在做视频播放盒、录播设备、工业视觉后处理时是很大的加分项。不过我最看重的不是纸面参数而是接口的丰富程度。RK3568集成了PCIe 3.0也有2.0配置、SATA 3.0、双千兆GMAC可配置一个或两个网口、USB3.0/USB2.0、多路UART/SPI/I2C以及用于屏幕显示和摄像头的多路VideoPortVP0/VP1/VP2/VP3可以灵活接HDMI、eDP、LVDS、MIPI DSI和BT1120。也就是说这块板子做正经商用产品时的外设覆盖度很高不太需要额外扩展一堆桥接芯片。散热方面A55的功耗控制比较好如果只是跑Linux轻负载应用被动散热甚至都可以接受但如果你要长时间跑高负载任务最好还是上一块散热片这个后面我会展开说。2.2 迅为这套开发板的硬件构成迅为RK3568开发板的核心板采用SO-DIMM 314P封装整板集成了RK3568芯片、DDR可选2GB/4GB/8GB、eMMC可选16GB/32GB/64GB以及电源管理与加密芯片。底板上面的资源非常齐全HDMI 2.0输出、双千兆网口、USB3.0、USB2.0、UART调试串口、耳机麦克风接口、MIPI DSI/LVDS/EDP显示接口、MIPI CSI摄像头接口、BT1120接口、PCIe插槽、SATA接口、4G模块接口、WiFi/BT模块接口另外还有几十路GPIO。对于做产品原型验证来说这个配置已经堆得非常满了。有一个硬件细节我一定要提醒拿到板子第一件事是看一眼拨码开关或跳线设置确认启动介质选择正确。迅为底板上通常有启动方式配置比如从eMMC启动还是从SD卡启动不同批次可能稍有区别。我有一次就是没注意拨码开关的状态烧完固件之后出现“系统无法启动串口没有输出”的现象折腾了半天才发现是拨码开关被拨到了SD卡启动位置而卡里根本没插系统卡。这种问题虽然低级但遇到时确实容易让人误判成硬件损坏或固件问题。3. SDK编译与系统烧录把开发环境一次性弄明白3.1 主机环境选择与SDK目录结构使用迅为RK3568开发板主机推荐用Ubuntu 18.04或20.0464位系统内存至少16GB磁盘空间尽量留出200GB以上。千万不要在Windows上用WSL直接编除非你对Linux环境变量的管理非常有把握否则后续工具链和SDK脚本的各种路径问题会让你怀疑人生。纯物理机安装Ubuntu或者用虚拟机分配足够资源都可以我自己长期用的是另外一台Ubuntu 20.04的机器编译始终稳定。拿到资料包之后先解压SDK。Rockchip官方的Linux SDK结构一般包含kernel内核源码、u-boot引导代码、buildroot、device/rockchip各板型的dts和配置文件、external第三方库和工具、app应用示例等。迅为给的光盘里还会附上他们自己基于官方SDK适配好的版本以及部分芯片的驱动源码和参考文档。打开SDK根目录后建议先不要急着编译而是把device/rockchip目录里的板型配置文件看一遍找到你手里的核心板/底板对应的.mk和dts文件例如rk3568-evb.dts或迅为定制的rk3568-topeet.dts。确认了板型名后面所有编译、打包步骤才不会用到错误配置。初始化编译环境是关键一步。在SDK根目录执行source build/envsetup.sh lunchlunch后会出现一系列板型选项选择迅为RK3568对应的item例如rk3568_topeet之类的名字记住你选的数字编号。这里有个常见的坑每次新开终端都必须重新source和lunch否则./build.sh根本不知道你要编译什么板型会报“uboot/kernel config not found”。我习惯在~/.bashrc里加一行注释提示自己或者在写自动化编译脚本时把lunch命令也写进去避免漏掉。3.2 分步编译Uboot、Kernel、RootfsSDK的编译基本可以拆成三段Uboot、Kernel、Rootfs。直接执行./build.sh会把三者全部编出来但如果你在做驱动调试每次都全套编译会非常浪费时间。我推荐的做法是分开编译。先编Uboot./build.sh ubootUboot编译完成后会生成uboot.img之类的镜像文件。然后是内核./build.sh kernel内核编完会生成boot.img或kernel.img和resource.img取决于SDK版本和配置方式。内核单独编译是为了快速验证设备树修改和驱动代码。你可以先在kernel目录下直接执行make ARCHarm64 rockchip_linux_defconfig make ARCHarm64 dtbs make ARCHarm64 -j16这样编出来的Image和dtb可以单独烧录或通过TFTP/NFS加载速度比整套SDK打包快很多。Rootfs的选择通常有三种Buildroot、Debian、Ubuntu。Buildroot适合定制精简系统Debian/Ubuntu适合做功能验证和桌面化应用开发。迅为资料包里通常提供预编译好的rootfs镜像如果你不需要裁剪系统直接用现成的最省事。如果你要做产品定制选Buildroot自己裁剪学习成本相对高但把机制跑通一次之后收益很大——后续加一个包、改一个配置都只需要修改defconfig再重新build整套流程可控性很好。3.3 烧录与分区要点烧录工具是Windows下的RKDevTool也有Linux版。把开发板进入Loader模式的方法很重要连接USB到电脑按住板上的RECOVERY键部分批次叫UPDATE键再上电或复位设备管理器里会识别到Rockchip Loader设备。这时打开RKDevTool选择对应的parameter分区表和各个镜像文件逐个分区烧录即可。常见分区有uboot、misc、boot、recovery、rootfs以及userdata等parameter.txt里写明了分区布局和大小正常情况不需要你去改。如果只是想快速验证 firmware直接在工具里选择“固件升级”页面下载现成的单个update.img文件一键升级即可。如果是自己编译生成了一堆分区镜像则用“高级功能”页面按分区烧。我个人的经验是开发调试期尽量按分区烧录这样每次改动只烧一个镜像速度快排查问题也方便。量产或给小伙伴部署时再打包成update.img统一升级。注意烧录前务必备份好你的个人文件因为大部分出厂镜像的分区操作会清空用户数据。另外不要随便勾选擦除Flash或修复分区表除非你确定要彻底清空芯片否则误操作后需要重新导入完整parameter表那个过程对新手来说比较痛苦。4. 设备树是RK3568开发的灵魂搞懂它事半功倍4.1 从dtsi到dtsRK3568的头文件体系你在RK3568平台做任何外设适配都绕不开设备树。瑞芯微对设备树的管理方式是芯片级的rk3568.dtsi定义所有内置控制器、时钟、pinctrl、中断等公共资源板级dts例如rk3568-evb.dts或rk3568-topeet.dts再去引用、填充对应的外设节点和引脚配置。也就是说内核启动时看到的是一棵“芯片共同描述板级具体覆盖”的树。需要先去看arch/arm64/boot/dts/rockchip/rk3568.dtsi里的结构特别是uart0、i2c1、pinctrl这些引用写法的含义。dtsi里多数节点是disabled状态板级dts中通过i2c1 { status okay; };来使能外设。这种“默认关闭按需打开”的设计好处是减少了不同板卡之间的配置冲突但坏处是很多新手在添加外设时只顾着把节点内容写好忘了把status改成okay结果调试串口上一点反应都没有。我强烈建议你在板级dts里改动前先做一次“最小验证”比如你想调试GPIO就先在dts的相应节点把引脚复用pinctrl和GPIO请求写好编译烧录后用/sys/class/gpio或libgpiod工具读取状态确认改动生效了再继续做上层应用。有了这个习惯碰到复杂外设时就不会一错错一大堆。4.2 一个最小设备树外设配置实战我以扩展一个I2C设备为例演示完整思路。假设你在底板上使用I2C2连接一个外部传感器并且传感器中断脚接到了GPIO3_A2i2c2 { status okay; clock-frequency 400000; pinctrl-names default; pinctrl-0 i2c2m1_xfer; sensor48 { compatible vendor,sensor-name; reg 0x48; interrupt-parent gpio3; interrupts RK_PA2 IRQ_TYPE_LEVEL_LOW; pinctrl-names default; pinctrl-0 sensor_int_l; reset-gpios gpio1 RK_PB5 GPIO_ACTIVE_LOW; vdd-supply vcc3v3_sys; }; }; pinctrl { sensor { sensor_int_l: sensor-int-l { rockchip,pins 3 RK_PA2 RK_FUNC_GPIO pcfg_pull_up; }; }; };这里面有几个点很容易出错clock-frequency 400000是I2C时钟部分传感器不支持400kHz过快会导致通信异常可以先降到100000验证interrupts和pinctrl里的gpio bank号都是0起始的RK3568芯片手册里GPIO3_A2的写法到了dts里就是3 RK_PA2 ...如果你按4 RK_PA2...写软件层面根本不会报错但中断永远触发不了这类问题排查起来很费劲。设备树改完之后还需要确认CONFIG_OF、CONFIG_I2C等内核宏是否开启一般Rockchip的默认defconfig里都有。编译dtb可以使用make ARCHarm64 dtbs然后在kernel/arch/arm64/boot/dts/rockchip/下找到新生成的dtb单独烧录到resource分区或boot分区里的dtb位置重启后用/sys/firmware/devicetree/base/目录去检查节点是否被正确加载。检查是否加载了你的传感器能驱动可以用i2cdetect -y 2来扫描总线上挂的设备地址如果看不到设备先查硬件连接、I2C地址、供电和上拉再查dts里的reg是否对得上。4.3 调试设备树常用的三板斧第一板斧看启动日志。内核启动时会把设备树的处理过程打印出来搜索OF: fdt:以及设备驱动probe时的日志能快速定位是没找到节点、没找到设备还是驱动初始化失败。第二板斧在驱动里临时加输出。如果你在改SDK自带的驱动找到probe函数增加dev_info()或printk重新编译内核用串口log来判断流程走到哪一步。第三板斧使用/sys接口。能直接读的寄存器映射设备树解析结果都挂在/sys/firmware/devicetree/base下很多问题不需要重新编译和烧录直接在这个目录里查找节点内容就能确认dts有没有生效。调试设备树期间我建议永远保留一个能用的备份dts。我曾经在修改一组pinctrl时手滑把SD卡接口的引脚复用错位导致eMMC/SD完全失联整个板子起不来只能进Maskrom模式重新烧写。从那以后我每改完一处必定先使用git diff看差异确认没有动了不相干的节点再编译烧录。5. 外设调试实录当RK3568遇到摄像头、BT1120、WiFi和网卡5.1 RK3568调试OV5695摄像头时序比代码更关键OV5695是豪威的一颗500万像素MIPI摄像头传感器在RK3568调试它时很多人上来就改设备树却发现I2C不通、图像不出来问题往往出在这三个地方供电、时钟和复位时序。首先确认供电。OV5695需要AVDD2.8V、DOVDD1.8V、DVDD1.2V如果这三路电压有一路没上对I2C探测可能正常但流起来就是黑屏或者花屏。其次是MCLKRK3568输出给摄像头的MCLK通常是24MHz如果你用示波器量不到时钟检查对应的pinctrl配置和camera controller驱动是否加载正常。最后是上下电时序也就是拉高PWDN、拉低RESET的顺序。OV5695对复位和供电时序有严格要求你需要参考数据手册里的power-up sequence并在驱动里用gpiod_set_value逐步控制。SDK自带的ov5695.c驱动通常会处理这些时序但你如果自己选用了非标准模组硬件上的连接顺序要和驱动代码里的逻辑保持一致。图像完全不通时先用v4l2-ctl --list-devices看有没有rkisp或m00_b_ov5695这类设备节点。有节点但没流可以抓一下media-ctl -p看链路拓扑是否正常。我曾经遇到过一次图像为一条斜线的怪现象最后排查出来是MIPI lane数在dts里写成2线但模组实际是4线。这种硬编码错误从日志上很难一眼看出来只能靠逐项对照。5.2 配置BT1120输出从VP到物理信号BT1120是一种16位的并行高清数字视频接口常用于安防监控、工业相机和视频处理芯片之间的数据连接。RK3568的视频输出VP0到VP3中可以指定某个VP输出BT1120格式。配置的重点是你要把哪个显存plane连接到目标VP以及对应引脚是否被复用为BT1120功能。在dts里你需要找到video_phy和vpX节点通过route和port把视频流路由到编码器同时配置pinctrl选择BT1120引脚组。注意时钟频率1080P60的BT1120数据量大约需要148.5MHz的像素时钟并行总线宽度16位你要确保对应的clk频率被正确设置同时供电域的电流余量足够。调试这个功能时示波器最好备着否则你不知道信号是压根没出来还是出来后被外接sink端拒绝。如果只是验证输出可以找一块BT1120转HDMI的模块接显示器没有模块的话也可以用逻辑分析仪看帧同步和行同步波形。5.3 WiFi模块AP6212/AP625适配RK3568开发板上的WiFi/BT模块常见的是正基的AP6212和AP625系列走SDIO接口。调WiFi最麻烦的不是协议而是固件和nvram配置。你需要确认内核开了BRCMFMAC驱动配置然后在rootfs的/vendor/firmware/brcm/目录下放对应的.bin固件和.txt配置。AP6212对应的固件一般是brcmfmac43438-sdio.binAP6256对应的是brcmfmac43456-sdio.bin。如果固件放错位置或名字不匹配dmesg里通常会报sdio_bus_probe超时或brcmf_fw_map_chip_to_name找不到固件。此外WiFi模组的REG_ON或者叫BT_REG_ON、WL_REG_ON引脚必须正确控制它在dts里通常定义为一个GPIO收到模组的电源使能端。如果这个引脚默认状态不对模组可能压根不被枚举。SDK里一般有参考实现的wifi节点迅为的底板也都留好了连接你只需要对照底板原理图确认模块是接在SDIO0还是SDIO1上并在dts里把cap-poweroff-card或者keep-power-in-suspend配成符合你需求的策略。iw list能看到频段、ifconfig wlan0 up能拉起来基本上WiFi的移植就算成功了。剩下的功耗休眠问题往往要结合你的实际产品需求来做低功耗策略调整这是量产阶段的老大难。5.4 把YT6801这类新网卡驱动合入RK3568内核除了RK3568原生支持的GMAC之外很多项目还会外接PCIe网卡或USB网卡来扩展网络接口。以裕太微的YT6801为例这属于国产方案里常见的低成本解决方案。合入驱动的思路是通用的先找到对应芯片的驱动源码厂商提供或者开源社区适配好的版本拷贝到kernel/drivers/net/ethernet/下修改该目录的Kconfig和Makefile让编译系统把这个驱动编进去或编成模块。我之前做过一次类似移植遇到最多的问题是编译时报implicit declaration of function xxx。这类问题大概率是因为驱动是基于更老内核写的而当前内核API已经变了比如pci_alloc_irq_vectors、ether_setup等接口的签名有变化。解决方法是看驱动的git提交记录或者用git log追踪内核源代码的改动历史直接用新的API替换。之后还要在设备树里把PCIe/USB控制器节点打开确认PCIE控制器在RK3568上使能再启动系统后执行lspci或lsusb看设备是否存在。设备能在总线上枚举出来但驱动没绑定基本就是compatible字符串或venID/deviceID不匹配总线上连设备都看不到就要回头查供电、时钟、复位和链路训练是否正常。6. 常见问题与排查技巧能省一半的调试时间6.1 上电黑屏、串口无输出先别急着刷机开发板最让人揪心的故障就是一上电屏幕没反应、串口终端空白。第一次遇到这种问题的人多半会怀疑固件损坏然后反复刷机但不一定能解决。我的排查顺序是先看电源指示灯是否常亮确认供电电压正常然后检查底板串口选择跳线确保你接的TTL串口对应的是调试串口最后再看拨码开关的启动介质选择。如果以上都没问题再用RKDevTool的Loader模式探测芯片能识别到设备说明芯片基本活着问题集中在固件或启动介质上如果设备都识别不到要考虑USB线质量、RECOVERY按键是否接触良好甚至核心板是否插紧。6.2 分区烧录成功但每次开机卡在某个logo这种情况通常是Uboot启动参数和内核dts不一致尤其是rootfs分区编号错误。比如parameter表里分配了12个分区但内核的cmdline里指定的root/dev/mmcblk0p9对应的是无用分区就会反复跳到recovery。此时接入串口在Uboot阶段按任意键进入命令行执行printenv对比bootargs和part list mmc 0的分区列表。迅为的SDK通常已经把你的板型配套好但如果换过parameter表或手动改过Uboot环境变量这种问题非常容易冒出来。6.3 中文显示乱码终端里的编码陷阱之前有朋友问我用串口终端看板子上的中文应用输出全是乱码但同样的程序用MobaXterm就正常。这个问题其实跟开发板本身关系不大串口终端软件、系统locale、应用程序输出这三者之间的字符编码必须一致。板子上的Linux系统设置的是UTF-8但你的串口终端却用了GBK解码自然显示乱。解决办法是在终端软件里把编码切到UTF-8同时检查系统环境变量LANG是否设置为en_US.UTF-8或zh_CN.UTF-8。如果用的是minicom它是基于终端的程序本身需要终端模拟器支持UTF-8MobaXterm这类Windows软件默认比较智能能自动识别所以表现不一样。这不是板子的bug而是开发环境的基础配置问题。7. 这套资料要怎么学才能真正内化成能力7.1 2800页手册的正确打开方式我不建议任何人从头到尾按顺序读2800页手册。正确的方式是把手册当作“字典地图”。先花半天把目录过一遍知道哪一部分讲Uboot、哪一部分讲kernel、哪一部分讲某个外设的具体调试。然后锁死一个完整的项目目标比如“让开发板跑起来通过摄像头预览图像并叠加时间戳”按照这个目标去翻手册里的对应章节遇到问题再回头看原理部分。当你带着问题去查资料时你的记忆效率和理解深度完全不是漫无目的地翻页能比的。同时每做完一个相对完整的实验建议动手写自己的笔记形成一套属于你的速查文档这样后面做产品项目时你根本不用再去翻原始手册看自己的笔记就能恢复记忆。7.2 220集视频的跟学节奏视频内容很适合“蹲坑式学习”但不适合在动手做实验的时候一边挂机播放一边照抄。我的建议是先在电脑上把对应章节的视频用1.25倍速看一遍记录关键命令和步骤时间点第二遍带着问题去看然后在板子上亲自操作一遍。遇到搞不定的问题再回到视频里看老师是怎么处理的对照找你遗漏的细节。一套视频学完之后如果你能做到不看着视频仅凭着文档和自己的笔记从零编译SDK、烧录系统、适配一个外设那这门手艺基本就算练成了一半。后续真正进阶的方向是去研究SDK中某一部分的实现代码比如GPU驱动、VPU、ISP pipeline或者去研究怎么优化启动时间和功耗。从个人经验来讲RK3568平台比较适合作为一块“跳板”它没有某些老平台那么封闭也没有最新平台那么大的代码量和新特性压力它恰好处于一个各方面都相对平衡的位置。把这套开发板从硬件到系统、从驱动到应用完整走一遍你对Linux嵌入式开发的理解会比看十遍理论书籍都深。资料再多最终还是得靠一块板子、一根串口线、一个能编译的终端把知识落到实际的寄存器操作和代码逻辑里。