1377 字
7 分钟
构建适用于哪吒开发板的开源鸿蒙系统

由于官方给出的示例文档写的实在太烂,故在此对构建过程进行逐步记录。所有构建过程均于 Ubuntu 系统中进行,并通过 Docker 获取编译环境,请确保已提前安装好 Docker,参考 官方文档 以安装。

目前的适配进度止步于进入控制台,即可通过串口连接开发板进入命令行,未适配图形化界面

构建时必要的 llvm-riscv 工具链 llvm-riscv-1124.tar.gz 目前仅可通过 百度网盘 下载,链接为 https://pan.baidu.com/s/19JVNwFrl5ISOAsruW_y9hA?pwd=chds,提取码为 chds

安装 Repo 工具#

构建前需要使用 Repo 工具来获取源码和 SDK。

sudo apt update
sudo apt install repo

需要设置 git 的用户名和邮箱。

git config --global user.name "your_name"
git config --global user.email "your_email"

更换镜像源#

每次运行时 Repo 会尝试访问官方的 git 源检查更新,更换镜像源可以提高下载速度。

echo export REPO_URL='https://mirrors.bfsu.edu.cn/git/git-repo' >> ~/.bashrc
source ~/.bashrc

创建工作目录#

为便于进行文件管理,创建工作目录,文件夹关系如下。

nezha/                  # 总文件夹
├── OpenHarmony/        # OpenHarmony 源码
└── tina-d1/            # Tina-D1 SDK

通过以下命令创建这些文件夹。

mkdir -p nezha/OpenHarmony nezha/tina-d1
cd nezha

获取 SDK#

需要提前注册 全志在线开发者论坛 账号,并达到 LV2 等级,参考 这个链接 升级。

初始化仓库#

进入刚才创建的 tina-d1 文件夹,使用 Repo 工具初始化仓库。

cd tina-d1
repo init -u https://sdk.aw-ol.com/git_repo/D1_Tina_Open/manifest.git -b master -m tina-d1-h.xml

如果提示 Username for 'https://sdk.aw-ol.com', 请输入 全志在线开发者论坛 的用户名和密码,需要全志在线开发者论坛 LV2 等级以上用户才有权限拉取 SDK。

拉取 SDK#

repo sync

由于 SDK 体积普遍较大,拉取可能需要一定的时间,此时可同步进行源码的获取。

获取源码#

进入之前创建的 OpenHarmony 文件夹,使用 Repo 工具拉取源码。

cd ../OpenHarmony
repo init -u https://gitee.com/allwinnertech-d1/manifest-sunxi-d1.git -b master -m sunxi_d1.xml --no-repo-verify
repo sync -c
repo forall -c 'git lfs pull'

源码体积较大,拉取时间较长,此时可提前下载编译工具链。

若报类似于 Syncing: 25% (63/248) 0:44 | 4 jobs | 0:04 update_packaging_tools @ base/update/packaging_toolserror.GitError: Cannot checkout update_packaging_tools: Cannot initialize work tree for update_packaging_tools 的错误,可能是因为 git-lfs 未安装,使用 sudo apt install git-lfs && git lfs install 安装 git-lfs 后重新运行 repo sync -c 即可。

获取编译工具链#

通过 百度网盘 下载 llvm-riscv 工具链 llvm-riscv-1124.tar.gz,链接为 https://pan.baidu.com/s/19JVNwFrl5ISOAsruW_y9hA?pwd=chds,提取码为 chds

可将 llvm-riscv-1124.tar.gz 文件放入 nezha 文件夹中,此时文件夹结构如下。

nezha/
├── OpenHarmony/
├── tina-d1/
└── llvm-riscv-1124.tar.gz

构建系统#

构建前准备#

进入 OpenHarmony 文件夹,修改 ./build/prebuilts_download.sh 文件中的 npm 镜像源,将所有的 http://registry.npm.taobao.org 修改为 https://mirrors.huaweicloud.com/repository/npm/

cd OpenHarmony
sed -i 's|http://registry.npm.taobao.org|https://mirrors.huaweicloud.com/repository/npm/|g' build/prebuilts_download.sh

运行 ./build/prebuilts_download.sh,下载相关编译工具链与 host 端工具。

./build/prebuilts_download.sh

复制编译工具#

回到 nezha 文件夹,将 tina-d1/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702 复制到 OpenHarmony/prebuilts/gcc/linux-x86/riscv/riscv64-glibc-gcc-thead_20200702

cd nezha
cp -rv tina-d1/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702 OpenHarmony/prebuilts/gcc/linux-x86/riscv/

解压编译工具链#

还是在 nezha 文件夹,将之前下载的 llvm-riscv-1124.tar.gz 工具链解压到 OpenHarmony/prebuilts/clang/ohos/linux-x86_64/llvm-riscv/ 目录下。

tar -xzvf llvm-riscv-1124.tar.gz -C OpenHarmony/prebuilts/clang/ohos/linux-x86_64/

获取 Docker 编译环境#

使用预搭建好的 Docker 镜像来构建 OpenHarmony 系统,其中 nezha 文件夹的路径 /path/to/nezha 根据你的实际路径进行替换。

docker pull welyfun/nezha
docker run -dit --name nezha -v /path/to/nezha:/root welyfun/nezha

构建系统#

进入 Docker 容器。

docker exec -it nezha /bin/bash

进入 OpenHarmony 文件夹并构建系统。

cd /root/OpenHarmony
./build.sh --product-name sunxi_d1 --ccache

构建过程可能需要较长时间(接近一小时),具体取决于你的计算机性能,此时可以去喝杯茶。

出现以下信息时,表示构建成功。

=====build sunxi_d1 successful.
2025-08-01 11:08:37
++++++++++++++++++++++++++++++++++++++++

若报错,大多数错误可通过重复运行 ./build.sh --product-name sunxi_d1 --ccache 来解决。

生成镜像文件#

还是在 Docker 容器的 OpenHarmony 文件夹中,运行以下命令生成镜像文件。

./device/sunxi/build/pack

生成的镜像文件位于 ./out/d1-nezha/ 目录下,文件名为 tina_d1-nezha_uart0.img,成功信息如下。

Dragon execute image.cfg SUCCESS !
----------image is for nand/emmc----------
----------image is at----------

/root/OpenHarmony/out/d1-nezha/tina_d1-nezha_uart0.img

pack finish

生成可写镜像文件#

默认打包的 rootfs 是 squashfs 类型,只读,不可写。执行: ./device/sunxi/build/pack -e,可生成 ext4 格式(可写)的 rootfs,此时固件大小会超过 256M(D1 开发板 flash 总大小),无法直接烧写,需使用 TF 卡烧写方式,并修改 ./device/sunxi/config/chips/d1/configs/nezha/sys_partition.fex 文件,调大对应分区的 size。

首先打开 ./device/sunxi/config/chips/d1/configs/nezha/sys_partition.fex 文件,找到以下内容。

[partition]
    name         = rootfs
    size         = 258048
    downloadfile = "rootfs.fex"
    user_type    = 0x8000

size 的值改为 819200,修改后的内容如下。

[partition]
    name         = rootfs
    size         = 819200
    downloadfile = "rootfs.fex"
    user_type    = 0x8000

随后在 OpenHarmony 文件夹中运行以下命令生成可写镜像文件。

./device/sunxi/build/pack -e

成功后同样显示如下信息。

Dragon execute image.cfg SUCCESS !
----------image is for nand/emmc----------
----------image is at----------

/root/OpenHarmony/out/d1-nezha/tina_d1-nezha_uart0.img

pack finish

生成的可写镜像文件位于 ./out/d1-nezha/ 目录下,文件名为 tina_d1-nezha_uart0.img

烧写镜像#

此处记录烧写镜像至 TF 卡的过程,若要烧写至开发板的 flash 中,请参考 官方文档

烧写工具 PhoenixCard (仅适用于 Windows)于 此处 下载,注意需要先登录才能下载,下载 PhoenixCardv4.2.7.7z 文件,解压后运行 PhoenixCard.exe,以 启动卡 模式烧写镜像至 TF 卡。

启动系统#

将烧写好的 TF 卡插入 D1 开发板,连接好串口线,使用串口工具连接开发板的串口,波特率设置为 115200最后连接电源线,即可通过串口进入命令行界面。


参考#

  1. OpenHarmony 构建 d1_nezha (Gitee 仓库)

  2. OpenHarmony for RISC-V (GitCode 仓库)

  3. D1-H 官方文档

构建适用于哪吒开发板的开源鸿蒙系统
https://blog.wely.fun/posts/构建适用于哪吒开发板的开源鸿蒙系统/
作者
Wely
发布于
2025-08-01
许可协议
CC BY-NC-SA 4.0