diff options
Diffstat (limited to 'code/projects/ohos_compile.html')
-rw-r--r-- | code/projects/ohos_compile.html | 60 |
1 files changed, 30 insertions, 30 deletions
diff --git a/code/projects/ohos_compile.html b/code/projects/ohos_compile.html index fd52643..c9d240d 100644 --- a/code/projects/ohos_compile.html +++ b/code/projects/ohos_compile.html | |||
@@ -5,16 +5,17 @@ | |||
5 | <meta charset="utf-8" /> | 5 | <meta charset="utf-8" /> |
6 | <meta name="generator" content="pandoc" /> | 6 | <meta name="generator" content="pandoc" /> |
7 | <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> | 7 | <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" /> |
8 | <title>OHOS全量编译记录</title> | 8 | <title>OHOS 全量编译记录</title> |
9 | <link rel="stylesheet" href="https://test.qin-juan-ge-zhu.top/common/CSS/pandoc.css"> | 9 | <link rel="stylesheet" href="https://www.qin-juan-ge-zhu.top/common/CSS/pandoc.css"> |
10 | <script type="text/javascript" src="https://test.qin-juan-ge-zhu.top/common/js/myhighlight.js"></script> | 10 | <script type="text/javascript" src="https://www.qin-juan-ge-zhu.top/common/script4code.js"></script> |
11 | <script type="text/javascript" src="https://test.qin-juan-ge-zhu.top/common/script4code.js"></script> | ||
12 | </head> | 11 | </head> |
13 | 12 | ||
14 | <body> | 13 | <body> |
15 | <div class="pandoc"> | 14 | <div class="pandoc"> |
16 | <div class="main"> | 15 | <div class="main"> |
17 | <p class="title">OHOS 全量编译记录</p> | 16 | <header id="title-block-header"> |
17 | <p class="title">OHOS 全量编译记录</p> | ||
18 | </header> | ||
18 | <!-- 鸿蒙开发环境搭建 --> | 19 | <!-- 鸿蒙开发环境搭建 --> |
19 | <blockquote> | 20 | <blockquote> |
20 | <p>本次编译环境搭建参考了以下博客:</p> | 21 | <p>本次编译环境搭建参考了以下博客:</p> |
@@ -36,8 +37,7 @@ | |||
36 | <h2 id="硬件环境">硬件环境</h2> | 37 | <h2 id="硬件环境">硬件环境</h2> |
37 | <p>编译过程使用的是 | 38 | <p>编译过程使用的是 |
38 | <code>Ubuntu</code>,经测试,<code>Ubuntu 22.04 LTS</code>/<code>Ubuntu 20.04 LTS</code>/<code>Ubuntu 18.04 LTS</code> | 39 | <code>Ubuntu</code>,经测试,<code>Ubuntu 22.04 LTS</code>/<code>Ubuntu 20.04 LTS</code>/<code>Ubuntu 18.04 LTS</code> |
39 | 均可用。 | 40 | 均可用。</p> |
40 | </p> | ||
41 | <p>网上的大多数博客里没有对编译的硬件限制作出说明,现根据我们的情况,给出一个大概的范围:</p> | 41 | <p>网上的大多数博客里没有对编译的硬件限制作出说明,现根据我们的情况,给出一个大概的范围:</p> |
42 | <ul> | 42 | <ul> |
43 | <li><strong>内存必须在 10G 以上</strong>,我使用的是 13G,编译成功(8G 时编译失败了,下文会说明)</li> | 43 | <li><strong>内存必须在 10G 以上</strong>,我使用的是 13G,编译成功(8G 时编译失败了,下文会说明)</li> |
@@ -53,7 +53,7 @@ | |||
53 | <p>这里我用的是 VMWare+Ubuntu22.04 虚拟机。</p> | 53 | <p>这里我用的是 VMWare+Ubuntu22.04 虚拟机。</p> |
54 | <h2 id="软件包依赖">软件包依赖</h2> | 54 | <h2 id="软件包依赖">软件包依赖</h2> |
55 | <p>安装依赖在博客中都有讲,但<strong>少了一部分依赖项</strong>,我因而将所有必要的依赖项整理到一个脚本里了:</p> | 55 | <p>安装依赖在博客中都有讲,但<strong>少了一部分依赖项</strong>,我因而将所有必要的依赖项整理到一个脚本里了:</p> |
56 | <pre><code>#!/bin/bash | 56 | <pre><code class="language-bash">#!/bin/bash |
57 | set -e # 一旦出错立刻停止执行,不会执行后续指令 | 57 | set -e # 一旦出错立刻停止执行,不会执行后续指令 |
58 | 58 | ||
59 | # 更新软件源 | 59 | # 更新软件源 |
@@ -87,7 +87,7 @@ fi</code></pre> | |||
87 | <h1 id="配置-git">配置 git</h1> | 87 | <h1 id="配置-git">配置 git</h1> |
88 | <h2 id="git-基础设置">git 基础设置</h2> | 88 | <h2 id="git-基础设置">git 基础设置</h2> |
89 | <p>在上边我们已经下载了本次所需要的<code>git</code>与<code>git-lfs</code>,接下来我们需要对<code>git</code>进行基础设置。</p> | 89 | <p>在上边我们已经下载了本次所需要的<code>git</code>与<code>git-lfs</code>,接下来我们需要对<code>git</code>进行基础设置。</p> |
90 | <pre><code># 设置用户名与密码,新用户必做 | 90 | <pre><code class="language-bash"># 设置用户名与密码,新用户必做 |
91 | # 这里的用户名与密码只是一个写在git提交记录中的标识,可以与gitee/github账号无关 | 91 | # 这里的用户名与密码只是一个写在git提交记录中的标识,可以与gitee/github账号无关 |
92 | git config --global user.name "yourname" | 92 | git config --global user.name "yourname" |
93 | git config --global user.email "your-email-address" | 93 | git config --global user.email "your-email-address" |
@@ -99,7 +99,7 @@ git config --global core.editor vim</code></pre> | |||
99 | <p>由于 OpenHarmony 的源码托管在 gitee 上,所以我们需要在 gitee 上注册一个帐户。注册的方法在此不复赘述。</p> | 99 | <p>由于 OpenHarmony 的源码托管在 gitee 上,所以我们需要在 gitee 上注册一个帐户。注册的方法在此不复赘述。</p> |
100 | <p>本次编译过程中,我们并不需要提交代码,因而可以仅通过 http 方式从 gitee 下载源码——如果是这样的话,<strong>就不需要进行 git 与 gitee | 100 | <p>本次编译过程中,我们并不需要提交代码,因而可以仅通过 http 方式从 gitee 下载源码——如果是这样的话,<strong>就不需要进行 git 与 gitee |
101 | 关联</strong>;如果想要提交代码,那么需要将本地的 git 与 gitee 账号关联起来,具体操作如下:</p> | 101 | 关联</strong>;如果想要提交代码,那么需要将本地的 git 与 gitee 账号关联起来,具体操作如下:</p> |
102 | <pre><code># 在本地执行 | 102 | <pre><code class="language-bash"># 在本地执行 |
103 | ssh-keygen -t rsa -C "your-email-address"</code></pre> | 103 | ssh-keygen -t rsa -C "your-email-address"</code></pre> |
104 | <p>命令执行后,每次需要输入都直接回车,<strong>连续有三个回车</strong>,执行就会结束,ssh | 104 | <p>命令执行后,每次需要输入都直接回车,<strong>连续有三个回车</strong>,执行就会结束,ssh |
105 | 密钥对的公钥和私钥分别保存在<code>~/.ssh/id_rsa.pub</code>和<code>~/.ssh/id_rsa</code>中。</p> | 105 | 密钥对的公钥和私钥分别保存在<code>~/.ssh/id_rsa.pub</code>和<code>~/.ssh/id_rsa</code>中。</p> |
@@ -107,7 +107,7 @@ ssh-keygen -t rsa -C "your-email-address"</code></pre> | |||
107 | <p>此时,我们就可以通过 ssh 的方式与 gitee 进行交互、也可以免密提交代码了。</p> | 107 | <p>此时,我们就可以通过 ssh 的方式与 gitee 进行交互、也可以免密提交代码了。</p> |
108 | <h1 id="系统源码编译">系统源码编译</h1> | 108 | <h1 id="系统源码编译">系统源码编译</h1> |
109 | <h2 id="配置-repo-工具">配置 repo 工具</h2> | 109 | <h2 id="配置-repo-工具">配置 repo 工具</h2> |
110 | <pre><code>curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > ~/repo | 110 | <pre><code class="language-bash">curl -s https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > ~/repo |
111 | chmod a+x ~/repo | 111 | chmod a+x ~/repo |
112 | sudo mv ~/repo /usr/local/bin/repo | 112 | sudo mv ~/repo /usr/local/bin/repo |
113 | sudo chown root:root /usr/local/bin/repo | 113 | sudo chown root:root /usr/local/bin/repo |
@@ -121,7 +121,7 @@ pip3 install -i https://repo.huaweicloud.com/repository/pypi/simple requests</co | |||
121 | 的区别,如<code>OpenHarmony-v4.0-Release</code>和<code>OpenHarmony-4.0-Release</code>。二者的区别主要在于,不带 v | 121 | 的区别,如<code>OpenHarmony-v4.0-Release</code>和<code>OpenHarmony-4.0-Release</code>。二者的区别主要在于,不带 v |
122 | 的是官方维护的稳定版,也会更新代码,厂商的补丁一般只针对带 v 的使用。</p> | 122 | 的是官方维护的稳定版,也会更新代码,厂商的补丁一般只针对带 v 的使用。</p> |
123 | <p>通过 repo + https/ssh 下载:</p> | 123 | <p>通过 repo + https/ssh 下载:</p> |
124 | <pre><code># 如果需要的是特定分支,-b后边改成对应分支名 | 124 | <pre><code class="language-bash"># 如果需要的是特定分支,-b后边改成对应分支名 |
125 | # repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify | 125 | # repo init -u https://gitee.com/openharmony/manifest.git -b master --no-repo-verify |
126 | # 如果是tag,-b后的参数比较复杂,要在网页上提前确定好需要的tag名字, | 126 | # 如果是tag,-b后的参数比较复杂,要在网页上提前确定好需要的tag名字, |
127 | # 如下载的是tag为OpenHarmony-v3.2-Release的版本,命令如下: | 127 | # 如下载的是tag为OpenHarmony-v3.2-Release的版本,命令如下: |
@@ -133,11 +133,11 @@ repo sync -c | |||
133 | repo forall -c 'git lfs pull'</code></pre> | 133 | repo forall -c 'git lfs pull'</code></pre> |
134 | <h2 id="补丁与编译">补丁与编译</h2> | 134 | <h2 id="补丁与编译">补丁与编译</h2> |
135 | <p>首先,打上厂商的补丁。下载对应版本补丁后,将补丁文件放到源码根目录下,执行:</p> | 135 | <p>首先,打上厂商的补丁。下载对应版本补丁后,将补丁文件放到源码根目录下,执行:</p> |
136 | <pre><code>unzip purple_pi_oh_patch.zip | 136 | <pre><code class="language-bash">unzip purple_pi_oh_patch.zip |
137 | cd purple_pi_oh_patch | 137 | cd purple_pi_oh_patch |
138 | ./ido_patch.sh</code></pre> | 138 | ./ido_patch.sh</code></pre> |
139 | <p>看到<code>patch complete</code>字样,说明补丁成功。接下来进行 prebuilts 和编译:</p> | 139 | <p>看到<code>patch complete</code>字样,说明补丁成功。接下来进行 prebuilts 和编译:</p> |
140 | <pre><code># 先在源码根目录下执行脚本,安装编译器及二进制工具 | 140 | <pre><code class="language-bash"># 先在源码根目录下执行脚本,安装编译器及二进制工具 |
141 | bash build/prebuilts_download.sh | 141 | bash build/prebuilts_download.sh |
142 | 142 | ||
143 | # 编译 | 143 | # 编译 |
@@ -181,22 +181,22 @@ sudo ./build.sh --product-name purple_pi_oh --ccache --no-prebuilt-sdk --target- | |||
181 | <li>右键该分区,查看挂载到什么位置了。一般是挂载到<code>/</code>与<code>/var/snap/firefox/common/host-hunspell</code></li> | 181 | <li>右键该分区,查看挂载到什么位置了。一般是挂载到<code>/</code>与<code>/var/snap/firefox/common/host-hunspell</code></li> |
182 | <li>执行以下命令:</li> | 182 | <li>执行以下命令:</li> |
183 | </ul> | 183 | </ul> |
184 | <pre><code># 对于这个设备挂载到的每一个分区,都执行以下命令,以此类推 | 184 | <pre><code class="language-bash"># 对于这个设备挂载到的每一个分区,都执行以下命令,以此类推 |
185 | sudo mount -o remount -rw / | 185 | sudo mount -o remount -rw / |
186 | sudo mount -o remount -rw /var/snap/firefox/common/host-hunspell</code></pre> | 186 | sudo mount -o remount -rw /var/snap/firefox/common/host-hunspell</code></pre> |
187 | <p>而后在 gparted 中点击<code>gparted->刷新设备</code>,即可进行分区扩展。</p> | 187 | <p>而后在 gparted 中点击<code>gparted->刷新设备</code>,即可进行分区扩展。</p> |
188 | <h2 id="ninja-编译报错-code-4000">Ninja 编译报错 <code>Code 4000</code></h2> | 188 | <h2 id="ninja-编译报错-code-4000">Ninja 编译报错 <code>Code 4000</code></h2> |
189 | <p>编译 rk3568 过程中可能会出现以下报错:</p> | 189 | <p>编译 rk3568 过程中可能会出现以下报错:</p> |
190 | <pre><code>[OHOS ERROR] Code: 4000 | 190 | <pre><code class="language-plaintext">[OHOS ERROR] Code: 4000 |
191 | [OHOS ERROR] Reason: ninja phase failed</code></pre> | 191 | [OHOS ERROR] Reason: ninja phase failed</code></pre> |
192 | <p>详细的报错信息已经丢失,将就着看吧。反正别的办法都不好使的时候试试这个。</p> | 192 | <p>详细的报错信息已经丢失,将就着看吧。反正别的办法都不好使的时候试试这个。</p> |
193 | <p>此时执行以下内容即可:</p> | 193 | <p>此时执行以下内容即可:</p> |
194 | <pre><code>rm -rf out | 194 | <pre><code class="language-bash">rm -rf out |
195 | sed -i 's/CONFIG_DEBUG_INFO_BTF=y/# CONFIG_DEBUG_INFO_BTF=y/g' kernel/linux/config/linux-5.10/rk3568/arch/arm64_defconfig</code></pre> | 195 | sed -i 's/CONFIG_DEBUG_INFO_BTF=y/# CONFIG_DEBUG_INFO_BTF=y/g' kernel/linux/config/linux-5.10/rk3568/arch/arm64_defconfig</code></pre> |
196 | <p>而后重新编译。</p> | 196 | <p>而后重新编译。</p> |
197 | <h2 id="另一个code-4000">另一个<code>Code 4000</code></h2> | 197 | <h2 id="另一个code-4000">另一个<code>Code 4000</code></h2> |
198 | <p>编译时报错如下:</p> | 198 | <p>编译时报错如下:</p> |
199 | <pre><code>ninja: build stopped: subcommand failed. | 199 | <pre><code class="language-plaintext">ninja: build stopped: subcommand failed. |
200 | [91m[OHOS ERROR][0m Traceback (most recent call last): | 200 | [91m[OHOS ERROR][0m Traceback (most recent call last): |
201 | [91m[OHOS ERROR][0m File "/home/player/Desktop/ohos/src/build/hb/services/ninja.py", line 49, in _execute_ninja_cmd | 201 | [91m[OHOS ERROR][0m File "/home/player/Desktop/ohos/src/build/hb/services/ninja.py", line 49, in _execute_ninja_cmd |
202 | [91m[OHOS ERROR][0m SystemUtil.exec_command( | 202 | [91m[OHOS ERROR][0m SystemUtil.exec_command( |
@@ -250,13 +250,13 @@ sed -i 's/CONFIG_DEBUG_INFO_BTF=y/# CONFIG_DEBUG_INFO_BTF=y/g' kernel/li | |||
250 | <p>这是一个很奇怪的报错,我们尚未找到真正的原因所在,只知道如何暂时地绕过去。</p> | 250 | <p>这是一个很奇怪的报错,我们尚未找到真正的原因所在,只知道如何暂时地绕过去。</p> |
251 | <h3 id="问题描述与复现">问题描述与复现</h3> | 251 | <h3 id="问题描述与复现">问题描述与复现</h3> |
252 | <p>问题复现方法为在编译过程中,执行以下命令:</p> | 252 | <p>问题复现方法为在编译过程中,执行以下命令:</p> |
253 | <pre><code>./build.sh --product-name rk3568 --ccache</code></pre> | 253 | <pre><code class="language-bash">./build.sh --product-name rk3568 --ccache</code></pre> |
254 | <p>该命令是指导书中写的编译命令,但执行时候会出错;<strong>与上文所述的经确认无误的编译命令不同在于没加<code>sudo</code></strong>。</p> | 254 | <p>该命令是指导书中写的编译命令,但执行时候会出错;<strong>与上文所述的经确认无误的编译命令不同在于没加<code>sudo</code></strong>。</p> |
255 | <p>如果按照指导书的命令来,不出意外编译将会报错: <img src="https://www.qin-juan-ge-zhu.top/images/code/ohos_gn_fail_1.png" /> <img | 255 | <p>如果按照指导书的命令来,不出意外编译将会报错: <img src="https://www.qin-juan-ge-zhu.top/images/code/ohos_compile_gn_fail_1.png" /> <img |
256 | src="https://www.qin-juan-ge-zhu.top/images/code/ohos_gn_fail_2.png" /></p> | 256 | src="https://www.qin-juan-ge-zhu.top/images/code/ohos_compile_gn_fail_2.png" /></p> |
257 | <p><strong>以下是该问题的具体描述:</strong></p> | 257 | <p><strong>以下是该问题的具体描述:</strong></p> |
258 | <p><code>build.log</code>如下:</p> | 258 | <p><code>build.log</code>如下:</p> |
259 | <pre><code>Set cache size limit to 100.0 GB | 259 | <pre><code class="language-plaintext">Set cache size limit to 100.0 GB |
260 | [OHOS INFO] loader args:['platforms_config_file="/home/axiomer/桌面/out/preloader/ohos-sdk/platforms.build"', 'subsystem_config_file="/home/axiomer/桌面/out/preloader/ohos-sdk/subsystem_config.json"', 'example_subsystem_file=""', 'exclusion_modules_config_file="/home/axiomer/桌面/out/preloader/ohos-sdk/exclusion_modules.json"', 'source_root_dir="/home/axiomer/桌面/"', 'gn_root_out_dir="out/sdk"', 'build_platform_name=phone', 'build_xts=False', 'load_test_config=False', 'target_os=ohos', 'target_cpu=arm64', 'os_level=standard', "ignore_api_check=['xts', 'common', 'testfwk']", 'scalable_build=False', 'skip_partlist_check=False'] | 260 | [OHOS INFO] loader args:['platforms_config_file="/home/axiomer/桌面/out/preloader/ohos-sdk/platforms.build"', 'subsystem_config_file="/home/axiomer/桌面/out/preloader/ohos-sdk/subsystem_config.json"', 'example_subsystem_file=""', 'exclusion_modules_config_file="/home/axiomer/桌面/out/preloader/ohos-sdk/exclusion_modules.json"', 'source_root_dir="/home/axiomer/桌面/"', 'gn_root_out_dir="out/sdk"', 'build_platform_name=phone', 'build_xts=False', 'load_test_config=False', 'target_os=ohos', 'target_cpu=arm64', 'os_level=standard', "ignore_api_check=['xts', 'common', 'testfwk']", 'scalable_build=False', 'skip_partlist_check=False'] |
261 | [OHOS INFO] Excuting gn command: /home/axiomer/桌面/prebuilts/build-tools/linux-x86/bin/gn gen --args="product_name=\"ohos-sdk\" product_path=\"/home/axiomer/桌面/productdefine/common/products\" product_config_path=\"/home/axiomer/桌面/productdefine/common/products\" device_name=\"sdk\" device_path=\"/home/axiomer/桌面/device/board/ohos/sdk\" device_company=\"ohos\" device_config_path=\"/home/axiomer/桌面/device/board/ohos/sdk\" target_cpu=\"arm64\" is_standard_system=true ohos_build_compiler_specified=\"\" ohos_build_time=1707374188101 ohos_build_datetime=\"2024-02-08 22:36:28\" build_ohos_sdk=true build_ohos_ndk=true ohos_build_enable_ccache=true ohos_build_type=\"debug\" device_type=\"default\" build_variant=\"root\" use_thin_lto=false ndk_platform=\"linux\" sdk_for_hap_build=true skip_generate_module_list_file=true enable_lto_O0=true archive_ndk=false enable_ndk_doxygen=false use_cfi=false sdk_check_flag=false sdk_platform=\"linux\" root_perf_main=\"main\" runtime_mode=\"release\"" --args=product_name="ohos-sdk" product_path="/home/axiomer/桌面/productdefine/common/products" product_config_path="/home/axiomer/桌面/productdefine/common/products" device_name="sdk" device_path="/home/axiomer/桌面/device/board/ohos/sdk" device_company="ohos" device_config_path="/home/axiomer/桌面/device/board/ohos/sdk" target_cpu="arm64" is_standard_system=true ohos_build_compiler_specified="" ohos_build_time=1707374188101 ohos_build_datetime="2024-02-08 22:36:28" build_ohos_sdk=true build_ohos_ndk=true ohos_build_enable_ccache=true ohos_build_type="debug" device_type="default" build_variant="root" use_thin_lto=false ndk_platform="linux" sdk_for_hap_build=true skip_generate_module_list_file=true enable_lto_O0=true archive_ndk=false enable_ndk_doxygen=false use_cfi=false sdk_check_flag=false sdk_platform="linux" root_perf_main="main" runtime_mode="release" /home/axiomer/桌面/out/sdk | 261 | [OHOS INFO] Excuting gn command: /home/axiomer/桌面/prebuilts/build-tools/linux-x86/bin/gn gen --args="product_name=\"ohos-sdk\" product_path=\"/home/axiomer/桌面/productdefine/common/products\" product_config_path=\"/home/axiomer/桌面/productdefine/common/products\" device_name=\"sdk\" device_path=\"/home/axiomer/桌面/device/board/ohos/sdk\" device_company=\"ohos\" device_config_path=\"/home/axiomer/桌面/device/board/ohos/sdk\" target_cpu=\"arm64\" is_standard_system=true ohos_build_compiler_specified=\"\" ohos_build_time=1707374188101 ohos_build_datetime=\"2024-02-08 22:36:28\" build_ohos_sdk=true build_ohos_ndk=true ohos_build_enable_ccache=true ohos_build_type=\"debug\" device_type=\"default\" build_variant=\"root\" use_thin_lto=false ndk_platform=\"linux\" sdk_for_hap_build=true skip_generate_module_list_file=true enable_lto_O0=true archive_ndk=false enable_ndk_doxygen=false use_cfi=false sdk_check_flag=false sdk_platform=\"linux\" root_perf_main=\"main\" runtime_mode=\"release\"" --args=product_name="ohos-sdk" product_path="/home/axiomer/桌面/productdefine/common/products" product_config_path="/home/axiomer/桌面/productdefine/common/products" device_name="sdk" device_path="/home/axiomer/桌面/device/board/ohos/sdk" device_company="ohos" device_config_path="/home/axiomer/桌面/device/board/ohos/sdk" target_cpu="arm64" is_standard_system=true ohos_build_compiler_specified="" ohos_build_time=1707374188101 ohos_build_datetime="2024-02-08 22:36:28" build_ohos_sdk=true build_ohos_ndk=true ohos_build_enable_ccache=true ohos_build_type="debug" device_type="default" build_variant="root" use_thin_lto=false ndk_platform="linux" sdk_for_hap_build=true skip_generate_module_list_file=true enable_lto_O0=true archive_ndk=false enable_ndk_doxygen=false use_cfi=false sdk_check_flag=false sdk_platform="linux" root_perf_main="main" runtime_mode="release" /home/axiomer/桌面/out/sdk |
262 | ERROR at //build/config/BUILDCONFIG.gn:92:15: Could not read file. | 262 | ERROR at //build/config/BUILDCONFIG.gn:92:15: Could not read file. |
@@ -296,7 +296,7 @@ current_toolchain= | |||
296 | <p>在此,我进行了许多尝试,但都无一例外失败了;以下是我的尝试点,或许会有帮助:</p> | 296 | <p>在此,我进行了许多尝试,但都无一例外失败了;以下是我的尝试点,或许会有帮助:</p> |
297 | <ul> | 297 | <ul> |
298 | <li>根据<a href="">一个相似提问</a>,对相关依赖进行安装,失败了: <img | 298 | <li>根据<a href="">一个相似提问</a>,对相关依赖进行安装,失败了: <img |
299 | src="https://www.qin-juan-ge-zhu.top/images/code/ohos_gn_fail_dependencies.png" /></li> | 299 | src="https://www.qin-juan-ge-zhu.top/images/code/ohos_compile_gn_fail_dependencies.png" /></li> |
300 | <li>根据报错信息,在编译命令中添加<code>--no-prebuilt-sdk</code>选项对 ohos-sdk 的构建进行跳过,依然失败</li> | 300 | <li>根据报错信息,在编译命令中添加<code>--no-prebuilt-sdk</code>选项对 ohos-sdk 的构建进行跳过,依然失败</li> |
301 | </ul> | 301 | </ul> |
302 | <p>尝试未果 T^T</p> | 302 | <p>尝试未果 T^T</p> |
@@ -304,7 +304,7 @@ current_toolchain= | |||
304 | <p>报错信息如下所示:</p> | 304 | <p>报错信息如下所示:</p> |
305 | <p>在上述报错信息中提到<code>Permission denied</code>,即权限不够;于是尝试添加<code>sudo</code>,居然跑通了!!!!</p> | 305 | <p>在上述报错信息中提到<code>Permission denied</code>,即权限不够;于是尝试添加<code>sudo</code>,居然跑通了!!!!</p> |
306 | <p>在指导书的编译指令<code>./build.sh --product-name rk3568 --ccache</code>前添加权限设置<code>sudo</code>,即指令更改为:</p> | 306 | <p>在指导书的编译指令<code>./build.sh --product-name rk3568 --ccache</code>前添加权限设置<code>sudo</code>,即指令更改为:</p> |
307 | <pre><code>sudo ./build.sh --product-name rk3568 --ccache</code></pre> | 307 | <pre><code class="language-bash">sudo ./build.sh --product-name rk3568 --ccache</code></pre> |
308 | <p>不知道为什么,编译过程中始终没有向我提出权限要求,但是不加<code>sudo</code>开权限就是跑不通,很奇怪 @ _ <span class="citation" | 308 | <p>不知道为什么,编译过程中始终没有向我提出权限要求,但是不加<code>sudo</code>开权限就是跑不通,很奇怪 @ _ <span class="citation" |
309 | data-cites="也许是">@也许是</span> OHOS 内敛不好意思申请权限呢……</p> | 309 | data-cites="也许是">@也许是</span> OHOS 内敛不好意思申请权限呢……</p> |
310 | <h2 id="另一个奇怪的报错failed-load-btf-from-vmlinux-unknown-error--22"> | 310 | <h2 id="另一个奇怪的报错failed-load-btf-from-vmlinux-unknown-error--22"> |
@@ -312,7 +312,7 @@ current_toolchain= | |||
312 | <p>关于这个报错,当时的错误日志、运行日志、聊天截图均已丢失,但时日不久,记忆还算清楚,加上这个报错困扰了我好些天,因而必须记录。</p> | 312 | <p>关于这个报错,当时的错误日志、运行日志、聊天截图均已丢失,但时日不久,记忆还算清楚,加上这个报错困扰了我好些天,因而必须记录。</p> |
313 | <h3 id="问题简要描述">问题简要描述</h3> | 313 | <h3 id="问题简要描述">问题简要描述</h3> |
314 | <p>正常按照<code>sudo ./build.sh --product-name rk3568 --ccache</code>编译时,报错,主要报错信息如下:</p> | 314 | <p>正常按照<code>sudo ./build.sh --product-name rk3568 --ccache</code>编译时,报错,主要报错信息如下:</p> |
315 | <pre><code>die__process_unit: DW_TAG_label (0xa) @ <0x3adc> not handled! | 315 | <pre><code class="language-plaintext">die__process_unit: DW_TAG_label (0xa) @ <0x3adc> not handled! |
316 | die__process_unit: DW_TAG_label (0xa) @ <0x3bdc> not handled! | 316 | die__process_unit: DW_TAG_label (0xa) @ <0x3bdc> not handled! |
317 | die__process_unit: DW_TAG_label (0xa) @ <0x3bef> not handled! | 317 | die__process_unit: DW_TAG_label (0xa) @ <0x3bef> not handled! |
318 | die__process_unit: DW_TAG_label (0xa) @ <0x3ce5> not handled! | 318 | die__process_unit: DW_TAG_label (0xa) @ <0x3ce5> not handled! |
@@ -333,7 +333,7 @@ make[1]: *** [arch/arm64/Makefile:208: rk3568-toybrick-x0-linux.img]错误2 | |||
333 | make[1]: 离开目录"/home/player/harmony/out/kernel/OBJ/linux-5.10" | 333 | make[1]: 离开目录"/home/player/harmony/out/kernel/OBJ/linux-5.10" |
334 | make: *** [Makefile:192:__sub-make]错误 2</code></pre> | 334 | make: *** [Makefile:192:__sub-make]错误 2</code></pre> |
335 | <p>可以看到,报错的关键点在于<code>FAILED: load BTF from vmlinux: Unknown error -22</code>这里。查看 Makefile 对应报错位置:</p> | 335 | <p>可以看到,报错的关键点在于<code>FAILED: load BTF from vmlinux: Unknown error -22</code>这里。查看 Makefile 对应报错位置:</p> |
336 | <pre><code>vmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE | 336 | <pre><code class="language-makefile">vmlinux: scripts/link-vmlinux.sh autoksyms_recursive $(vmlinux-deps) FORCE |
337 | +$(call if_changed,link-vmlinux) | 337 | +$(call if_changed,link-vmlinux) |
338 | 338 | ||
339 | targets := vmlinux</code></pre> | 339 | targets := vmlinux</code></pre> |
@@ -362,7 +362,7 @@ targets := vmlinux</code></pre> | |||
362 | 时候推荐的最大虚拟机内存)是能编译完成的,编译时长 6h。最终解决。</p> | 362 | 时候推荐的最大虚拟机内存)是能编译完成的,编译时长 6h。最终解决。</p> |
363 | <h1 id="ohos-的-ndk">ohos 的 NDK</h1> | 363 | <h1 id="ohos-的-ndk">ohos 的 NDK</h1> |
364 | <p>NDK 编译方式比较简单,在源码根目录下执行如下命令:</p> | 364 | <p>NDK 编译方式比较简单,在源码根目录下执行如下命令:</p> |
365 | <pre><code># 安装依赖 | 365 | <pre><code class="language-bash"># 安装依赖 |
366 | ./build/build_scripts/env_setup.sh | 366 | ./build/build_scripts/env_setup.sh |
367 | 367 | ||
368 | # 执行完上述命令后记得执行source ~/.bashrc或者重启终端 | 368 | # 执行完上述命令后记得执行source ~/.bashrc或者重启终端 |
@@ -377,7 +377,7 @@ sudo apt-get install libxcursor-dev libxrandr-dev libxinerama-dev | |||
377 | <p>注意,NDK 包提供的交叉编译工具是 cmake 和 ninja,编译器是 clang 和 clang++,并没有我们熟悉的 gcc/g++和 make。除此之外,NDK | 377 | <p>注意,NDK 包提供的交叉编译工具是 cmake 和 ninja,编译器是 clang 和 clang++,并没有我们熟悉的 gcc/g++和 make。除此之外,NDK |
378 | 还未我们提供编译所需的全套服务,如编译工具链配置文件<code>ohos.toolchain.cmake</code>、头文件、库文件等。快说,谢谢 ohos~</p> | 378 | 还未我们提供编译所需的全套服务,如编译工具链配置文件<code>ohos.toolchain.cmake</code>、头文件、库文件等。快说,谢谢 ohos~</p> |
379 | <p>为了更方便地使用 NDK,鄙人不才,写了两个脚本,分别用于 cmake 编译和单文件编译:</p> | 379 | <p>为了更方便地使用 NDK,鄙人不才,写了两个脚本,分别用于 cmake 编译和单文件编译:</p> |
380 | <pre><code>#!/bin/bash | 380 | <pre><code class="language-bash">#!/bin/bash |
381 | 381 | ||
382 | ####################################################################### | 382 | ####################################################################### |
383 | # File Name : compile.sh | 383 | # File Name : compile.sh |
@@ -418,7 +418,7 @@ cmake -B build -D OHOS_STL=c++_$link -D OHOS_ARCH=$arch \ | |||
418 | -D OHOS_PLATFORM=OHOS \ | 418 | -D OHOS_PLATFORM=OHOS \ |
419 | -D CMAKE_TOOLCHAIN_FILE=$(find $native_path -name ohos.toolchain.cmake) | 419 | -D CMAKE_TOOLCHAIN_FILE=$(find $native_path -name ohos.toolchain.cmake) |
420 | cmake --build build</code></pre> | 420 | cmake --build build</code></pre> |
421 | <pre><code>#!/bin/bash | 421 | <pre><code class="language-bash">#!/bin/bash |
422 | 422 | ||
423 | ####################################################################### | 423 | ####################################################################### |
424 | # File Name : compile-tiny.sh | 424 | # File Name : compile-tiny.sh |
@@ -492,7 +492,7 @@ $compiler -o $targetFile $file -Wall \ | |||
492 | </ul> | 492 | </ul> |
493 | <p>不说了,抓紧攒点钱开学升级电脑配置要紧……磁盘快炸了……</p> | 493 | <p>不说了,抓紧攒点钱开学升级电脑配置要紧……磁盘快炸了……</p> |
494 | <p class="time">2024.2.12,甲辰年正月初三<br>2024.4.24改<br>2024.11.19改</p> | 494 | <p class="time">2024.2.12,甲辰年正月初三<br>2024.4.24改<br>2024.11.19改</p> |
495 | <script src="https://test.qin-juan-ge-zhu.top/common/js/comment.js"></script> | 495 | <script src="https://www.qin-juan-ge-zhu.top/common/js/comment.js"></script> |
496 | </div> | 496 | </div> |
497 | </div> | 497 | </div> |
498 | </body> | 498 | </body> |