# Phytium-OpenHarmony-device **Repository Path**: lesliewow/phytium-openharmony-device ## Basic Information - **Project Name**: Phytium-OpenHarmony-device - **Description**: 该项目介绍,如何在飞腾信息技术有限公司的嵌入式芯片平台上运行OpenHarmony 标准系统。该项目支持芯片内置提供的视频解码硬件加速,支持硬件光标,支持Linux kernel 5.10。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 12 - **Created**: 2024-09-18 - **Last Updated**: 2024-10-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Phytium-OH_4.0_release-E2000 Demo开发板编译集成方法 # 搭建开发环境 ## 1.1 硬件环境 工欲善其事必先利其器,所以首先准备一台装有ubuntu20.04系统X86主机,内存最低配置要求16G。 > 硬件配置肯定是多多益善了,配置越高,编译过程就更加的纵享丝滑了! ## 1.2 下载repo脚本文件 1. 注册码云gitee账号。 2. 注册码云SSH公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191)。 3. 安装[git](https://gitee.com/openharmony/docs/blob/master/zh-cn/release-notes/OpenHarmony-v3.2-beta1.md#https://gitee.com/link?target=https%3A%2F%2Fgit-scm.com%2Fbook%2Fzh%2Fv2%2F%25E8%25B5%25B7%25E6%25AD%25A5-%25E5%25AE%2589%25E8%25A3%2585-Git)客户端和[git-lfs](https://gitee.com/vcs-all-in-one/git-lfs?_from=gitee_search#downloading)并配置用户信息。 ``` git config --global user.name "yourname" 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 ``` ## 1.3 获取OpenHarmony标准系统源码 推荐版本[OpenHamony 4.0 release](https://gitee.com/openharmony/docs/blob/master/zh-cn/release-notes/OpenHarmony-v4.0-release.md)。 通过repo + ssh 下载(需注册公钥,请参考[码云帮助中心](https://gitee.com/help/articles/4191))。 ``` export WORK_SPACE=/home/xxx/OpenHarmony #替换成自己定义的workspace路径 export PROJ_ROOT=$WORK_SPACE/4.0-release mkdir $WORK_SPACE mkdir $PROJ_ROOT cd $PROJ_ROOT repo init -u https://gitee.com/openharmony/manifest -b refs/tags/OpenHarmony-v4.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 kpartx genext2fs ``` ## 1.5 执行prebuilts 在源码根目录下执行脚本,安装编译器及二进制工具。 ``` cd $PROJ_ROOT bash build/prebuilts_download.sh ``` ---
# 代码下载与整合 ## 2.1 下载phytium OH_4.0_release E2000适配源码 创建存放phytiym phytium OH_4.0_release源码的目录,进到该目录,下载phytium OH_4.0_release E2000适配源码: ``` export PHY_DEV=$WORK_SPACE/phytium_device mkdir $PHY_DEV cd $PHY_DEV git clone https://gitee.com/phytium_embedded/phytium-openharmony-device.git ``` ## 2.2 整合phytiym device vendor相关源码 - 通过前面的步骤,我们下载好了相关飞腾部分的修改。是时候将其和入到鸿蒙主干了。这里我们贴心的为开发者准备了一键构建脚本,我们这里执行脚本! ``` ./phytium_env.sh $PROJ_ROOT 1 THE OHOS_PATH_ROOT /home/xxx/OpenHarmony/4.0-release #### 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 kernel #### #### sync kernel end #### #### applay 0001_drivers_peripheral.patch #### #### applay 0001_foundation_arkui_ace_engine.patch #### #### applay 0001_foundation_graphic_graphic_2d.patch #### #### sync phytium end! #### ``` > 这里我们需要传入两个参数: > 第一个是鸿蒙的根目录。 > 第二个是指设备ID,1对应e2000,2对应phytiumpi-firefly - 代码中默认是文件系统是存放在sata磁盘,使用其他不同的存储介质,fstab文件及启动参数会有差异,更换不同的介质需要修改对应的fstab文件,具体修改方法参考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)。 ---
# 代码编译 ## 3.1 OpenHarmony编译 ``` cd $PROJ_ROOT ./build.sh --product-name e2000 --ccache --target-cpu arm64 ``` 编译成功提示: ``` post_process =====build e2000 successful. ``` 编译完成,我们进入到out目录查看生成的文件: ``` # cd out/e2000/packages/phone/images/ # tree . ├── kernel │   ├── dtb │   │   ├── e2000d-demo-board.dtb │   │   └── e2000q-demo-board.dtb │   ├── EFI │   │   └── BOOT │   │   ├── bootaa64.efi │   │   └── grub.cfg │   └── Image ├── boot_uboot.img ├── ramdisk.img ├── system.img ├── updater.img ├── userdata.img └── vendor.img 4 directories, 10 files ``` > 可以看到,其中生成了内核和系统相关镜像文件! 默认只会生成uboot启动需要的boot_uboot.img,UEFI启动的boot镜像需要通过手动执行make_boot.sh脚本进行生成,脚本运行需要sudo权限,请用有sudo权限的账户执行该脚本。 ``` cd out/e2000/packages/phone/images/ sh ./make_boot.sh . efi ``` 脚本执行日志如下参考,执行成功后会在当前目录下生成boot_efi.img ``` >>>>> making efi boot image... src path:./boot/, dis image name:./boot_efi.img, size:64M, block size:4096 mkfs.fat 4.1 (2017-01-24) mkfs.fat: warning - lowercase labels might not work properly with DOS or Windows [sudo] password for xxxx: <<<<< make efi boot image success. ```
# 镜像烧写 目前提供了两种镜像烧录方式,按分区烧录与整体镜像烧录,可以根据硬件形态选择合适的烧录方式。 ## 4.1 按分区烧录 1.硬盘分区 准备一块SATA硬盘,删除原有分区后,在linux环境下,使用fdsik命令分区,创建4个分区,依次为boot,system,vendor,userdata,根据实际情况设定,比如可以设定为500M,3G,1G,10G。p1 500MB for BOOT/EFIp2 3GB for systemp3 1G for vendorp4 10G 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 sdx1 sudo mkfs.ext4 sdx2 sudo mkfs.ext4 sdx3 sudo mkfs.ext4 sdx4 ``` 使用dd命令将[3.1 OpenHarmony编译](#31-openharmony编译)章节编译生成的镜像文件烧写到对应分区中。 ``` sudo dd if=boot_uboot.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 ``` 如果是UEFI启动,烧录boot分区时,需要烧入boot_efi.img >重要的事情说三篇,不要烧录userdata分区!只需要将sdx4格式化为ext4格式就OK了! ## 4.2 整体镜像烧录 1.使用generate_image.sh工具打包镜像。 确保你的账户有sudo权限,进入镜像生成目录,执行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/e2000/packages/phone/images/ #uboot启动 ./generate_image.sh #UEFI启动 ./generate_image.sh efi ``` 打包时会有如下打印信息: ``` 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=phytium_oh_xxx.img of=/dev/sdb bs=1M ``` 也可以在windows环境下,使用win32Diskimager、rufus、balenaEtcher等烧录工具进行烧录。 # 设备启动 将烧写好的SATA硬盘, 连接串口线,连接到e2000 EVB板上。上位机的串口调试工具波特率设置为115200,上电开机。 ## 5.1 Uboot启动 在开机阶段,按回车,设置uboot环境变量 ``` setenv bootargs console=ttyAMA1,115200 earlycon=p1011,0x2800d000 root=/dev/ram0 elevator=deadline rootwait rw loglevel=6 hardware=e2000 rootfstype=ext4 initrd=0x93000000,90M cma=256M setenv bootcmd "ext4load scsi 0:1 0x90100000 e2000q-demo-board.dtb;ext4load scsi 0:1 0x90200000 Image;ext4load scsi 0:1 0x93000000 ramdisk.img;booti 0x90200000 - 0x90100000" saveenv boot ``` > 这里的设备树,以手上实际的调试设备为准!因为e2000系列有不同的版本,这里我的测试板子是e2000q,所以设备树就是e2000q-demo-board.dtb了! ## 5.2 UEFI启动 启动参数已经在烧写EFI分区时已写好,上电后,会直接进入系统。 ---
# 维护者邮箱 飞腾信息技术有限公司 zhangjianwei@phytium.com.cn tangkaiwen@phytium.com.cn xiayan1086@phytium.com.cn libowen1180@phytium.com.cn chenzigui1762@phytium.com.cn