1. RV1126开发环境搭建全攻略第一次接触RV1126开发板时我被官方文档里密密麻麻的依赖项搞得头晕眼花。经过三个项目的实战积累我总结出了这套最适合新手的开发环境搭建方案。RV1126作为瑞芯微推出的AIoT芯片在智能摄像头、边缘计算盒子等领域应用广泛其四核Cortex-A7架构和2TOPs NPU算力让它成为中端嵌入式设备的性价比之选。开发环境建议使用Ubuntu 20.04 LTS版本这是大多数嵌入式SDK兼容性最好的系统。我试过在Ubuntu 22.04上编译遇到了至少5个依赖库版本冲突问题。硬件配置方面虚拟机至少需要分配8GB内存和100GB存储空间实测编译内核时内存峰值会冲到6GB。注意一定要在虚拟机设置中启用USB 3.0控制器否则烧录时会出现设备识别失败安装基础依赖包时这个命令组合最稳妥sudo apt-get install -y git make gcc g flex bison libssl-dev libncurses-dev \ squashfs-tools bc python3-dev swig device-tree-compiler lzop2. SDK获取与编译避坑指南RV1126的SDK获取方式经历过几次变革。早期需要联系代理商获取加密压缩包现在官方改为网盘下载授权码的方式。我最近使用的RV1126_RV1109_LINUX_SDK_V2.2.5.1版本解压后目录结构是这样的SDK_ROOT ├── buildroot # 根文件系统构建 ├── kernel # Linux 4.19内核 ├── prebuilts # 交叉编译工具链 └── device # 设备树和硬件配置编译时最容易卡在下载环节建议先执行这两个命令设置代理export http_proxyhttp://your_proxy:port export https_proxyhttp://your_proxy:port遇到编译空间不足的问题时不要急着扩容虚拟机磁盘。我常用的清理方法是sudo rm -rf ~/.ccache sudo find /var/cache -type f -delete3. 设备树定制实战解析设备树是嵌入式Linux开发的硬件说明书RV1126的设备树文件主要存放在device/rockchip/rv1126目录下。以添加蜂鸣器驱动为例我们需要完成以下步骤在原理图中找到蜂鸣器连接的是GPIO0_C3在rv1126-xxxx.dts中添加设备节点beep: beep { compatible pwm-beeper; pwms pwm0 0 1000000 0; status okay; };使用./build.sh kernel单独编译内核实测中发现一个坑点RV1126的PWM编号从1开始但设备树要写0。这导致我调试了整整一下午才让蜂鸣器发声。4. 驱动调试技巧与工具链驱动开发离不开调试工具推荐这几个我每天必用的命令cat /proc/interrupts查看中断统计dmesg -wH实时监控内核日志echo 7 /proc/sys/kernel/printk提高日志级别交叉编译工具链的配置也有讲究。在~/.bashrc中添加这行能让编译效率提升export ARCHarm export CROSS_COMPILEarm-linux-gnueabihf-当驱动加载失败时先检查以下位置/proc/device-tree确认设备树节点已生效/sys/class/查找对应的设备类lsmod查看模块加载状态5. 外设驱动开发实例以按键驱动为例RV1126的GPIO操作需要特别注意复用功能配置。在设备树中添加按键节点后keys { compatible gpio-keys; button1 { label User Button; gpios gpio0 RK_PA6 GPIO_ACTIVE_LOW; linux,code KEY_POWER; }; };驱动代码中需要处理防抖逻辑这是我调试出来的最佳参数static struct gpio_keys_button rv1126_buttons[] { { .code KEY_POWER, .gpio 6, // PA6 .active_low 1, .desc GPIO Key Power, .type EV_KEY, .debounce_interval 20, // 20ms防抖 }, };实测中发现GPIO编号计算方式容易混淆记住这个公式GPIO编号 组号*32 组内编号 例如GPIO0_C3 0*32 2*8 3 196. 固件烧录与调试RV1126支持多种烧录方式最稳定的是通过USB OTG口烧录。使用RKDevTool时要注意先按住Recovery键再上电进入Loader模式烧录失败时尝试擦除Flash再重新烧写串口调试建议用115200波特率我整理了几个常见错误代码的解决方法错误代码原因解决方案0x000003设备未进入烧录模式检查USB线重按Recovery键0x000102镜像校验失败重新下载固件包0x000201DDR初始化失败更换USB端口或线缆7. 实战经验分享在最近的门禁系统项目中我遇到了设备树节点冲突导致摄像头无法初始化的诡异问题。通过对比官方的rv1126-evb.dts和我们自定义的设备树发现是I2C总线定义重复了。解决方法是在自定义设备树中注释掉// i2c1 { // status okay; // ... // };另一个坑是RV1126的GPIO电压域配置。当使用3.3V传感器时需要确保对应的GPIO组电压设置正确io_domains { status okay; vccio1-supply vcc_3v3; vccio2-supply vcc_3v3; };驱动开发中最有价值的调试方法是在关键路径添加打印dev_info(pdev-dev, Probe start, reg0x%08x, readl(reg_base REG_OFFSET));