2025年8月30日星期六
2025年8月17日星期日
2025年8月16日星期六
2025年8月15日星期五
2025年8月9日星期六
2025年8月2日星期六
2025年7月27日星期日
2025年7月26日星期六
OpenHarmony开发漫谈2——OpenHarmony标准系统开发
首先强调,本文只针对OpenHarmony的标准系统,不涉及LiteOS-M和LiteOS-A(又想骂这混在一起的命名). 文中谈到OpenHarmony系统均指标准系统。根据官方文档,OpenHarmony开发分为应用开发和设备开发。
OpenHarmony是一个对标Android的操作系统,所谓应用开发,就是开发手机/平板APP,只不过这个APP不是运行在Android系统,也不是运行在iOS系统,而是运行在OpenHarmony系统。在OpenHarmony标准系统开发APP使用的程序设计语言是ArkTS.所谓ArkTS是在TypeScript语言基础上进行了一点扩展,而TypeScript是在JavaScript上进行的扩展。所以要搞OpenHarmony应用开发要有一定的TypeScript基础。开发环境是华为找JetBrains定制的DevEco Studio.这里要说明的是,DevEco Studio 5及以上版本暂不支持OpenHarmony平台的开发,只能使用4.*版本。OpenHarmony的应用开发相对比较简单,跟着教程、书籍学习应该就能掌握。
所谓设备开发,是将OpenHarmony系统适配在各种各样不同的硬件上,可能涉及到Linux内核驱动、设备树的调整。OpenHarmony官方代码里只适配了RK3568一种MCU以及润和软件DAYU200一种开发板。如果你也用的是RK3568处理器,只是硬件设计和DAYU200不一致,那改起来还相对容易一些。如果用的是其他处理器,那难度堪比登天。
我遇到的困难主要有:
1. 文档极烂,几乎等于没有。气人的是,你看目录,很全面很完善,但你点进去看内容,每个主题只有凑数的一些文字。仿佛开发者熬了一夜准备第二天发布了,突然发现文档还没写,于是强打精神写了写。更气人的是,你看修订记录,竟然还有人修改标点符号的半角、全角之类的问题。你有这精力把内容完善一下呢?除了官方文档,业界也缺乏一套像正点原子或野火开发板那样配套的教程。正点原子的教程其实有很多地方并不严谨,但你把它看完能学到非常多的东西。可惜这些知名开发板都没有针对OpenHarmony的内容。
2. 设备开发需要使用完整的OpenHarmony系统源码,这套代码庞大臃肿,下载、编译、拷贝、压缩都需要极长的时间。我原来用的台式机,完整编译一次要8个小时,随便改点什么编译一下都需要1个小时,非常浪费时间。有时候想改点什么试试,一想要编译很久就不敢动手了。我后来参考B站教程里老师的编译服务器的配置,申请了一台48核处理器64GB RAM以及2TB硬盘的虚拟机,才解决了这个问题,现在完整编译只需要1小时左右。这庞大的代码,很多都是我并不需要的。比如我搞标准系统,根本就不需要LiteOS的内核代码。我的板卡没有图像显示,也就不需要图形图形多媒体相关的库。但不管你需要不需要,都得来回下载、拷贝、压缩解压缩这些不需要的东西。
3. 编译构建使用了大多数人比较陌生的google GN和Ninja. 编译输出信息很多,但却缺少有效帮助分析编译出错的信息,遇到编译问题极难排查。缺少像Linux的Kconfig那样清晰易用的图形化配置工具,想添加个什么组件或者裁减个什么组件,需要在很多个json格式的配置文件中修改,如果修改不统一就会出现编译错误,由于缺少有效的编译错误提示,也很难排查到底是哪里改的不对。
由于上述这些原因,OpenHarmony设备开发是个很难的事情。我对于Linux设备开发有一定的经验,还算熟练,但面对OpenHarmony都没法上手。
B站上有些Linux教学视频,还会提到“南向开发”和“北向开发”。南向开发其实就是设备开发,北向开发就是应用开发。因为在整体的架构图上,设备开发涉及的Linux内核、驱动位于OpenHarmony系统的下方,也就是地图上的南向;而应用位于OpenHarmony系统的上方,也就是地图上的北向。我认为这就是故弄玄虚,把简单的事情复杂化了。
除了前面提到的应用开发和设备开发,还有一种框架开发,应该属于应用开发的高级阶段。前面提到,应用开发主要使用TypeScript语言,但很多场合往往需要使用C++/C语言,比如需要高性能、集成第三方C++程序等。OpenHarmony系统采用了Node的N-API机制,实现TypeScript和C++/C之间的相互调用和参数传递。其中C++/C开发的部分编译成lib*.z.so文件,供ArkTS引擎调用。这方面开发需要熟悉C++/C语言,以及N-API架构,我也是刚刚开始学,感觉博大精深,也有一定的难度。
以上希望能对你了解OpenHarmony开发有所帮助。
2025年7月21日星期一
2025年7月19日星期六
2025年7月14日星期一
2025年7月10日星期四
OpenHarmony开发漫谈1——鸿蒙是什么?
半年前领导安排我参与OpenHarmony系统的开发,具体工作就是将其移植到Rockchip RK3568和RK3588平台上。在这个过程中我遇到了无数的困难,心中无尽的痛苦,感觉整个人都要抑郁了。作为被华为末位淘汰的前员工,我本不想和华为再有任何瓜葛。考虑再三我还是打算写一些文章,给予其他像我一样被迫从事OpenHarmony开发的人一些帮助。
提起鸿蒙,相信生活在中国大陆的朋友并不陌生,它是华为研发的一款操作系统,主要运行于这些年华为自家的手机上。这里我要讲的第一个知识点是——华为自家产品用的鸿蒙系统和开源的鸿蒙系统并不是同一个系统,二者有一些联系,但也有很大区别。
华为自家的鸿蒙系统,全称叫HarmonyOS, 本身应该没什么问题,毕竟华为那么多产品都在用,而且很多都是高端产品。但这个系统,华为以外的人和公司是拿不到源代码的。
华为以外的人和公司,只能拿到一个叫做OpenHarmony的系统的源代码。这个系统的中文名叫“开源鸿蒙”,也有人叫“开放鸿蒙”。它名义上归属于开放原子基金会,但绝大多数代码都是华为贡献的。它的功能要比华为自用的HarmonyOS简单得多,BUG也多得多。
我只能接触到OpenHarmony,所以我这系列文章只谈OpenHarmony, 正如我的标题所写。我后面提到鸿蒙、Harmony, 均指OpenHarmony, 不涉及华为自用的HarmonyOS。
OpenHarmony又分为标准、LiteOS-A、LiteOS-M三套系统。标准系统对标HarmonyOS、Android、iOS, 可以在高性能的处理器上运行,例如前文提到的Rockchip RK3568. 它的内核基于Linux 5.10, 所以处理器至少要能运行Linux 5.10内核才能运行标准的OpenHarmony系统。LiteOS-M运行于类似于STM32、ESP32这样的低端处理器上,对标μcOS、FreeRTOS、RTThread这样的系统。LiteOS-A介于前述两个系统之间,对标VxWorks、SylixOS这样的系统,但不提供实时性保证。
综上所述,“鸿蒙”两个字涵盖了华为自用和开源的两套系统,开源的系统又分为三个不同的版本。相信华为自用的HarmonyOS也分为很多不同的版本。华为真是营销高手,这么多系统都叫鸿蒙,因此随便哪个系统的优点,都可以当作鸿蒙的优点。比如“开源”,你说鸿蒙不开源吧,人家有个OpenHarmony是开源的。你说它开源吧,你又拿不到好用的那套系统。
我相信华为也并不想把OpenHarmony弄得多好, 毕竟弄太好了自己的优势就不明显了。国内那么多手机厂商,也没人拿OpenHarmony当作自己手机的系统,除了竞争上的考量,OpenHarmony确实不能打也可见一斑。
还有一点要恳求各位鸿蒙大拿的,希望你们在网上传授知识、答疑解惑的时候,一定要写清楚自己针对的是具体哪个系统,少让小白走一些弯路。就连华为官网上华为学堂中的一些教学视频,标题上都没有注明具体是哪个系统。我听了好久才发现他根本就不讲我希望听的标准系统。