BL2028N编译环境配置
虚拟机方式
- 使用虚拟机virtualbox安装Ubuntu18.04(只有64位版本),为编译速度更快,可以启用尽量多的核心;设置好和windows的共享文件夹;给默认用户加上sudoer权限,运行visudo,打开的文件中,在root ALL=(ALL:ALL) ALL下仿照写一行,如我的用户名是rnd:root ALL=(ALL:ALL) ALL rnd ALL=(ALL:ALL) ALL
- 下载arm-none-eabi交叉编译器5.4-2016q3版本(据说最新可以用到2019年的版本,反正试过2023年的12.2是不行的),解压缩到一个目录。
 解压缩可以用tar命令(tar -xvf filename.tar)或(tar -xzvf filename.tar.gz),也可以直接用ubuntu的文件管理器,右键选择解压缩即可。
 注意解压缩会有一个问题,导致在链接elf文件时候报错:root@ubuntu-bl2028n:/media/sf_share/qcloud-iot-bk-wifi# make -j4 make: Warning: File '/media/sf_share/bl2028n_sdk_release/.config' has modification time 2.1 s in the future LD ../out/beken2028n.elf arm-none-eabi-gcc: fatal error: -fuse-linker-plugin, but liblto_plugin.so not found compilation terminated. ../bl2028n_sdk_release/application.mk:336: recipe for target 'application' failed make: *** [application] Error 1原因是 gcc-arm-none-eabi-5_4-2016q3\lib\gcc\arm-none-eabi\5.4.1\liblto_plugin.so文件和so.0文件时链接到liblto_plugin.so.0.0.0文件上的,所以给liblto_plugin.so.0.0.0复制两份改成上面的liblto_plugin.so和liblto_plugin.so.0文件名。
 然后在系统启动文件/etc/profile中加入:export ARM_GCC_TOOLCHAIN="/media/sf_share/gcc-arm-none-eabi-5_4-2016q3/bin/" export PATH="$PATH:$ARM_GCC_TOOLCHAIN"
- arm交叉编译器5.4只有32位,在64位的linux上运行会奇怪的错误no such file or ...,需要安装支持软件,安装前先update:
 ubuntu:apt-get update apt-get install gcc-multilib g++-multilibCentOS: dnf install glibc-devel.i686dnf比yum先进, 建议改用 
- 如果是腾讯物联网项目,进入qcloud-iot-bk-wifi目录,运行make clean,在运行make -j8(8是虚拟机的CPU核心数)进行编译;
- 编译出来的文件在out目录中,烧录all***.bin文件。烧录方式是打开bk_writer_V1.63.exe文件,选择bl2028n,选择固件,点击烧录即可。
 使用开发板烧录,需要用USB-C供电,另外接一个USB-TTL转接器,接到GND-TXD1-RXD1上来烧录。
- 开发板简介:
 CEN_KEY是重置按钮
 UART1(R/TXD1)用作Log输出,和MCU通讯的话请使用UART2
docker方式(推荐)
docker安装起来比虚拟机快很多.
可以先安装docker desktop, 然后取一个镜像, 并运行容器, 我还是用之前腾讯给的esp编译的centos 8镜像, 在windows命令行下:
# 获取镜像
docker pull hubertxxu/esp8266_build:0.1
# 下一句设置共享目录
docker run --name esp -v path/to/host/folder:/path/to/container/folder -dt hubertxxu/esp8266_build:0.1
# 进入docker bash环境
docker exec -it esp bash
# 安装32位兼容包(等同于ubuntu的gcc-multilib)
dnf install glibc-devel.i686
# 跟ubuntu一样, 修改环境变量 `~`目录下的`.bashrc`增加ARM_GCC_TOOLCHAIN和PATH, 运行即可. 注意,和上面ubuntu不同的是修改`/etc/profile`没有作用编译提速
使用共享文件夹的方式编译会发现速度极慢, 大约会慢100倍. 所以需要提速.
经过测试, 将arm toolchain和源码复制到虚拟机自己的文件夹,而不是用共享文件夹编译的话速度就非常快.
如果为了自动化, 你需要编辑.bashrc或者其他脚本文件来实现.
docker编译(更新+推荐)
我在hub.docker.com上创建了docker编译镜像, 获取: docker pull darceye/bl2028n_buildenv:v0.0.1, 安装好了环境, 并做了加速,将sdk已经复制到docker中.
为便于编译, 在host主机(以windows为例,嗯如果本身是linux也不用这么麻烦了)建立一个blq.bat文件:
@echo off
set bl2028n_build_docker=your_container_name
if "%1" == "build" (
  docker cp ./bl2028n_qcloud_sdk/qcloud-iot-bk-wifi %bl2028n_build_docker%:/home/bl2028n/bl_sdk/
  docker exec -it esp bash -c " cd /home/bl2028n/ && ./bl2028nmake"
  docker cp %bl2028n_build_docker%:/home/bl2028n/bl_sdk/out/all_2M.1220.bin ./build/bl2028n_FW.bin
)
if "%1" == "init" (
  docker start %bl2028n_build_docker%
)
if "%1" == "docker" (
  docker exec -it %bl2028n_build_docker% bash
)
if "%1" == "" (
  echo BLQ: Frossky BL2028N Qcloud C building Tool. Ver1.0-20230619
  echo Usage^: 
  echo blq: show this help.
  echo blq init: init docker container
  echo blq docker: into docker env
  echo blq build: build firmware into `build/` folder
)
@echo on将相关sdk放在bl2028n_qcloud_sdk/目录中, 就可以按上面的提示进行自动编译, 并将编译后bin文件复制到build/中.