news 2026/5/16 15:45:03

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在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-dev
  • 32位库兼容性:当出现/lib/ld-linux.so.2: No such file错误时,需要:
    sudo dpkg --add-architecture i386 sudo apt-get update

2. SDK获取与权限管理的正确姿势

克隆SDK时直接使用chmod 777是极不安全的做法。更专业的权限配置方案如下:

git clone --depth=1 --branch=master 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时,先检查:

  1. 当前用户是否在rtl_dev组:groups
  2. 文件夹权限:ls -ld ambd_sdk

3. 双核编译:理解KM0与KM4的协作逻辑

RTL8720DN的独特之处在于其双核架构:

核心功能编译顺序输出文件
KM0实时任务处理先编译km0_boot_all.bin
KM4应用逻辑处理后编译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))

典型编译错误解决方案:

  1. python: not found
    创建软链接:sudo ln -s /usr/bin/python2.7 /usr/bin/python

  2. arm-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-*/bin

4. 固件烧录:Windows下的精细操作

将生成的bin文件通过VM共享文件夹传输到Windows后,使用AmiBurn工具时需要特别注意:

烧录配置参数表

参数项BW16开发板值错误配置示例后果
芯片类型RTL8721DNRTL8720DN无法识别
Flash大小2048 (2MB)1024写入不全
波特率1152009600通信失败
串口引脚对应TX→PB1, RX→PB2反向连接无响应

实际操作流程:

  1. 连接开发板时的黄金5秒法则:

    • 先按住Burn按钮不放
    • 再按RST按钮
    • 保持Burn键2秒后松开
    • 立即点击AmiBurn的"Start"按钮
  2. 串口调试技巧:

    # 简易串口监测脚本(Python示例) import serial ser = serial.Serial('COM3', 115200, timeout=1) while True: print(ser.readline().decode('ascii', errors='ignore').strip())

当烧录失败时,按此顺序排查:

  1. 检查USB线是否为数据线(有些充电线不含数据引脚)
  2. 确认串口驱动已安装(设备管理器无黄色感叹号)
  3. 尝试降低波特率到57600测试
  4. 更换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 i=0; i<100; i++) { GPIO_WriteBit(LED_PIN, 1); DelayMs(i); GPIO_WriteBit(LED_PIN, 0); DelayMs(100-i); } }

编译上传后,如果LED无反应,检查:

  1. 开发板原理图确认实际LED连接引脚
  2. 是否调用了LED_Init()初始化函数
  3. 供电是否稳定(测量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 i=0; i<len; i++) { while(!(UART0->LSR & UART_LSR_THRE)); UART0->THR = ptr[i]; } return len; }

记得在修改任何核心代码后,必须双核重新编译,否则会出现难以排查的运行时错误。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/16 15:40:06

深度解析Java NIO与Tars框架网络通信模型

1. 项目概述&#xff1a;从NIO到Tars&#xff0c;一次网络编程的深度解构如果你是一名Java后端开发者&#xff0c;或者对分布式微服务架构感兴趣&#xff0c;那么“高性能RPC框架”这个词对你来说一定不陌生。在众多选择中&#xff0c;腾讯开源的Tars框架因其在内部历经十余年、…

作者头像 李华
网站建设 2026/5/16 15:38:08

汉森软件冲刺港股:年营收6亿 净利1.4亿 已获IPO备案

雷递网 雷建平 5月15日深圳市汉森软件股份有限公司&#xff08;简称&#xff1a;“汉森软件”&#xff09;日前更新招股书&#xff0c;准备在港交所上市。汉森软件已获IPO备案&#xff0c;拿到了上市的钥匙&#xff0c;同期一并拿到备案的企业还包括南京海纳医药科技股份有限公…

作者头像 李华
网站建设 2026/5/16 15:35:07

开源直播推流工具clawstage:模块化设计与核心实现解析

1. 项目概述&#xff1a;从“ClawStage”看开源直播推流工具的设计哲学最近在折腾直播推流方案时&#xff0c;我偶然发现了HooRii-OT团队在GitHub上开源的项目“clawstage”。这个项目名字挺有意思&#xff0c;“claw”是爪子&#xff0c;“stage”是舞台&#xff0c;合起来有种…

作者头像 李华