首先我们先看https://xr806.docs.aw-ol.com/
该文档部分不适应 当前最新gitee
如果没有repo工具,可通过下面的git命令获取repo。
git clone https://gerrit-googlesource.lug.ustc.edu.cn/git-repo
下载代码 没有使用ssh://方式 过于麻烦
mkdir xr806_openharmony
cd xr806_openharmony
repo init -u https://gitee.com/openharmony-sig/manifest.git -b OpenHarmony_1.0.1_release --no-repo-verify -m devboard_xr806.xml
repo sync -c
repo forall -c 'git lfs pull' #下载部分大容量二进制文件
编译流程
cd device/xradio/xr806/xr_skylark #(1)进入原生SDK目录
cp project/demo/audio_demo/gcc/deconfig .config #(2)复制配置文件
make menuconfig #(3)图形化界面配置
make build_clean #(4)清除旧配置
make lib -j #(5)根据配置生成静态库和全局头文件
cd - #(6)返回Harmony根目录
hb set #(7)选择wifi_skylark
hb build -f #(8)编译,后续不需要重新配置
编译中遇到的问题
1.缺少SDKconfig.gni
直接导致 hb build -f 报错编译失败
解决方法
修改xr806_openharmony/device/xradio/xr806/xr_skylark/config.py
该文件的换行符 unix格式
#!/usr/bin/python3
import os
pwd = os.path.dirname (__file__)
f = open('{0}/.config'.format(pwd),'r')
DATA = ['#XR806 config']
for line in f.readlines():
if line[0] != '#' and line[0] != '\n':
line = line.strip('\n')
DATA.append(line)
GNf = open('{0}/../liteos_m/SDKconfig.gni'.format(pwd),'w')
GNf.write('#Build by config.py DO NOT EDIT!\n\n')
GNf.write('SDK_cflags = [\n\
"-mcpu=cortex-m33",\n\
"-mtune=cortex-m33",\n\
"-march=armv8-m.main+dsp",\n\
"-mfpu=fpv5-sp-d16",\n\
"-mfloat-abi=softfp",\n\
"-mcmse",\n\
"-mthumb",\n\
"-c",\n\
"-g",\n\
"-fno-common",\n\
"-fmessage-length=0",\n\
"-fno-exceptions",\n\
"-ffunction-sections",\n\
"-fdata-sections",\n\
"-fomit-frame-pointer",\n\
"-Wall",\n\
#"-Werror",\n\
"-Wno-cpp",\n\
"-Wpointer-arith",\n\
"-Wno-error=unused-function",\n\
"-MMD",\n\
"-MP",\n\
"-Os",\n\
"-DNDEBUG",\n\
"-Wno-error=stringop-truncation",\n\
"-Wno-error=restrict",\n\
"-includexr_config.h",\n\
"-includecommon/prj_conf_opt.h",\n\
"-DCONFIG_CHIP_ARCH_VER=3",\n\
"-DCONFIG_ARCH_APP_CORE",\n\
"-DCONFIG_CPU_CM33F",\n\
]\n\n')
PROJECT = [x for i,x in enumerate(DATA) if x.find('CONFIG_PROJECT=') != -1]
if len(PROJECT) == 1:
ProjectPath = PROJECT[0]
ProjectPath = ProjectPath.strip('CONFIG_PROJECT=')
GNf.write('ProjectPath = {0}\n\n'.format(ProjectPath))
if ProjectPath == '"bootloader"' or ProjectPath == '"test/etf"':
GNf.write('declare_args() {IsBootloader = "true"}\n')
else:
GNf.write('declare_args() {IsBootloader = "false"}\n')
#print (DATA)
2.hello 一直不出现
修改xr806_openharmony/device/xradio/xr806/libcopy.py
该文件的换行符 是windows格式(很奇怪对吧)。
#!/usr/bin/python3
import os
import json
pwd = os.path.dirname (__file__)
XTS_TEST = "disable"
def filenames_filter(filename_list,Features_str,extention_name):
confirm_list = []
for filename in filename_list:
if filename.find(Features_str) != -1:
if extention_name == os.path.splitext(filename)[1]:
confirm_list.append(filename)
return confirm_list
# whether config.json define compoent "test"?
vendorf = open('{0}/../../../vendor/xradio/xr806/config.json'.format(pwd),'r')
configData = json.load(vendorf)
subsystemsData = configData['subsystems']
for JSON_TXET in subsystemsData:
ComponentJson = json.dumps(JSON_TXET)
componentPython = json.loads(ComponentJson)
if componentPython["subsystem"] == "test":
XTS_TEST = "enable"
GNf = open('{0}/xr_skylark/ohos.mk'.format(pwd),'w')
FnList = os.listdir('{0}/xr_skylark/lib/ohos'.format(pwd))
APPlib = filenames_filter(FnList,'libapp_','.a')
if XTS_TEST == "enable":
TESTlib = filenames_filter(FnList,'libmodule_','.a')
# if test XTS_UPgrade,KEYlib should add 'libhota.a'
KEYlib = ['libwifiservice.a','libhiview_lite.a','libhilog_lite.a',\
'libhievent_lite.a','libbootstrap.a','libhctest.a','libbroadcast.a']
else:
TESTlib = []
KEYlib = []
RTOSlib = list(set(FnList) - set(APPlib) - set(TESTlib) - set(KEYlib))
GNf.write('#\n# Rules for ohos library\n#\n\n')
GNf.write('OHOSSOURCE = -Wl,--whole-archive\n')
for lib in KEYlib:
GNf.write('OHOSSOURCE += $(ROOT_PATH)/lib/ohos/{0}\n'.format(lib))
for lib in APPlib:
GNf.write('OHOSSOURCE += $(ROOT_PATH)/lib/ohos/{0}\n'.format(lib))
for lib in TESTlib:
GNf.write('OHOSSOURCE += $(ROOT_PATH)/lib/ohos/{0}\n'.format(lib))
GNf.write('OHOSSOURCE += -Wl,--no-whole-archive\n')
GNf.write('\n')
GNf.write('OHOSSOURCE += -Wl,--start-group\n')
for lib in RTOSlib:
GNf.write('OHOSSOURCE += $(ROOT_PATH)/lib/ohos/{0}\n'.format(lib))
GNf.write('OHOSSOURCE += -Wl,--end-group\n')
GNf.write('#\n# end of file\n#\n\n')
目前我用了
Cygwin
msys2 以及msys2中带的msys
都是同类型错误,建议看看其他坛友是否有方法
MinGW 未试
问题2分析
文件xr806_openharmony/device/xradio/xr806/xr_skylark/ohos.mk
默认有
OHOSSOURCE = -Wl,--whole-archive
OHOSSOURCE += $(ROOT_PATH)/lib/ohos/libapp_console.a
OHOSSOURCE += -Wl,--no-whole-archive
所以编译后能跑起来
libcopy.py 未能正确运行导致
文件未被更新如:
OHOSSOURCE = -Wl,--whole-archive
OHOSSOURCE += $(ROOT_PATH)/lib/ohos/libapp_console.a
OHOSSOURCE += $(ROOT_PATH)/lib/ohos/libapp_led.a
OHOSSOURCE += $(ROOT_PATH)/lib/ohos/libapp_WlanTest.a
OHOSSOURCE += -Wl,--no-whole-archive
所以 不管你怎么改都只是 支持libapp_console 设置
可手工添加(不建议。
hello 跑起来怎么改?
https://xr806.docs.aw-ol.com/study/soft_helloword/
给的文档已经过期不适合 现在最新的gitee代码
修改
xr806_openharmony/device/xradio/xr806/ohosdemo/BUILD.gn
内容:
group("ohosdemo") {
deps = [
"hello_demo:app_hello",
"LED:app_led",
#"iot_peripheral:app_peripheral",
#"wlan_demo:app_WlanTest",
]
}
如此这般hello_demo 就能愉快的跑起来了。