E2000/飞腾派运行OpenHarmony 4.0

介绍

该项目介绍了如何在飞腾嵌入式开发平台上运行OpenHarmony 4.0 release标准系统。 该项目支持芯片内置提供的视频解码硬件加速,支持硬件光标加速,基于Linux kernel 5.10开发。

代码结构

├── device_board_phytium #飞腾开发板代码仓库
├── device_soc_phytium #飞腾芯片代码仓库
├── phytium_env.sh #自动化合patch脚本
├── vendor_phytium #飞腾开发板方案定制代码仓库
├── FAQ #编译集成常见问题
└── …

搭建开发环境

1.1硬件环境

工欲善其事必先利其器,所以首先准备一台装有ubuntu20.04系统X86主机,内存最低配置要求16G。

硬件配置肯定是多多益善了,配置越高,编译过程就更加的纵享丝滑了!

1.2 下载repo脚本文件

注册码云gitee账号。
注册码云SSH公钥,请参考码云帮助中心。
安装git客户端和git-lfs并配置用户信息。

git config --global user.name “yourname”
git config --global user.email “your-email-address”
git config --global credential.helper store

安装码云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。

通过repo + ssh 下载(需注册公钥,请参考码云帮助中心)。

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.代码下载与整合

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文件,具体修改方法参考《OpenHarmony多种存储介质配置说明》。

3.代码编译

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.镜像烧写

目前提供了两种镜像烧录方式,按分区烧录与整体镜像烧录,可以根据硬件形态选择合适的烧录方式。

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 用户 手册中的磁盘分区部分内容。

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编译章节编译生成的镜像文件烧写到对应分区中。

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脚本

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等烧录工具进行烧录。

5.设备启动

将烧写好的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分区时已写好,上电后,会直接进入系统。

代码代码仓库

https://gitee.com/phytium_embedded/phytium-openharmony-device

这个错误信息表明在编译C/C++代码时,编译器无法找到某个头文件的路径。具体来说,错误信息提示在文件 `/home/hxl/code/E2000/u-boot/board/phytium/e2000nt06/power_manage/cpld.c` 中包含了某个头文件,但是编译器无法找到该头文件的路径。 解决这个问题的方法是更新 `includePath`,即告诉编译器在哪里可以找到所需的头文件。以下是一些可能的解决方案: 1. **检查头文件的路径**:确保你在代码中包含的头文件的路径是正确的。例如,如果你包含了 `stdio.h`,确保它在系统的标准库路径中。 2. **更新编译器的 includePath**:如果你使用的是 `gcc` 或 `g++`,可以使用 `-I` 选项来指定头文件的路径。例如: ```sh gcc -I/path/to/your/headers -o output_file source_file.c ``` 3. **修改编译配置文件**:如果你使用的是像 `CMake` 或 `Makefile` 这样的构建系统,确保在配置文件中正确设置了头文件的路径。例如,在 `CMakeLists.txt` 中: ```cmake include_directories(/path/to/your/headers) ``` 4. **环境变量**:有时候,你可以通过设置环境变量来指定头文件的路径。例如,设置 `CPLUS_INCLUDE_PATH` 或 `C_INCLUDE_PATH`: ```sh export CPLUS_INCLUDE_PATH=/path/to/your/headers:$CPLUS_INCLUDE_PATH export C_INCLUDE_PATH=/path/to/your/headers:$C_INCLUDE_PATH ``` 通过以上方法,你应该能够解决 `#include` 错误。请根据你的具体情况选择合适的方法进行操作。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值