0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

开发板如何适配OpenHarmony 3.2

OpenAtom OpenHarmony 来源:未知 2023-04-04 01:35 次阅读

点击蓝字 ╳ 关注我们


开源项目 OpenHarmony
是每个人的 OpenHarmony

陆道

诚迈科技高级技术专家

简介

OpenAtom OpenHarmony(以下简称“OpenHarmony”) 3.2 Beta5版本在OpenHarmony 3.1 Release版本的基础上,有以下改变:性能上有很大的提升、标准系统应用开发框架增强、标准系统分布式能力增强。
本文介绍诚迈科技基于RK3568设计的HCPAD-100开发板以及基于RK3566设计的中控屏HongzPad2022在OpenHarmony 3.2 Beta5版本上的适配过程。
涉及到开发板的添加/u-boot /linux-5.10/分区表/根文件系统/显示/触摸/USB的移植过程以及OpenHarmony所依赖的驱动特性介绍。

如何添加新的开发板进行编译

参照DAYU200的工程配置文件我们新建自己的编译命令。
1)在device/board/目录新建archermind目录,新建rk3568/rk3588/rk3399目录,并添加相关的工程文件。


2)在vendor目录新建archermind目录。新建以下几个目录,并添加相关的工程文件。


3)修改vendor/archermind/hongzos_rk3568/config.json文件,product_name改成hongzos_rk3568,device_build_path改成第一步新建的目录。
{
"product_name": "hongzos_rk3568",
"device_company": "rockchip",
"device_build_path": "device/board/archermind/rk3568",
"target_cpu": "arm",
"type": "standard",
"version": "3.0",
"board":"rk3568",

通过./build.sh --product-name hongzos_rk3568来编译出我们自己开发板的镜像,编译完后对应开发板的image镜像放在out/rk3568/packages/phone/目录。相关代码放在文章最后的参考链接。


U-Boot移植

U-boot是通过二进制镜像直接放在device/board/hihope/rk3568/loader目录下的,这个目录下涉及到文件如下:

1)下载rk官方发布的uboot源码
gitclonehttps://github.com/rockchip-linux/u-boot.git

2)修改make.sh, 指定RKBIN_TOOLS的路径
RKBIN_TOOLS=rkbin/tools

3)增加代码读取ramdisk分区到指定的内存位置,修改cmd/pxe.c
#include "boot_rkimg.h"
#define BLK_CNT(_num_bytes, _block_size)
((_num_bytes + _block_size - 1) / _block_size)


static char* load_ramdisk_from_partition(void *buffer)
{
struct blk_desc *desc = rockchip_get_bootdev();
disk_partition_t part_ramdisk_boot;
static char initrd_str[28];
long blk_cnt = 0, blks_read = 0;
long blk_start = 0;
if (part_get_info_by_name(desc, "ramdisk", &part_ramdisk_boot) < 0) {
printf("No ramdisk partition ");
return NULL;
}
blk_cnt = part_ramdisk_boot.size;
blk_start = part_ramdisk_boot.start;
printf("Load from partition ' ramdisk ' to address 0x%p, count: %ld total block(s) by ludao ", buffer, blk_cnt);
blks_read = blk_dread(desc, blk_start, blk_cnt, buffer);
if (blks_read != blk_cnt) {
return NULL;
}
printf("Read from partition ' ramdisk ' done, from 0x%lx total block(s) 0x%lx ", blk_start, blk_cnt);
sprintf(initrd_str, "0x%p:0x%lx", buffer, blk_cnt*(part_ramdisk_boot.blksz));
printf("Openharmony ramdisk_addr_r = %s ", initrd_str);


return initrd_str;
}
static int label_boot(cmd_tbl_t *cmdtp, struct pxe_label *label)
if (label->initrd) {
if (get_relfile_envaddr(cmdtp, label->initrd, "ramdisk_addr_r") < 0) {
printf("Skipping %s for failure retrieving initrd ",
label->name);
return 1;
}


bootm_argv[2] = initrd_str;
strncpy(bootm_argv[2], env_get("ramdisk_addr_r"), 18);
strcat(bootm_argv[2], ":");
strncat(bootm_argv[2], env_get("filesize"), 9);
}else{
void *buffer = (void *)env_get_ulong("ramdisk_addr_r", 16, 0);
bootm_argv[2] = load_ramdisk_from_partition(buffer);
if(bootm_argv[2]){
printk("initrd = %s ", bootm_argv[2]);
}
}

4)指定交叉编译器和平台开始编译,编译完成后根目录会生成u-boot.bin
./make.shCROSS_COMPILE=aarch64-linux-gnu-rk3568
所有相关代码已经放到开源社区,大家可以下载下来直接编译使用,相关代码放在文章最后的参考链接。

Linux-5.10移植

1)内核编译脚本
linux编译脚本的是放在device/board/hihope/rk3568/kernel目录下的build_kernel.sh文件,由于kernel/linux/linux-5.10是公共代码,OpenHarmony编译脚本是通过打补丁的方式来适配不同平台,不同的平台有自己的内核补丁。
编译脚本会先把kernel/linux/linux-5.10拷贝到out/kernel/src_tmp/linux-5.10/,然后打上3568的内核补丁patch -p1 < kernel/linux/patches/linux-5.10/rk3568_patch/kernel.patch
后编译生成自己的镜像,不利于我们开发,我们自己开发过程中做如下修改,这样方便我们开发过程中的修改。
先进入kernel/linux/linux-5.10目录
patch -p1 < kernel/linux/patches/linux-5.10/rk3568_patch/kernel.patch
修改device/board/hihope/rk3568/kernel/build_kernel.sh
注释掉
//patch-p1< ${KERNEL_PATCH}
2)设备树的定制,首先我们需要有自己的板子的设备树例如rk3568-chujue-linux.dts
把设备树放到kernel/linux/linux-5.10/arch/arm64/boot/dts/rockchip/目录
修改kernel/linux/linux-5.10/ make-ohos.sh


model_list=(
"TB-RK3568X0 arm64 0xfe660000 rk3568-toybrick-x0-linux Image rockchip_linux_defconfig"
"TB-RK3568X10 arm64 0xfe660000 rk3568-toybrick-x10-linux Image rockchip_linux_defconfig"
)
修改其中的TB-RK3568X0,把rk3568-toybrick-x0-linux改成我们自己的rk3568-chujue-linux.dts,
TB-RK3568X0是在device/board/hihope/rk3568/kernel/build_kernel.sh指定的
这样编程后生产设备树就是我们自己开发板的,设备树如果不对,机器将会无法开机,U-boot也会无法开启。

3)内核config的定制
文件位置kernel/linux/config/linux-5.10/arch/arm64/configs/rk3568_standard_defconfig
3.2 显示设备需要打开CONFIG_DRM_PANEL_SIMPLE配置显示才能正常显示
CONFIG_DRM_PANEL_SIMPLE = y
kernel/linux/linux-5.10/drivers/gpu/drm/panel/panel-simple.c
注释掉
//intpanel_simple_loader_protect(structdrm_panel*panel)
4)启动Logo定制
修改device/board/hihope/rk3568/kernel目录的图片即可

5)启动参数的定制
kernel/linux/linux-5.10/ make-ohos.sh
cmdline="appendearlycon=uart8250,mmio32,${uart}root=PARTUUID=614e0000-0000-4b53-8000-1d28000054a9rwrootwaitrootfstype=ext4

分区表

1)rk3568采样的是GPT格式的分区表,v3.2新增加了三个分区sys_prod, chip-prod,ramdisk
通过修改以下文件来修改分区表的配置,我们可以直接使用dayu开发板的分区表。
device/board/hihope/rk3568/loader/parameter.txt
FIRMWARE_VER:11.0
MACHINE_MODEL:rk3568_r
MACHINE_ID:007
MANUFACTURER: rockchip
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: rk3568_r
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
TYPE: GPT
CMDLINE:mtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00002000@0x00004000(misc),0x00003000@0x00006000(resource),0x00030000@0x00009000(boot_linux:bootable),0x00002000@0x00039000(ramdisk),0x00400000@0x0003B000(system),0x00200000@0x0043B000(vendor),0x00019000@0x0063B000(sys-prod),0x00019000@0x00654000(chip-prod),0x00010000@0x0066D000(updater),-@0x0067D000(userdata:grow)
uuid:system=614e0000-0000-4b53-8000-1d28000054a9
uuid:boot_linux=a2d37d82-51e0-420d-83f5-470db993dd35
device/board/hihope/rk3568/cfg/fstab.rk3568
# fstab file.
#
/dev/block/platform/fe310000.sdhci/by-name/system /usr ext4 ro,barrier=1 wait,required
/dev/block/platform/fe310000.sdhci/by-name/vendor /vendor ext4 ro,barrier=1 wait,required
/dev/block/platform/fe310000.sdhci/by-name/sys-prod /sys_prod ext4 ro,barrier=1 wait
/dev/block/platform/fe310000.sdhci/by-name/chip-prod /chip_prod ext4 ro,barrier=1 wait
/dev/block/platform/fe310000.sdhci/by-name/userdata /data f2fs discard,noatime,nosuid,nodev,fscrypt=2aes-256-xts wait,check,fileencryption=software,quota
/dev/block/platform/fe310000.sdhci/by-name/misc/miscnonenonewait,required
2)如何修改RKDevTool.exe工具加载的分区表
parameter.txt文件中的CMDLINE字段中有mtdparts=,
其中0x00002000@0x00002000(uboot)的括号里面是分区的名字,@后面的0x00002000是分区的开始地址,以4k为单位的偏移地址,@前面是分区的大小,
注意修改的时候要注意连续性,不要有重叠的位置。

根文件系统

1)ramdisk从3.1到3.2的变化
3.1中ramdisk.Img是放在out/kernel/src_tmp/linux-5.10/boot_linux/目录下被打包到boot_linux.img中。
3.2的ramdisk.Img是直接放在单独的分区里面,由Boot在开机的模式不同的情况下选择加载不同的根文件系统
2)如何修改ramdisk
在.gn文件里面添加对应的配置文件,生成的文件将会被放到ramdisk镜像里面
    image_list += [
"ramdisk",
"updater_ramdisk",
]

显示模块适配

1)Devices tree配置
通过设备树来打开mipi 通道1的配置和hdmi的设备,OpenHarmony 3.2 Beta5 是支持多屏异显的,OpenHarmony 3.1 Release 不支持。
&dsi1 {
status = "okay";
//rockchip,lane-rate = <200>;
dsi1_panel: panel@0 {
status = "okay";
compatible = "simple-panel-dsi";
reg = <0>;
backlight = <&backlight>;
reset-delay-ms = <60>;
enable-delay-ms = <60>;
prepare-delay-ms = <60>;
unprepare-delay-ms = <60>;
disable-delay-ms = <60>;
dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>;
dsi,format = ;
dsi,lanes = <4>;
panel-init-sequence = [
05 78 01 11
05 14 01 29
];


panel-exit-sequence = [
05 00 01 28
05 00 01 10
];


disp_timings1: display-timings {
native-mode = <&dsi1_timing0>;
dsi1_timing0: timing0 {
clock-frequency = <150000000>;
hactive = <1200>;
vactive = <1920>;
hback-porch = <120>;
hfront-porch = <10>;
vback-porch = <10>;


&hdmi {
status = "okay";
rockchip,phy-table =
<92812500 0x8009 0x0000 0x0270>,
<165000000 0x800b 0x0000 0x026d>,
<185625000 0x800b 0x0000 0x01ed>,
<297000000 0x800b 0x0000 0x01ad>,
<594000000 0x8029 0x0000 0x0088>,
<000000000 0x0000 0x0000 0x0000>;
};
2)内核打开相关的配置
3.2中默认关闭了CONFIG_DRM_PANEL_SIMPLE,但是我们的设备数中字段需要依赖这个配置项,所以需要打开它。
CONFIG_DRM_PANEL_SIMPLE=y
CONFIG_DRM_ANALOGIX_DP=y
CONFIG_DRM_DW_HDMI=y
CONFIG_DRM_DW_HDMI_I2S_AUDIO=y
CONFIG_DRM_DW_HDMI_CEC=y
CONFIG_DRM_DW_MIPI_DSI=y
3)HAL层的适配
源码结构


显示HDI需要适配两部分:gralloc 和 display_device。

display device适配
display device模块提供显示设备管理、layer管理、硬件加速等功能。
drm设备节点定义在//device/soc/rockchip/rk3568/hardware/display/src/display_device/drm_device.cpp文件中,可根据实际情况修改
std::shared_ptr DrmDevice::Create()
{
DISPLAY_DEBUGLOG();
if (mDrmFd == nullptr) {
const std::string name("rockchip");
int drmFd = open("/dev/dri/card0", O_RDWR | O_CLOEXEC); // drmOpen(name.c_str(), nullptr);
}
如开发板不支持硬件合成或是有问题的时候,需要在drm_display.cpp文件中跳过gfx的初始化。
int32_t DrmDisplay::Init()
{
...
...
ret = preComp->Init(); // gfx初始化,这里需要跳过
DISPLAY_CHK_RETURN((ret != DISPLAY_SUCCESS), DISPLAY_FAILURE, DISPLAY_LOGE("can not init HdiGfxComposition")); // 或者不判断返回值
}
同时在//device/soc/rockchip/rk3568/hardware/display/src//hdi_gfx_composition.cpp文件中修改set_layers方法,全部使用CPU合成显示。
int32_t HdiGfxComposition::vector &layers, HdiLayer &clientLayer)
{
#if 0 // CPU合成
layer->SetDeviceSelect(COMPOSITION_CLIENT);
#else
if ((layer->GetCompositionType() != COMPOSITION_VIDEO) &&
(layer->GetCompositionType() != COMPOSITION_CURSOR)) {
layer->SetDeviceSelect(COMPOSITION_DEVICE);
} else {
layer->SetDeviceSelect(layer->GetCompositionType());
}
#endif
}
gralloc适配
gralloc模块提供显示内存管理功能,OpenHarmony提供了使用与Hi3516DV300参考实现。
drm设备节点定义在//device/soc/rockchip/rk3568/hardware/display/src/display_gralloc/display_gralloc_gbm.c文件中,可根据实际情况修改
constchar*g_drmFileNode="/dev/dri/card0";

1)Devices tree配置
我们的开发板使用的是gt9XX的触摸屏,所以我们把相关的信息配置进去。
   gt9xx: gt911@14 {
compatible = "goodix,gt9xx";
reg = <0x14>;
pinctrl-names = "default";
pinctrl-0 = <&tp_gpio>;
goodix_irq_gpio = <&gpio3 RK_PB4 IRQ_TYPE_LEVEL_LOW>;
goodix_rst_gpio = <&gpio3 RK_PB3 GPIO_ACTIVE_HIGH>;
/*touchscreen-inverted-x;*/
status = "okay";
};
2)内核驱动配置
打开内核配置CONFIG_TOUCHSCREEN_GT9XX=y
驱动源码里面把所有ABS_MT_WIDTH_MAJOR相关的属性去掉。3.2不识别有这个属性的
输入设备。
kernel/linux/linux-5.10/drivers/input/touchscreen/gt9xx/gt9xx.c
//input_set_abs_params(ts->input_dev,ABS_MT_WIDTH_MAJOR,0,255,0,0);

USB调试适配

1)调试工具
开发板的USB host是标准的linux驱动架构,OpenHarmony 对这块基本不需要做修改,USB的设备包括鼠标,sdcard都会默认支持。
USB 作为devices,最常用的功能是连接电脑,用电脑端的hdc shell来调试设备,这样我们才能在后续工作中抓取日志分析。
hdc shell “dmesg -Tw” 实时获取kernel 日志
hdc shell “hilog” 获取OpenHarmony 日志

2)USB devices设备的端口选择
init.rk3568.usb.cfg文件中有Usb初始化参数设置,其中最主要的是
sys.usb.controller设置成正确的基地址以及设备类型
"setparamsys.usb.controllerfcc00000.dwc3"

总结

至此我们的开发板拥有自己的开发基线,也已经可以进入到桌面,触摸屏,USB鼠标,hdc调试都已经正常工作,我们接下来进行下一阶段的适配工作。

参考链接

以下是源码仓库地址

https://gitee.com/harchermindy/vendor_archermind

https://gitee.com/harchermindy/device_board_archermind

https://gitee.com/harchermindy/uboot-rk-openharmony

https://gitee.com/harchermindy/linux-5.10



原文标题:开发板如何适配OpenHarmony 3.2

文章出处:【微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 鸿蒙
    +关注

    关注

    57

    文章

    2306

    浏览量

    42735
  • OpenHarmony
    +关注

    关注

    25

    文章

    3658

    浏览量

    16132

原文标题:开发板如何适配OpenHarmony 3.2

文章出处:【微信号:gh_e4f28cfa3159,微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何在开源鸿蒙OpenHarmony开启SELinux模式?RK3566鸿蒙开发板演示

    本文介绍开源鸿蒙OpenHarmony系统下,开启/关闭SELinux权限的方法,触觉智能Purple Pi OH鸿蒙开发板演示,已适配全新OpenHarmony5.0 Release
    的头像 发表于 11-18 19:03 155次阅读
    如何在开源鸿蒙<b class='flag-5'>OpenHarmony</b>开启SELinux模式?RK3566鸿蒙<b class='flag-5'>开发板</b>演示

    触觉智能Purple Pi OH鸿蒙开发板成功适配OpenHarmony5.0 Release,开启新征程

    触觉智能Purple Pi OH鸿蒙开发板,成功适配OpenHarmony5.0 Release版本!为大家带来OpenHarmony5.0特性讲解!关注触觉智能,为大家带来更多
    的头像 发表于 10-25 10:51 305次阅读
    触觉智能Purple Pi OH鸿蒙<b class='flag-5'>开发板</b>成功<b class='flag-5'>适配</b><b class='flag-5'>OpenHarmony</b>5.0 Release,开启新征程

    OpenHarmony 明星开发板和应用招募启动,等你来!

    为助力企业和开发者快速找到好用的开发板和应用,推动OpenHarmony生态发展,现启动 “OpenHarmony 明星开发板和应用招募”评
    发表于 09-14 15:21

    ElfBoard技术贴|在NXP源码基础上适配ELF 1开发板的按键功能

    本次源码适配工作是在NXPi.MX6ULLEVK评估的Linux内核源码(特定版本:Linux-imx_4.1.15)基础上进行的。主要目标是调整功能接口引脚配置,以适应ELF1开发板。接下来
    的头像 发表于 07-10 09:54 538次阅读
    ElfBoard技术贴|在NXP源码基础上<b class='flag-5'>适配</b>ELF 1<b class='flag-5'>开发板</b>的按键功能

    鸿蒙OpenHarmony开发板解析:【芯片解决方案】

    芯片解决方案是指基于某款开发板的完整解决方案,包含驱动、设备侧接口适配开发板sdk等。
    的头像 发表于 05-10 15:42 1159次阅读
    鸿蒙<b class='flag-5'>OpenHarmony</b><b class='flag-5'>开发板</b>解析:【芯片解决方案】

    鸿蒙OpenHarmony【基于Hi3516DV300开发板(时钟应用开发)】

    如何快速搭建基于OpenHarmony标准系统(Hi3516DV300开发板)的应用开发环境,并基于一个时钟APP示例逐步展示应用的创建、开发、调试和安装等流程。
    的头像 发表于 05-08 15:27 1113次阅读
    鸿蒙<b class='flag-5'>OpenHarmony</b>【基于Hi3516DV300<b class='flag-5'>开发板</b>(时钟应用<b class='flag-5'>开发</b>)】

    鸿蒙OpenHarmony【集成三方SDK】 (基于Hi3861开发板

    OpenHarmony致力于打造一套更加开放完善的IoT生态系统,为此OpenHarmony规划了一组目录,用于将各厂商的SDK集成到OpenHarmony中。本文档基于Hi3861开发板
    的头像 发表于 04-24 15:11 1046次阅读
    鸿蒙<b class='flag-5'>OpenHarmony</b>【集成三方SDK】 (基于Hi3861<b class='flag-5'>开发板</b>)

    OpenHarmony鸿蒙南向开发案例:【智能猫眼(基于Hi3518开发板)】

    基于Hi3518开发板,使用开源OpenHarmony开发的RTSP协议流媒体应用。达到将Hi3518开发板中摄像头获取的数据通过RTSP协议传输到手机并显示 。
    的头像 发表于 04-22 15:46 1920次阅读
    <b class='flag-5'>OpenHarmony</b>鸿蒙南向<b class='flag-5'>开发</b>案例:【智能猫眼(基于Hi3518<b class='flag-5'>开发板</b>)】

    OpenHarmony鸿蒙南向开发案例:【智能猫眼(基于3516开发板)】

    基于Hi3516开发板,使用开源OpenHarmony开发的RTSP协议流媒体应用。达到将Hi3516开发板中摄像头获取的数据通过RTSP协议传输到手机并显示 。
    的头像 发表于 04-19 22:01 547次阅读
    <b class='flag-5'>OpenHarmony</b>鸿蒙南向<b class='flag-5'>开发</b>案例:【智能猫眼(基于3516<b class='flag-5'>开发板</b>)】

    OpenHarmony南向开发案例:【智能油烟机】

    基于Hi3516开发板,使用开源OpenHarmony开发的应用。
    的头像 发表于 04-18 15:54 1002次阅读
    <b class='flag-5'>OpenHarmony</b>南向<b class='flag-5'>开发</b>案例:【智能油烟机】

    适配开源鸿蒙OpenHarmony 4.1,Purple Pi OH开发板与时俱进

    2024年4月3日,备受瞩目的OpenHarmony4.1release版本正式发布。值得一提的是,触觉智能的PurplePiOH已经成功适配了这一新版本,展现出强大的兼容性和前沿的技术实力。此次
    的头像 发表于 04-18 08:33 705次阅读
    已<b class='flag-5'>适配</b>开源鸿蒙<b class='flag-5'>OpenHarmony</b> 4.1,Purple Pi OH<b class='flag-5'>开发板</b>与时俱进

    OpenHarmony南向嵌入式:【XR806开发板指导文档】

    XR806_OpenHarmony开发板是基于XR806芯片设计开发的参考评估,身集成了XR806芯片、WiFi/BT双天线、供电系统、按钮及LED等,并引出了所有可用引脚,可供
    的头像 发表于 04-14 09:25 738次阅读
    <b class='flag-5'>OpenHarmony</b>南向嵌入式:【XR806<b class='flag-5'>开发板</b>指导文档】

    【七】Purple Pi OH开发板带你7天入门OpenHarmony

    进入OpenHarmony系统的世界,对于许多开发者来说,是一次全新且充满挑战的旅程。通过PurplePiOH开发板这个窗口,我们不仅能够触摸到硬件本身的魅力,还有机会深入探索
    的头像 发表于 03-22 08:31 375次阅读
    【七】Purple Pi OH<b class='flag-5'>开发板</b>带你7天入门<b class='flag-5'>OpenHarmony</b>!

    OpenHarmony鸿蒙实战】在RK3399开发板实现智能门禁人脸识别

    基于RK3399开发板,使用OpenHarmony3.0-LTS开发的应用。通过定时获取摄像头数据,实现人脸识别比对等功能。
    的头像 发表于 03-20 17:38 1174次阅读
    【<b class='flag-5'>OpenHarmony</b>鸿蒙实战】在RK3399<b class='flag-5'>开发板</b>实现智能门禁人脸识别

    开源大师兄开发板通过 OpenHarmony 3.2 Release版本兼容性测评

    近期,江苏润开鸿数字科技有限公司(以下简称“润开鸿”)开源⼤师兄开发板顺利通过OpenHarmony3.2.1Release版本兼容性测评,为基于开源大师兄开发板研发更多可释放该系统版本新特性的⽣态
    的头像 发表于 01-20 08:02 849次阅读
    开源大师兄<b class='flag-5'>开发板</b>通过 <b class='flag-5'>OpenHarmony</b> <b class='flag-5'>3.2</b> Release版本兼容性测评