由于官方给出的示例文档写的实在太烂,故在此对构建过程进行逐步记录。所有构建过程均于 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
初始化仓库
进入刚才创建的 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
。最后连接电源线,即可通过串口进入命令行界面。