虚拟机方式

  1. 使用虚拟机virtualbox安装Ubuntu18.04(只有64位版本),为编译速度更快,可以启用尽量多的核心;设置好和windows的共享文件夹;给默认用户加上sudoer权限,运行visudo,打开的文件中,在root ALL=(ALL:ALL) ALL下仿照写一行,如我的用户名是rnd:
    root    ALL=(ALL:ALL) ALL
    rnd ALL=(ALL:ALL) ALL
  2. 下载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.soliblto_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"
  3. 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先进, 建议改用

  4. 如果是腾讯物联网项目,进入qcloud-iot-bk-wifi目录,运行make clean,在运行make -j8(8是虚拟机的CPU核心数)进行编译;
  5. 编译出来的文件在out目录中,烧录all***.bin文件。烧录方式是打开bk_writer_V1.63.exe文件,选择bl2028n,选择固件,点击烧录即可。
    使用开发板烧录,需要用USB-C供电,另外接一个USB-TTL转接器,接到GND-TXD1-RXD1上来烧录。
  6. 开发板简介:
    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/中.

标签: none 阅读量: 1697

添加新评论