自从华为把开源鸿蒙(OpenHarmony)贡献给开放原子基金会(OpenAtom Foundation)后,OpenHarmony被越来越多的芯片厂商支持如泰凌微、芯之联、乐鑫、瑞芯微等等,网上众多开源鸿蒙的MPU南向开放资源,本文不妨老规矩还是从无线尤其蓝牙的角度来一探魅力。
OpenHarmony的环境比较绕,有不少教程,权威教程见xr806/doc/1--系统下载与编译.md · uncleli/devboard_device_allwinner_XR806 - Gitee.com。故本文环境搭建会跳着讲,可参考https://zhuanlan.zhihu.com/p/694447378和【XR806开发板试用】XR806与鸿蒙,简化构建环境流程 - 极术社区 - 连接开发者与智能计算生态 。先以全志XR806(芯之联被全志收购)这款BLE+WiFi芯片开头,运行效果可以直接跳到第三节,由于全志没怎么维护,分支停留在OH1.0.1,主要需要以下特定版本工具:
arm-none-eabi-gcc | 10-2020-q4-major |
gn | 1717 (2f6bc197) |
clang | 10.0.1.53907 |
ninja | 1.9.0 |
hb | |
git lfs | |
repo |
部分工具可在华为鸿蒙系统网站Document下到。
一、环境搭建
1. repo安装
输入“git clone git-repo - Git at Google”克隆repo,然后更换repo源为国内源,输入“vim git-repo/repo”就能能搜到“REPO_URL”可改为以下源,
中科大:https://mirrors.ustc.edu.cn/aosp/git-repo
清华: https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/
2. 克隆开放鸿蒙源码
这里涉及到三个仓库,如下:
OpenHarmony v1.0.1 release | |
XR806 device | |
XR806 vendor |
依次敲如下命令:
repo init -u https://gitee.com/openharmony/manifest.git -b OpenHarmony_1.0.1_release --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'
得到开放鸿蒙源码,但系统下芯片厂商的库并没有,具体在device和vendor目录下,故各自进入相应目录把对应上表仓库拷下来,但开放鸿蒙不认得仓库名,故对应全把devboard_device_allwinner_xr806和devboard_vendor_allwinner_xr806文件夹修改为xradio,
3. 工具链配置
此时源码已经都下好了,工具链默认位置要改成用户的实际位置,具体有2处,device/xradio/xr806/liteos_m/config.gni里的board_toolchain_prefix、device/xradio/xr806/xr_skylark/gcc.mk里的CC_DIR,
二、编译烧录
1. 库编译
输入“make menuconfig”就能配置工程,这里选择pjoject/demo/wlan_ble_demo,
2. 工程编译
输入“cd ../../../../”切回oh路径,输入“hb set”选择厂商工程,这里选xradio/wifi_skylark,
然后就是喜闻乐见的编译环节“hb build -f”,在xr_skylark/out目录生成了固件包括要烧录的xr_system.img,
3. 烧录
插入USB,会自动挂载/dev/ttyUSB0,启动烧录工具(在xr_skylark/tools目录下)通过输入“sudo ./ phoenixMC -I ../out/xr_system.img -c /dev/ttyUSB0”,
三、运行
到这里就能原神启动了,打开串口工具,就能看到鸿蒙的启动信息了,
但我们的目的是验证蓝牙,这里可以看到芯片以controller的形式在工作,即需要串口或别的形式借助host来发HCI命令来让其工作,可依次输入以下shell指令:
ble init
ble name XR806
ble advertise on
就能开启2.4G射频广播,手机能看到它的信号,其它特性不一一赘述,
四、错误
1. Unable to load "xr806/openharmony/device/xradio/xr806/liteos_m/SDKconfig.gni
这是官方路径写的有问题,需要修改xr_skylark/config.py文件如下图
然后再输入“python config.py”即可xr806/liteos_m下生成SDKconfig.gni。