thead的riscv64架构芯片
riscv64架构去除eflags检查的工具链
th1520的Linux配置
该项目旨在基于OpenHarmony的master分支以及OpenHarmony-3.2-Release分支代码适配收款支持riscv架构的芯片,从而实现芯片+系统全国产化的强强联合。
对于master分支由于架构适配同步涉及的仓比较多,因此开发过程中需要选择一个基线同步配置,过程中会不断的将基线升级操作。同时过程开发中的能力会分布合入OpenHarmony的master,具体的代码流程如下图1所示,中的weekly_xxx表示过程中会同步适配最新的代码,可能一次,也可能是多次。
在OpenHarmony-3.2-Release分支,润和软件基于平头哥的th1520 soc已经完成dayu800产品的适配工作并且已经过了OpenHarmony的XTS认证,实现商业化销售。中科院软件所基于该分支也同步适配了riscv64架构的qemu工作,同时能够借助host主机的audio和usb camera能力实现了OpenHarmony Guest上能进行播放音乐和拍照功能。当前润和软件和中科院软件所本着鸿蒙开源的精神,正在积极的推动OpenHarmony-3.2-Release分支代码上OpenHarmony。由于OpenHarmony不同仓合入进度问题,为方便验证,现同步将上库代码到riscv-sig组织中,方便进行验证。
图1 代码开发流程
图2 模块开发流程
图3 预计开发周期
1、当前基于OpenHarmony的weekly_20230905基线开发适配,当前已经能够全量编译通过,当前能够启动kernel,使能hdc。
2、基于12月18日拉取的主线master分支能够进行编译
3、OpenHarmony-3.2-Release分支同步于OpenHarmony的2024年2月2日的版本,当前能够启动到launcher,Camera能力是OK的
使用自动化脚本下载:
说明:关于自动化脚本的使用,请参考OpenHarmony代码下载脚本介绍
git clone https://gitee.com/personal-summary/code_download.git
./code_download.sh
# 选择4.3
cd ${code_path}
./build/prebuilts_download.sh
./build.sh --product-name dayu800 --ccache
使用自动化脚本下载:
说明:关于自动化脚本的使用,请参考OpenHarmony代码下载脚本介绍
git clone https://gitee.com/personal-summary/code_download.git
./code_download.sh
# 选择4.1
cd ${code_path}
./build/prebuilts_download.sh
./build.sh --product-name qemu-arm-linux-min --ccache
repo init -u https://gitee.com/riscv-sig/manifest.git -b weekly -m riscv64_weekly0905_init.xml --no-repo-verify
repo sync -c
repo forall -c "git lfs pull"
./build/prebuilts_download.sh
./build.sh --product-name rk3568 --ccache
方法一:
使用命令下载:
repo init -u https://gitee.com/riscv-sig/manifest.git -b weekly -m default_weekly_0905.xml --no-repo-verify
repo sync -c
repo forall -c "git lfs pull"
repo start weekly_20230905 --all
./build/prebuilts_download.sh
rm -rf ./prebuilts/rustc
git clone -b weekly_20230905 https://gitee.com/riscv-sig/rustc.git prebuilts/rustc
方法二:
使用自动化脚本下载:
说明:关于自动化脚本的使用,请参考OpenHarmony代码下载脚本介绍
git clone https://gitee.com/personal-summary/code_download.git
./code_download.sh
# 选择4.2
注意:使用脚本下载代码后一定不能执行./build/prebuilts_download.sh
,如果不小心执行了该操作需要执行以下步骤
rm prebuilts -rf
repo sync -c
repo forall -c "git lfs pull"
repo start weekly_20230905 --all
./build/prebuilts_download.sh
rm -rf ./prebuilts/rustc
git clone -b weekly_20230905 https://gitee.com/riscv-sig/rustc.git prebuilts/rustc
全量编译命令
./build.sh --product-name dayu800 --ccache
不带ohos-sdk的编译命令
./build.sh --product-name dayu800 --no-prebuilt-sdk --ccache
单模块编译
./build.sh --product-name dayu800 --ccache --build-target module
常用模块编译汇集
# musl库编译
./build.sh --product-name dayu800 --ccache --build-target musl_all
# 内核编译
./build.sh --product-name dayu800 --ccache --build-target kernel
必须符合OpenHarmony代码规范
代码合入不得影响其他产品的编译
代码合入必须要求issue,且统一创建于issue创建仓,便于管理和查看
代码合入必须经过他人review
代码提交参考:代码提交手册及示例
当前版本可在dayu800上验证,验证结果log如下
上库进度可参考master上库进度
完成build仓关于riscv64架构的配置,即musl_all的编译 --- 2023.9.15
当前实现40000/60000文件的编译,版本支持独立模块的编译 --- 2023.9.19
完成thead1520独立linux内核的编译 --- 2023.9.22
解决完成third_party/openssl基于riscv64架构无法编译的问题 --- 2023.9.27
完成解决编译过程中部分的编译bug --- 2023.10.26
完成部分其他仓的riscv64架构适配 --- 2023.10.26
部分仓添加打桩机制,方便编译,后面重新适配 --- 2023.10.26
完成third_party_libunwind库编译错误(hiperf工具的依赖导致,去除即可)以及develop下hiperf和syscap_codec工具的编译问题 --- 2023.10.26
更新提交riscv64架构的NWeb.hap --- 2023.10.27
更新llvm工具链 --- 2023.10.27
更新dayu800产品相关的配置 --- 2023.11.06
dayu800内核编译添加OpenHarmony的宏特性 --- 2023.11.08
更新drivers/android和drivers/accesstokenid到当前版本 --- 2023.11.09
更新uboot --- 2023.11.10
使能hdc --- 2023.11.10
完成内核启动到shell --- 2023.11.10
更新内核编译配置dayu800_defconfig --- 2023.11.10
startup_init仓适配riscv64架构 --- 2023.11.16
riscv64架构使用官方的llvm编译会产生lto.tmp: cannot link object files with different floating-point ABI
错误的分析及处理
prebuilts/rustc临时使用的仅支持riscv64架构的,如果要编译arm架构请执行如下如下命令
rm -rf ./prebuilts/rustc
./build/prebuilts_download.
整体编译报错:lto.tmp: cannot link object files with different floating-point ABI
的问题处理
问题原因为工具链检查eflags时候出错,更新工具链即可解决