鸿蒙(API 12 Beta2版)NDK开发【HarmonyOS ABI】硬件兼容性

HarmonyOS系统支持丰富的设备形态,支持多种架构指令集,支持多种操作系统内核;为了应用在各种HarmonyOS设备上的兼容性,本文定义了"OHOS" ABI(Application Binary Interface)的基础标准,包含如下方面。

字节序和字宽

"OHOS" ABI始终采用little-endian,32位系统采用ILP32,64位系统采用LP64。

过程调用规范

过程调用规范(Procedure Call Standard)定义了函数调用的参数传递方式,寄存器使用规则,栈操作规则等;不同C++编译器,不同操作系统,不同架构都有可能采用不同的调用规则。架构相关的函数调用规范,请参考:

  • ARM相关的调用规范请参考《[ARM32过程调用标准]》。
  • ARM64相关的调用规范请参考《[ARM64过程调用标准]》。

C++ ABI

HarmonyOS系统采用llvm项目中的libc++作为C++运行时库,在系统侧使用libc++.so库来承载,应用侧使用libc++_shared.so来承载,两侧共用一套代码,采用不同的C++命名空间。

浮点格式

采用IEE754作为浮点编码格式,针对long double的格式定义,将在[支持架构ABI]具体说明。

可执行文件格式

HarmonyOS系统采用ELF文件格式作为全系统的二进制文件格式,具体格式详情,请参考《[System V Application Binary Interface]》。CPU架构相关的格式定义,参考下面对应架构说明。

  • arm相关的elf文件格式定义请参考《[arm架构elf文件格式]》。
  • arm64相关elf文件格式定义请参考《[arm64架构elf文件格式]》。

支持架构ABI

下面介绍下当前"OHOS" ABI中支持的架构以及差异点。

armeabi-v7a

此ABI是以《[ARM架构应用二进制接口]》为基础制定,适用于32位armv7a架构的cpu,支持的核心列表可以参考《list of ARM processors》,支持arm32,thumb-2,VFPv3-D16指令。

此ABI使用-mfloat-cpu=softfp作为强制浮点数调用规则,本身不影响实际指令是否使用硬件浮点指令。Neon指令等其他扩展在此ABI中是可选的,为了更好的兼容性,建议应用开发者采用-mfpu=softvfp来编译native库 。

此ABI使用64位long double(IEEE binary64)。

arm64-v8a

此ABI是以《ARM架构应用二进制接口》为基础制定,支持AArch64指令集,默认支持neon特性。

此ABI使用-mfloat-cpu=softfp作为强制浮点数调用规则。

此ABI使用128位long double(IEEE binary128)。

x86_64

此ABI是以Intel64和IA-32 ABI为基础,支持MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1等指令,与x86相关的规范参考《System V Application Binary Interface》、《AMD64 Architecture Processor Supplement》。

此ABI使用128位long double(IEEE binary128),x86架构上很多平台采用float80格式,HarmonyOS仍然采用128bit形式。

在编译架构中指定ABI

DevEco Studio中设置

在HarmonyOS的C++工程中,找到C++代码所在项目build-profile.json5文件buildOption/externalNativeOptions字段,添加abiFilters字段:

{
    "abiType": 'stageMode',
    "buildOption": {
        "externalNativeOptions": {
            "path": "./src/main/cpp/CMakeLists.txt",
            "arguments": "",
            "abiFilters": [
                "armeabi-v7a",
                "arm64-v8a"
            ]
        }
    }
}

cmake中设置

通过SDK CAPI开发native代码的时候,在build/cmake/ohos.toolchain.cmake中定义了HarmonyOS系统一些交叉编译常用的环境变量设置。其中OHOS_ARCH变量定义了当前目标编译的ABI,可以设置下面三个ABI中的一种,arm64-v8a,armeabi-v7a,x86_64。

最后呢

很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。

而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙NEXT星河版OpenHarmony开发文档 》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点

如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。

针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细鸿蒙(OpenHarmony )手册(共计1236页)与鸿蒙(OpenHarmony )开发入门视频,帮助大家在技术的道路上更进一步。

  • 《鸿蒙 (OpenHarmony)开发学习视频》
  • 《鸿蒙生态应用开发V2.0白皮书》
  • 《鸿蒙 (OpenHarmony)开发基础到实战手册》
  • OpenHarmony北向、南向开发环境搭建
  • 《鸿蒙开发基础》
  • 《鸿蒙开发进阶》
  • 《鸿蒙开发实战》

总结

鸿蒙---作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发。

并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿

相关推荐
Random_index3 小时前
#Uniapp篇:支持纯血鸿蒙&发布&适配&UIUI
uni-app·harmonyos
鸿蒙自习室7 小时前
鸿蒙多线程开发——线程间数据通信对象02
ui·harmonyos·鸿蒙
SuperHeroWu79 小时前
【HarmonyOS】鸿蒙应用接入微博分享
华为·harmonyos·鸿蒙·微博·微博分享·微博sdk集成·sdk集成
zhangjr057512 小时前
【HarmonyOS Next】鸿蒙实用装饰器一览(一)
前端·harmonyos·arkts
Industio_触觉智能13 小时前
如何在开源鸿蒙OpenHarmony开启SELinux模式?RK3566鸿蒙开发板演示
openharmony·selinux·开源鸿蒙·鸿蒙开发板·rk3566开发板
诗歌难吟46418 小时前
初识ArkUI
harmonyos
SameX18 小时前
HarmonyOS Next 设备安全特性深度剖析学习
harmonyos
郭梧悠20 小时前
HarmonyOS(57) UI性能优化
ui·性能优化·harmonyos
郝晨妤1 天前
鸿蒙原生应用开发元服务 元服务是什么?和App的关系?(保姆级步骤)
android·ios·华为od·华为·华为云·harmonyos·鸿蒙
Peace*1 天前
HarmonyOs鸿蒙开发实战(16)=>沉浸式效果第一种方案一窗口全屏布局方案
harmonyos·鸿蒙·鸿蒙系统