diff options
Diffstat (limited to 'code/ohos/ohos_compile.md')
-rw-r--r-- | code/ohos/ohos_compile.md | 106 |
1 files changed, 89 insertions, 17 deletions
diff --git a/code/ohos/ohos_compile.md b/code/ohos/ohos_compile.md index e7d2359..150ee25 100644 --- a/code/ohos/ohos_compile.md +++ b/code/ohos/ohos_compile.md | |||
@@ -22,6 +22,7 @@ | |||
22 | - 源码大小就 36G 左右了 | 22 | - 源码大小就 36G 左右了 |
23 | - 大量的依赖会占据数十 G 的空间 | 23 | - 大量的依赖会占据数十 G 的空间 |
24 | - 我用的是 160G 磁盘,编译成功,但基本不剩什么空间了 | 24 | - 我用的是 160G 磁盘,编译成功,但基本不剩什么空间了 |
25 | - 注意所需要的**ohos 的版本、cpu 版本、位数等信息** | ||
25 | 26 | ||
26 | 这里我用的是 VMWare+Ubuntu22.04 虚拟机。 | 27 | 这里我用的是 VMWare+Ubuntu22.04 虚拟机。 |
27 | 28 | ||
@@ -31,15 +32,6 @@ | |||
31 | 32 | ||
32 | ```bash | 33 | ```bash |
33 | #!/bin/bash | 34 | #!/bin/bash |
34 | |||
35 | ########################################################################## | ||
36 | # File Name : harmony.sh | ||
37 | # Encoding : utf-8 | ||
38 | # Author : We-unite | ||
39 | # Email : weunite1848@gmail.com | ||
40 | # Created Time : 2024-02-07 12:32:50 | ||
41 | ########################################################################## | ||
42 | |||
43 | set -e # 一旦出错立刻停止执行,不会执行后续指令 | 35 | set -e # 一旦出错立刻停止执行,不会执行后续指令 |
44 | 36 | ||
45 | # 更新软件源 | 37 | # 更新软件源 |
@@ -107,14 +99,18 @@ ssh-keygen -t rsa -C "your-email-address" | |||
107 | 99 | ||
108 | 此时,我们就可以通过 ssh 的方式与 gitee 进行交互、也可以免密提交代码了。 | 100 | 此时,我们就可以通过 ssh 的方式与 gitee 进行交互、也可以免密提交代码了。 |
109 | 101 | ||
110 | # 配置 repo 工具 | 102 | # 系统源码编译 |
103 | |||
104 | ## 配置 repo 工具 | ||
111 | 105 | ||
112 | **注意:前两条命令需要以 root 身份执行!!!** | 106 | **注意:前两条命令需要以 root 身份执行!!!** |
113 | 107 | ||
114 | ```bash | 108 | ```bash |
115 | # 以下两条命令需要以root身份执行 | 109 | # 以下两条命令需要以root身份执行 |
110 | sudo -s | ||
116 | curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo | 111 | curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo |
117 | chmod a+x /usr/local/bin/repo | 112 | chmod a+x /usr/local/bin/repo |
113 | exit | ||
118 | 114 | ||
119 | # 这条普通身份也可以 | 115 | # 这条普通身份也可以 |
120 | pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests | 116 | pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests |
@@ -122,17 +118,20 @@ pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests | |||
122 | 118 | ||
123 | 之所以前两条命令需要以 root 身份而不能是 sudo,是因为`/usr/local/bin`是一个只有 root 用户才有写权限的目录,而 sudo 命令虽然是以 root 身份执行,但**重定向时候 sudo 用的也是当前用户身份**,权限不足,自然报错。(**如果是管道,那么 sudo 也是只对当前命令有效,而不是对后续的整个管道有效。**) | 119 | 之所以前两条命令需要以 root 身份而不能是 sudo,是因为`/usr/local/bin`是一个只有 root 用户才有写权限的目录,而 sudo 命令虽然是以 root 身份执行,但**重定向时候 sudo 用的也是当前用户身份**,权限不足,自然报错。(**如果是管道,那么 sudo 也是只对当前命令有效,而不是对后续的整个管道有效。**) |
124 | 120 | ||
125 | # 系统源码编译 | ||
126 | |||
127 | ## 获取源码 | 121 | ## 获取源码 |
128 | 122 | ||
129 | 通过 repo + https/ssh 下载: | 123 | 通过 repo + https/ssh 下载: |
130 | 124 | ||
131 | ```bash | 125 | ```bash |
132 | # 通过http下载 | 126 | # 通过http下载,这里需要注意你需要的ohos的版本 |
133 | repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify | 127 | repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify |
134 | # 或者也可以通过ssh下载 | 128 | # 如果需要的是特定分支,-b后边改成对应分支名 |
129 | # 如果是tag,-b后的参数比较复杂,要在网页上提前确定好需要的tag名字, | ||
130 | # 如下载的是tag为OpenHarmony-v3.2-Release的版本,命令如下: | ||
131 | # repo init -u https://gitee.com/openharmony/manifest -b refs/tags/OpenHarmony-v3.2-Release --no-repo-verify | ||
132 | # 除使用https外,也可以通过ssh下载 | ||
135 | # repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify | 133 | # repo init -u git@gitee.com:openharmony/manifest.git -b master --no-repo-verify |
134 | |||
136 | repo sync -c | 135 | repo sync -c |
137 | repo forall -c 'git lfs pull' | 136 | repo forall -c 'git lfs pull' |
138 | ``` | 137 | ``` |
@@ -143,12 +142,15 @@ repo forall -c 'git lfs pull' | |||
143 | # 先在源码根目录下执行脚本,安装编译器及二进制工具 | 142 | # 先在源码根目录下执行脚本,安装编译器及二进制工具 |
144 | bash build/prebuilts_download.sh | 143 | bash build/prebuilts_download.sh |
145 | # 再执行如下命令进行版本编译 | 144 | # 再执行如下命令进行版本编译 |
145 | # 注意:默认编译的时候,目标cpu是32位,即使为64位cpu也无法使用64位功能 | ||
146 | sudo ./build.sh --product-name rk3568 --ccache | 146 | sudo ./build.sh --product-name rk3568 --ccache |
147 | # 如果是64位cpu,需要加上--target-cpu=arm64 | ||
148 | sudo ./build.sh --product-name rk3568 --ccache --target-cpu=arm64 | ||
147 | ``` | 149 | ``` |
148 | 150 | ||
149 | ## 编译完成 | 151 | ## 编译完成 |
150 | 152 | ||
151 | 编译所生成的文件都归档在 out 目录下,结果镜像输出在源码根目录下的 out/rk3568/packages/phone/images 目录下。 | 153 | 编译所生成的文件都归档在 out 目录下,结果镜像输出在源码根目录下的`out/rk3568/packages/phone/images`目录下。 |
152 | 154 | ||
153 | 自此源码编译成功,即可进行镜像烧录。 | 155 | 自此源码编译成功,即可进行镜像烧录。 |
154 | 156 | ||
@@ -336,7 +338,77 @@ targets := vmlinux | |||
336 | 338 | ||
337 | 总而言之,言而总之,在`VMware->虚拟机->设置->硬件->内存`中,把内存扩大,就可以完美解决该问题。经我的测试,内存 13.2G(主机总内存 16G 时候推荐的最大虚拟机内存)是能编译完成的,编译时长 6h。最终解决。 | 339 | 总而言之,言而总之,在`VMware->虚拟机->设置->硬件->内存`中,把内存扩大,就可以完美解决该问题。经我的测试,内存 13.2G(主机总内存 16G 时候推荐的最大虚拟机内存)是能编译完成的,编译时长 6h。最终解决。 |
338 | 340 | ||
339 | # 完结撒花 ❀ | 341 | # ohos 的 NDK |
342 | |||
343 | NDK 编译方式比较简单,在源码根目录下执行如下命令: | ||
344 | |||
345 | ```bash | ||
346 | # 安装依赖 | ||
347 | ./build/build_scripts/env_setup.sh | ||
348 | |||
349 | # 执行完上述命令后记得执行source ~/.bashrc或者重启终端 | ||
350 | source ~/.bashrc | ||
351 | |||
352 | # 安装编译SDK需要的依赖包(编译镜像的时候是不依赖这些包的) | ||
353 | sudo apt-get install libxcursor-dev libxrandr-dev libxinerama-dev | ||
354 | |||
355 | ./build.sh --product-name ohos-sdk --ccache --build-target ohos_ndk | ||
356 | ``` | ||
357 | |||
358 | 编译出来的 NDK 在`out/sdk/packages/ohos-sdk/linux/native`下。当然同时也有 windows 版本的 NDK,你猜在哪里? | ||
359 | |||
360 | 将编译出来的 NDK 的 zip 解压到你想要的目录下,然后将该目录添加到环境变量中,即可使用。 | ||
361 | |||
362 | 注意,NDK 包提供的交叉编译工具是 cmake 和 ninja,编译器是 clang 和 clang++,并没有我们熟悉的 gcc/g++和 make。除此之外,NDK 还未我们提供编译所需的全套服务,如编译工具链配置文件`ohos.toolchain.cmake`、头文件、库文件等。快说,谢谢 ohos~ | ||
363 | |||
364 | 为了更方便地使用NDK,鄙人不才,写了两个脚本,分别用于cmake编译和单文件编译: | ||
365 | |||
366 | ```bash | ||
367 | #!/bin/bash | ||
368 | |||
369 | ########################################################################## | ||
370 | # File Name : compile.sh | ||
371 | # Encoding : utf-8 | ||
372 | # Author : We-unite | ||
373 | # Email : weunite1848@gmail.com | ||
374 | # Created Time : 2024-02-29 15:19:15 | ||
375 | ########################################################################## | ||
376 | |||
377 | set -e | ||
378 | |||
379 | if [ $UID -eq 0 ]; then | ||
380 | echo "Please do not run this script as root" | ||
381 | exit 1 | ||
382 | fi | ||
383 | |||
384 | if [ $# -ne 2 ]; then | ||
385 | echo "Usage: $0 <static|shared> <v7|v8>" | ||
386 | exit 1 | ||
387 | fi | ||
388 | |||
389 | if [ $2 == "v8" ]; then | ||
390 | arch=arm64-v8a | ||
391 | elif [ $2 == "v7" ]; then | ||
392 | arch=armeabi-v7a | ||
393 | else | ||
394 | echo "Invalid architecture: $2" | ||
395 | exit 1 | ||
396 | fi | ||
397 | |||
398 | link=$1 # static or shared | ||
399 | native_path=~/app/native | ||
400 | |||
401 | export PATH=$native_path/build-tools/cmake/bin:$PATH | ||
402 | |||
403 | # 使用cmake编译,编译生成的文件运行在rk3568上 | ||
404 | cmake -B build -D OHOS_STL=c++_$link -D OHOS_ARCH=$arch -D OHOS_PLATFORM=OHOS -D CMAKE_TOOLCHAIN_FILE=$(find $native_path -name ohos.toolchain.cmake) | ||
405 | cmake --build build | ||
406 | ``` | ||
407 | |||
408 | ```bash | ||
409 | ``` | ||
410 | |||
411 | # 完结撒花 | ||
340 | 412 | ||
341 | 本次鸿蒙开发环境的搭建过程可谓一波三折,总结几个最大的坑点,或许可以作为编译的经验罢: | 413 | 本次鸿蒙开发环境的搭建过程可谓一波三折,总结几个最大的坑点,或许可以作为编译的经验罢: |
342 | 414 | ||
@@ -345,4 +417,4 @@ targets := vmlinux | |||
345 | - 内存 10G+ | 417 | - 内存 10G+ |
346 | - 磁盘 160G+ | 418 | - 磁盘 160G+ |
347 | 419 | ||
348 | 不说了,抓紧攒点钱开学升级电脑配置要紧……磁盘快炸了…… | 420 | 不说了,抓紧攒点钱开学升级电脑配置要紧……磁盘快炸了…… \ No newline at end of file |