在Ubuntu 20.04上,用安信可BW16开发板(RTL8720DN)从编译到点灯的全流程避坑指南

在Ubuntu 20.04上,用安信可BW16开发板(RTL8720DN)从编译到点灯的全流程避坑指南 在Ubuntu 20.04上玩转安信可BW16开发板从零点亮LED的全流程实战手册第一次拿到安信可BW16开发板时那块小小的RTL8720DN双核芯片让我既兴奋又忐忑。作为物联网开发的新手我原本以为按照官方教程就能轻松点亮LED没想到从环境搭建到最终烧录每一步都暗藏玄机。本文将带你穿越那些让我熬夜的坑用最直白的方式拆解双核编译的奥秘。1. 环境准备那些容易被忽略的依赖细节在Ubuntu 20.04上搭建开发环境时官方文档列出的基础依赖往往不够全面。经过三次系统重装后我整理出这份完整的环境清单sudo apt-get update sudo apt-get install -y \ git wget libc6-i386 lib32ncurses5 make bc gawk \ ncurses-dev python2.7 python3-distutils \ device-tree-compiler gcc-multilib g-multilib \ libssl-dev flex bison注意Python 2.7在最新Ubuntu中已被移除需手动添加PPA源sudo add-apt-repository ppa:deadsnakes/ppa sudo apt install python2.7特别提醒两个隐藏坑点libssl-dev版本冲突若遇到E: Unable to correct problems, you have held broken packages错误尝试sudo apt-cache policy libssl-dev sudo apt-get install libssl1.0-dev32位库兼容性当出现/lib/ld-linux.so.2: No such file错误时需要sudo dpkg --add-architecture i386 sudo apt-get update2. SDK获取与权限管理的正确姿势克隆SDK时直接使用chmod 777是极不安全的做法。更专业的权限配置方案如下git clone --depth1 --branchmaster https://github.com/ambiot/ambd_sdk.git sudo groupadd rtl_dev sudo usermod -aG rtl_dev $USER sudo chown -R :rtl_dev ambd_sdk sudo chmod -R 775 ambd_sdk newgrp rtl_dev # 立即生效组权限变更这种方案实现了创建专属开发者组保持755基础权限避免全局可写风险当遇到Permission denied时先检查当前用户是否在rtl_dev组groups文件夹权限ls -ld ambd_sdk3. 双核编译理解KM0与KM4的协作逻辑RTL8720DN的独特之处在于其双核架构核心功能编译顺序输出文件KM0实时任务处理先编译km0_boot_all.binKM4应用逻辑处理后编译km4_boot_all.bin/km0_km4_image2.bin正确的编译流程应该是cd ambd_sdk/project/realtek_amebaD_va0_example/GCC-RELEASE/ # KM0核编译低压模式 (cd project_lp make clean make all -j$(nproc)) # 验证KM0编译 if [ ! -f project_lp/asdk/image/km0_boot_all.bin ]; then echo -e \033[31mKM0编译失败检查以下常见问题 echo 1. 是否缺少python2.7 echo 2. 是否未安装32位库 echo 3. 检查make输出中的第一个error\033[0m exit 1 fi # KM4核编译高性能模式 (cd project_hp make clean make all -j$(nproc))典型编译错误解决方案python: not found创建软链接sudo ln -s /usr/bin/python2.7 /usr/bin/pythonarm-none-eabi-gcc: command not found手动安装工具链wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2 tar xjf gcc-arm-none-eabi-*.tar.bz2 export PATH$PATH:$(pwd)/gcc-arm-none-eabi-*/bin4. 固件烧录Windows下的精细操作将生成的bin文件通过VM共享文件夹传输到Windows后使用AmiBurn工具时需要特别注意烧录配置参数表参数项BW16开发板值错误配置示例后果芯片类型RTL8721DNRTL8720DN无法识别Flash大小2048 (2MB)1024写入不全波特率1152009600通信失败串口引脚对应TX→PB1, RX→PB2反向连接无响应实际操作流程连接开发板时的黄金5秒法则先按住Burn按钮不放再按RST按钮保持Burn键2秒后松开立即点击AmiBurn的Start按钮串口调试技巧# 简易串口监测脚本Python示例 import serial ser serial.Serial(COM3, 115200, timeout1) while True: print(ser.readline().decode(ascii, errorsignore).strip())当烧录失败时按此顺序排查检查USB线是否为数据线有些充电线不含数据引脚确认串口驱动已安装设备管理器无黄色感叹号尝试降低波特率到57600测试更换USB端口避免使用USB3.0蓝色接口5. LED控制实战超越简单点灯成功烧录后我们可以深入修改SDK中的LED控制代码。关键文件位于ambd_sdk/project/realtek_amebaD_va0_example/GCC-RELEASE/project_hp/src/main.c进阶LED控制示例// 定义LED引脚BW16开发板 #define LED_PIN PA_12 // 初始化LED void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_PeriphClockCmd(APBPeriph_GPIO, APBPeriph_GPIO_CLOCK, ENABLE); GPIO_InitStruct.GPIO_Pin LED_PIN; GPIO_InitStruct.GPIO_Mode GPIO_Mode_OUT; GPIO_InitStruct.GPIO_Pull GPIO_PullNone; GPIO_Init(GPIO_InitStruct); } // 呼吸灯效果 void LED_Breathing(void) { for(int i0; i100; i) { GPIO_WriteBit(LED_PIN, 1); DelayMs(i); GPIO_WriteBit(LED_PIN, 0); DelayMs(100-i); } }编译上传后如果LED无反应检查开发板原理图确认实际LED连接引脚是否调用了LED_Init()初始化函数供电是否稳定测量3.3V引脚电压6. 串口调试进阶技巧当串口无输出时别急着重烧固件先尝试以下诊断方法常见问题排查表现象可能原因解决方案完全无输出波特率不匹配尝试115200/57600/9600乱码接地不良检查GND连接间歇性断连电源干扰外接5V电源只有启动日志程序崩溃检查堆栈大小高级调试技巧在platform_opts.h中开启调试模式#define DEBUG 1 #define CONFIG_DEBUG_LOG 2 // 详细日志级别使用printf重定向到串口int _write(int fd, char *ptr, int len) { (void)fd; for(int i0; ilen; i) { while(!(UART0-LSR UART_LSR_THRE)); UART0-THR ptr[i]; } return len; }记得在修改任何核心代码后必须双核重新编译否则会出现难以排查的运行时错误。