# Jemoic-OpenHarmony **Repository Path**: jemoic/jemoic-openharmony ## Basic Information - **Project Name**: Jemoic-OpenHarmony - **Description**: 该项目介绍,如何在飞腾的 Phytium D系列CPU + 景美的9100显卡硬件平台上运行 OpenHarmony 标准系统OpenHamony 4.1 release。 支持视频解码硬件加速, 支持Linux kernel 5.10。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 1 - **Created**: 2024-10-08 - **Last Updated**: 2025-05-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Jemoic-OpenHarmony ## 介绍 该项目介绍,如何在飞腾的 Phytium D系列CPU + 景美的9100显卡硬件平台上运行 OpenHarmony 标准系统OpenHamony 4.1 release。 支持视频解码硬件加速, 支持Linux kernel 5.10。 # 搭建开发环境 ## 1.1 硬件环境 准备一台装有ubuntu20.04系统X86主机,内存最低配置要求16G。 ## 1.2 下载repo脚本文件 1. 注册码云[gitee](https://gitee.com/signup?redirect_to_url=%2Fdashboard)账号。 2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191)。 3. 安装[git客户端](https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git)和[git-lfs](https://gitee.com/vcs-all-in-one/git-lfs?_from=gitee_search#downloading)并配置用户信息。 ``` git config --global user.name "your-name" git config --global user.email "your-email-address" git config --global credential.helper store ``` 4. 安装码云repo工具,可以执行如下命令。 ``` curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo chmod a+x /usr/local/bin/repo pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests ``` > 注:如果没有访问/usr/local/bin/目录的权限,可将repo下载至其他目录,并将其配置到环境变量。 ## 1.3 获取OpenHarmony标准系统源码 通过repo + ssh 下载源码。 ``` export WORK_SPACE=/home/xxx/workspace #替换成自己定义的workspace路径 export PROJ_ROOT=$WORK_SPACE/OpenHarmony mkdir $WORK_SPACE mkdir $PROJ_ROOT cd $PROJ_ROOT repo init -u https://gitee.com/openharmony/manifest -b refs/tags/OpenHarmony-v4.1-Release --no-repo-verify repo sync -c repo forall -c 'git lfs pull' ``` ## 1.4 获取编译工具链 使用安装包方式获取编译工具链。 ``` sudo apt-get update && sudo apt-get install binutils git git-lfs gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip m4 bc gnutls-bin python3.8 python3-pip ruby openjdk-11-jdk libtinfo5 npm ``` ## 1.5 执行prebuilts 进入OpenHarmony源码根目录,执行脚本,安装编译器及二进制工具。 ``` cd $PROJ_ROOT bash build/prebuilts_download.sh ``` # 景美,飞腾设备代码下载与整合 ## 2.1 下载Jemoic device源码 创建一个本地目录,然后将Jemoic device源码下载到该目录。 ``` export JM_DEV=$WORK_SPACE/Jemoic_device mkdir $JM_DEV cd $JM_DEV git clone https://gitee.com/jemoic/jemoic-openharmony.git ``` ## 2.2 内核适配 在OpenHarmony的编译过程中,D2000源码和9100驱动内核源码都是以patch的方式打进内核的。我们已经将内核相关的内容打包成了kernel_source文件,需要的话联系公司内部人员获取。将kernel_source文件拷贝到device_Jemoic_board/d2000/kernel_source目录,内核会跟随OpenHarmony操作系统一起编译。 kernel_source主要包括phytium_patch、phytium_standard_defconfig以及dts三个部分,可以根据项目需求和硬件平台按需获取。 1. phytium_patch:飞腾,景美通用内核补丁,包含phytium通用补丁phytium.patch,9100 gpu内核驱动补丁mwv207.patch 2. pytium_standard_defconfig:内核编译config文件。 3. dts:D2000 demo板设备树,Uboot启动需要,如果是其他定制板卡,需要找对应的板卡厂商获取设备树文件并拷贝到该文件夹,如果是linux内核5.10版本支持的主板,就不用改动这里。 ## 2.3 整合Jemoic device源码至OpenHarmony源码 执行Jemoic_env.sh脚本,将飞腾,景美device代码,以及针对openharmony修改的patch集成到OpenHarmony中。 ``` ./Jemoic_env.sh $PROJ_ROOT 0 ``` > 这里我们需要传入两个参数: > 第一个是鸿蒙的根目录。 > 第二个是指设备ID,0对应d2000;1对应e2000;2对应phytiumpi-firefly # 代码编译 ## 3.1 编译OpenHarmony源码 ``` cd $PROJ_ROOT ./build.sh --product-name d2000 --ccache --target-cpu arm64 ``` 编译成功提示: ``` post_process =====build d2000 successful. ``` 编译生成的文件 ``` $PROJ_ROOT/out/d2000/packages/phone/images/boot_uboot.img $PROJ_ROOT/out/d2000/packages/phone/images/system.img $PROJ_ROOT/out/d2000/packages/phone/images/vendor.img $PROJ_ROOT/out/d2000/packages/phone/images/ramdisk.img ``` # 镜像烧写 ## 4.1 硬盘分区 准备一块SATA硬盘,删除原有分区后,在linux下,使用fdsik命令分区,创建4个分区,依次为boot,system,vendor,userdata,根据实际情况设定,建议找一块250G的硬盘,然后四等分 > fdisk命令详细使用方法可自行百度谷歌 ## 4.2 烧录system/vendor/userdata分区 将这三个分区并格式化为ext4,sdX中的X烧写之前先用df命令确认一下是多少,可能是b,c...等,这里一定要注意不要烧错。 ``` sudo mkfs.ext4 sdx2 sudo mkfs.ext4 sdx3 sudo mkfs.ext4 sdx4 ``` > **!!!注意:** 在格式化之前,用df确认需要烧写的分区,也就是sdx中的x,可能是a、b、c。 使用dd命令将[3.1 编译OpenHarmony源码](#31-编译openharmony源码)章节编译生成的镜像文件烧写到对应分区中。 ``` sudo dd if=system.img of=/dev/sdx2 bs=1M sudo dd if=vendor.img of=/dev/sdx3 bs=1M ``` ## 4.3. 烧录boot分区 ### 4.3.1 UEFI启动 需要先用make_boot.sh脚本生成UEFI启动下的boot_efi.img,然后将boot分区格式化成vfat,最后烧入boot镜像文件。 ``` ./make_boot.sh ./ efi sudo mkfs.vfat /dev/sdx1 sudo dd if=boot_efi.img of=/dev/sdx1 bs=1M ``` ## 4.4 镜像打包工具(目前验证不通过,请用上面的方法烧录) 区别于前面提到的烧写流程,我们还提供了一个镜像打包工具,可以将几个分区的img文件打包成一个镜像,通过dd或者winddows下的烧写工具将打包后的镜像一次性烧写到磁盘,不需要对磁盘分区。 工具所在位置: ``` device_Jemoic_board/common/tools/generate_image/generate_image.sh ``` # 设备启动 将烧写好的SATA硬盘和调试串口线,连接到开发板上。上位机的串口调试工具波特率设置为115200,上电开机。 ## 5.1 UEFI启动 启动参数已经在烧写EFI分区时已写好,上电后,会直接进入系统。