# Phytium-OpenHarmony-Device **Repository Path**: phytium_embedded/phytium-openharmony-device ## Basic Information - **Project Name**: Phytium-OpenHarmony-Device - **Description**: 该项目介绍,如何在飞腾信息科技有限公司SOC硬件平台上运行 OpenHarmony 标准系统。其中腾锐D系列芯片没有图形模块,需要搭配GPU使用,目前仓库中支持的显卡包含飞腾X100套片、AMD显卡、JM9100显卡、cpu模拟mesa3D。 最新版本支持OH 5.1.0 release - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: 5.x_release - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 49 - **Forks**: 27 - **Created**: 2022-07-29 - **Last Updated**: 2025-06-17 ## Categories & Tags **Categories**: hardware **Tags**: None ## README # Phytium OpenHarmony Device 项目
# 简介 ## 项目简介 该项目介绍,如何在飞腾信息科技有限公司SOC硬件平台上运行 OpenHarmony 标准系统[OpenHamony 5.1.0 release](https://gitee.com/openharmony/docs/blob/master/zh-cn/release-notes/OpenHarmony-v5.1.0-release.md)。其中腾锐D系列芯片没有图形模块,需要搭配显卡使用,目前仓库中支持的显卡包含飞腾X100套片、AMD显卡、JM9100显卡,以及cpu模拟mesa3d方案。 - 支持GPU图形硬件加速,以及X100提供的视频解码硬件加速。 - 支持Linux kernel 5.10, Linux kernel 6.6。 - 支持cpu模拟的mesa3d方案,经优化后,在E系列的芯片上也有流畅体验。 - 支持根据GPU硬件自动加载正确的GL驱动。 - 支持根据音频硬件,自动配置ALSA mixer参数。 具体支持状态详见:[开发板简介](./device_board_phytium/README.md) ## 飞腾公司简介 飞腾信息技术有限公司(以下简称“飞腾公司”)是国内领先的自主核心芯片提供商,由中国电子信息产业集团、天津市滨海新区政府和天津先进技术研究院于2014年联合支持成立。详情请参考[飞腾官网](https://www.phytium.com.cn/homepage/index/)介绍。 * [芯片简介](./device_soc_phytium/README.md) * [开发板简介](./device_board_phytium/README.md) ## 目录结构 ``` ├── device_board_phytium #飞腾开发板代码仓库 ├── device_soc_phytium #飞腾芯片代码仓库 ├── phytium_env.sh #自动化合patch脚本 ├── vendor_phytium #飞腾开发板方案定制代码仓库 ├── FAQ #编译集成常见问题 └── ... ```
# 搭建开发环境 以腾锐D系列为例。 ## 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-v5.1.0-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 dosfstools parted libxt-dev libx11-dev xorg-dev mtools mk2fs ``` ## 1.5 执行prebuilts 进入OpenHarmony源码根目录,执行脚本,安装编译器及二进制工具。 ``` cd $PROJ_ROOT bash build/prebuilts_download.sh ``` # 飞腾设备代码下载与整合 ## 2.1 下载phytium device源码 创建一个本地目录,然后将phytium device源码下载到该目录。 ``` export PHY_DEV=$WORK_SPACE/phytium_device mkdir $PHY_DEV cd $PHY_DEV git clone git@gitee.com:phytium_embedded/phytium-openharmony-device.git git checkout 5.x_release ``` ## 2.2 获取未开源代码 **D系列设备树,以及X100的内核源码未开源,如果用到这部分代码**,需要邮件联系phytium嵌入式软件部(linan1284@phytium.com.cn)获取,获取到后拷贝到如下路径。 ``` D系列设备树文件位置:device_board_phytium/tengrui_d/dts X100内核驱动位置:vendor_phytium/gpu_model/x100/kernel_source ``` ## 2.3 整合phytium device源码 以腾锐D系列为例,执行phytium_env.sh脚本,将phytium device代码,以及针对openharmony修改的patch集成到OpenHarmony中。 ``` ./phytium_env.sh $PROJ_ROOT 0 THE OHOS_PATH_ROOT: /home/xxx/workspace/OpenHarmony THE DEVICE: tengrui_d(0) #### sync phytium env start! #### #### sync device_soc_phytium #### #### sync device_soc_phytium end #### #### sync device_board_phytium #### #### sync device_board_phytium end #### #### sync vendor_phytium #### #### sync vendor_phytium end #### ... ... #### sync phytium end! #### ``` > 这里我们需要传入两个参数: > 第一个是鸿蒙的根目录。 > 第二个是指设备ID,0对应tengrui_d;1对应tenglong_e;2对应phytiumpi-firefly >注:phytium_env.sh支持清除工程中飞腾相关代码的功能:./phytium_env.sh $PROJ_ROOT 0 1 ## 2.4 适配fstab文件 ***这个步骤非常重要,未配置正确的fstab会导致启动kernel panic!!!*** 确认存储介质的类型,参考wiki文档[Openharmony多种存储介质配置说明](https://gitee.com/phytium_embedded/phytium-openharmony-device/wikis/%E9%95%9C%E5%83%8F%E7%94%9F%E6%88%90%E4%B8%8E%E7%83%A7%E5%BD%95/Openharmony%E5%A4%9A%E7%A7%8D%E5%AD%98%E5%82%A8%E4%BB%8B%E8%B4%A8%E9%85%8D%E7%BD%AE%E8%AF%B4%E6%98%8E),根据自己需求修改fstab文件。 # 代码编译 ## 3.1 编译OpenHarmony源码 通过build.sh脚本进行编译,脚本需要带入的几个必要参数说明如下表: |参数|说明| |----|----| | --product-name |产品名称,飞腾产品对应tengrui_d,tenglong_e和phytiumpi-firefly| | --target-cpu |产品芯片架构,飞腾产品对应为arm64| | --gn-args linux_kernel_version|gn扩展参数,用于配置Linux版本,OpenHarmony 5.0.0 Release以后的版本同时支持Linux kernel 6.6和Linux kernel 5.10,5.0.0 Release默认的Linux内核版本是5.10,5.1.0 Release默认的Linux内核版本是6.6。例如,--gn-args linux_kernel_version="linux-6.6"指定编译Linux kernel 6.6| | --ccache |通过ccache加快编译速度| | --gn-args enable_notice_collection=false |取消收集开源notice的过程,建议加上| 更多的编译参数说明,可以通过./build.sh --help获取。 以下是以tengrui_d为例的编译参数。 ``` cd $PROJ_ROOT #### 如果linux内核版本是6.6 ./build.sh --product-name tengrui_d --ccache --target-cpu arm64 --gn-args linux_kernel_version="linux-6.6" --gn-args enable_notice_collection=false #### 如果linux内核版本是5.10 ./build.sh --product-name tengrui_d --ccache --target-cpu arm64 --gn-args linux_kernel_version="linux-5.10" --gn-args enable_notice_collection=false ``` 编译成功提示: ``` post_process =====build tengrui_d successful. ``` 编译生成的文件 ``` $PROJ_ROOT/out/tengrui_d/packages/phone/images/boot.img $PROJ_ROOT/out/tengrui_d/packages/phone/images/system.img $PROJ_ROOT/out/tengrui_d/packages/phone/images/vendor.img $PROJ_ROOT/out/tengrui_d/packages/phone/images/ramdisk.img ``` >注: >1. boot.img分区镜像格式为fat32,既支持boot启动也支持UEFI启动。 >2. boot分区镜像中主要包含内核镜像Image,ramdisk.img,以及uboot启动必备的设备树文件,UEFI启动必备的引导文件。 # 镜像烧写 目前提供了两种镜像烧录方式,***按分区烧录***与***整体镜像烧录***,可以根据硬件形态选择其中一种合适的烧录方式。 ## 4.1 按分区烧录 1.硬盘分区: 准备一块SATA硬盘,删除原有分区后,在linux下,使用fdsik命令分区,创建4个分区,依次为boot,system,vendor,userdata,根据实际情况设定,比如可以设定为256M,2G,1G,2G。 ``` p1 256MB for BOOT/EFI p2 2GB for system p3 1GB for vendor p4 2GB for data ``` > fdisk命令详细使用方法可自行百度谷歌,或者参考[飞腾嵌入式 LINUX 用户 > 手册](https://gitee.com/phytium_embedded/phytium-sdk/blob/master/%E9%A3%9E%E8%85%BE%E5%B5%8C%E5%85%A5%E5%BC%8FLinux%E7%94%A8%E6%88%B7%E6%89%8B%E5%86%8C.pdf)中的磁盘分区部分内容。 2.将这三个分区并格式化为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=boot.img of=/dev/sdx1 bs=1M sudo dd if=system.img of=/dev/sdx2 bs=1M sudo dd if=vendor.img of=/dev/sdx3 bs=1M ``` ## 4.2 整体镜像烧录 1.使用generate_image.sh工具打包镜像: 区别于前面提到的按分区烧写流程,我们还提供了一个镜像打包工具,可以将几个分区的img文件打包成一个镜像,通过dd或者winddows下的烧写工具将打包后的镜像一次性烧写到磁盘,不需要对磁盘分区。 工具所在位置: ``` device_board_phytium/common/tools/generate_image/generate_image.sh ``` 使用和配置方法详情,请参考wiki文档[镜像生成脚本](https://gitee.com/phytium_embedded/phytium-openharmony-device/wikis/%E9%95%9C%E5%83%8F%E7%94%9F%E6%88%90%E4%B8%8E%E7%83%A7%E5%BD%95/%E9%95%9C%E5%83%8F%E7%94%9F%E6%88%90%E8%84%9A%E6%9C%AC)。 参考命令: ``` cd out/tengrui_d/packages/phone/images/ ./generate_image.sh ``` 打包时会有如下打印信息: ``` start generate phytium_oh_xxx.img start creating empty image, please wait...... ... ... losetup loopdevice...... generate phytium_oh_xxx.img successfully!!!!!! ``` 2.将生成的整体镜像烧入磁盘 Linux环境下,使用dd命令烧录即可. ``` $sudo dd if=openharmony_img_xxx.img of=/dev/sdb bs=1M ``` 也可以在windows环境下,使用win32Diskimager、rufus、balenaEtcher等烧录工具进行烧录。 # 设备启动 将烧写好的SATA硬盘和调试串口线,连接到开发板上。上位机的串口调试工具波特率设置为115200,上电开机。 ## 5.1 Uboot启动 在开机阶段,按回车,设置uboot环境变量。 tengrui_d插显卡启动参数设置参考: ``` setenv bootargs console=ttyAMA1,115200 root=/dev/ram0 elevator=deadline rootwait rw loglevel=1 hardware=tengrui_d rootfstype=ext4 initrd=0x93000000,90M setenv bootcmd "fatload scsi 0:1 0x90100000 pd2008-devboard-dsk.dtb;fatload scsi 0:1 0x90200000 Image;fatload scsi 0:1 0x93000000 ramdisk.img;booti 0x90200000 - 0x90100000" saveenv boot ``` - bootargs中“hardware”对应平台种类,会影响fstab的选取,tenglong_e时,hardward相应改为tenglong_e,phytiumpi-firefly时改成phytiumpi-firefly。 - bootcmd中加载镜像的指令“fatload scsi 0:1 0x90200000 Image”中:“fatload”表示是从fat32格式的分区中加载数据,“scsi 0:1”表示是标号为0的scsi(sata)设备的第1个分区,“0x90200000”表示需要把数据加载到的内存地址,“Image”表示需要加载的文件。要根据不同介质和分区格式类型,灵活选择正确的指令,可以参考wiki文档[Openharmony多种存储介质配置说明](https://gitee.com/phytium_embedded/phytium-openharmony-device/wikis/%E9%95%9C%E5%83%8F%E7%94%9F%E6%88%90%E4%B8%8E%E7%83%A7%E5%BD%95/Openharmony%E5%A4%9A%E7%A7%8D%E5%AD%98%E5%82%A8%E4%BB%8B%E8%B4%A8%E9%85%8D%E7%BD%AE%E8%AF%B4%E6%98%8E)。 - 如果tenglong_e搭配gpu使用的设备树是pe2204-demo-ddr4-nopb.dtb,使用sw方案使用设备树pe2204-demo-ddr4.dtb。 ## 5.2 UEFI启动 UEFI的启动参数配置在boot分区/EFI/BOOT/grub.cfg文件中,源码路径: ``` device_board_phytium//loader/EFI/BOOT/grub.cfg ``` 默认配置的参数能支持大部分场景启动,上电后,会直接进入系统。 grub.cfg配置启动部分的参数与uboot的类似,可以根据具体情况进行调整。 >另:还可以在loader选择界面,选择Updater选项进入Updater模式。 ## 5.3 sw模式启动参数 gpu_model=sw模式下,cpu模拟mesa,需要给DC预留更多内存才能正常启动,需要在启动参数中增加相关配置。 - E2000 sw模式下,不需要搭配其他显卡,CMA需要配置512M。 ``` setenv bootargs console=ttyAMA1,115200 root=/dev/ram0 elevator=deadline rootwait rw loglevel=1 hardware=tenglong_e rootfstype=ext4 initrd=0x93000000,90M cma=512M ``` - D2000 sw模式下,还是需要搭配显卡,CMA配置1024M。此外建议将显卡配置成从主存申请内存,以x100为例,通过配置phytium-dc-drm.x100_dc_sysmem可以让x100从主存申请内存。 ``` setenv bootargs console=ttyAMA1,115200 root=/dev/ram0 elevator=deadline rootwait rw loglevel=1 hardware=tengrui_d rootfstype=ext4 initrd=0x93000000,90M cma=1024M phytium-dc-drm.x100_dc_sysmem ``` # 维护者邮箱 飞腾信息技术有限公司 xiayan1086@phytium.com.cn zhangjianwei@phytium.com.cn tangkaiwen@phytium.com.cn libowen1180@phytium.com.cn chenzigui1762@phytium.com.cn liucaicheng1476@phytium.com.cn