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++-multilib
CentOS:
dnf install glibc-devel.i686
dnf比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/
中.