2026/5/13 23:43:01
网站建设
项目流程
dedecms建设慕课网站,可以做手机网页的网站,深圳市造价信息网官网,jquery扁平自适应网站html5模板BQ3588C开发板编译踩坑指南
在嵌入式系统开发的世界里#xff0c;拿到一块新开发板的第一步往往不是点亮LED#xff0c;而是——能不能把代码顺利编译出来。最近入手了贝启科技的BQ3588C开源鸿蒙开发板#xff0c;满怀期待地拉完OpenHarmony源码后#xff0c;却发现构建过…BQ3588C开发板编译踩坑指南在嵌入式系统开发的世界里拿到一块新开发板的第一步往往不是点亮LED而是——能不能把代码顺利编译出来。最近入手了贝启科技的BQ3588C开源鸿蒙开发板满怀期待地拉完OpenHarmony源码后却发现构建过程远比想象中“精彩”。从权限问题到依赖缺失每一个报错都像是系统在默默考验你的耐心和Linux功底。本文承接前一篇《玩转贝启科技BQ3588C开源鸿蒙系统开发板 —— 代码下载2》不再赘述代码获取流程而是聚焦于真实环境下的完整编译实战记录我在Ubuntu主机上为BQ3588C构建OpenHarmony镜像时所遭遇的一系列典型问题及其解决路径。如果你也正卡在某个莫名其妙的头文件错误或权限拒绝上不妨往下看也许能少走几小时弯路。编译起点预编译工具链准备进入源码根目录后第一件事是运行官方脚本自动下载必要的构建工具build/prebuilts_download.sh执行后输出如下日志片段$ build/prebuilts_download.sh Defaulting to user installation because normal site-packages is not writeable Looking in indexes: http://repo.huaweicloud.com/repository/pypi/simple Collecting rich Downloading http://repo.huaweicloud.com/repository/pypi/packages/8d/5f/21a93b2ec205f4b79853ff6e838e3c99064d5dbe85ec6b05967506f14af0/rich-13.5.2-py3-none-any.whl (239 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 239.7/239.7 KB 40.0 MB/s eta 0:00:00 ... Installing collected packages: pygments, mdurl, markdown-it-py, rich Successfully installed markdown-it-py-2.2.0 mdurl-0.1.1 pygments-2.14.0 rich-13.5.2 rich installed successfully prebuilts_download start Traceback (most recent call last): File /home/ph/build/prebuilts_download.py, line 361, in module sys.exit(main()) File /home/ph/build/prebuilts_download.py, line 331, in main os.makedirs(args.bin_dir, exist_okTrue) PermissionError: [Errno 13] Permission denied: /home/ph/../openharmony_prebuilts看起来Python依赖装好了但最后一步失败了无法创建/openharmony_prebuilts目录。原因很直接——脚本试图将预编译工具链写入上级目录而当前用户对该路径无写权限。提权解决用sudo执行脚本最简单的办法就是提权运行sudo bash build/prebuilts_download.sh这次输出明显顺畅许多可以看到大量组件被成功下载并解压cmake-linux-x86-3.16.5.tar.gz ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100.0% • 39.9/39.9 MB • 6.6 MB/s • 0:00:00 gn-linux-x86-20230426.tar.gz ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100.0% • 1.2/1.2 MB • 1.9 MB/s • 0:00:00 ninja-linux-x86-1.11.0.tar.gz ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100.0% • 122.4/122.4 kB • 6.0 MB/s • 0:00:00 ark_js_prebuilts_20230713.tar.gz ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100.0% • 329.8/329.8 MB • 15.6 MB/s • 0:00:00 node-v14.21.1-linux-x64.tar.gz ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100.0% • 35.0/35.0 MB • 8.2 MB/s • 0:00:00 cmake-windows-x86-3.16.5.tar.gz ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100.0% • 28.8/28.8 MB • 7.8 MB/s • 0:00:00 clang-mingw.tar.gz ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100.0% • 1.1/1.1 GB • 6.2 MB/s • 0:00:00 ... start npm install, please wait. prebuilts_download end ... copy inside cxx finished! update llvm ndk finished! change rustlib name finished! Created /home/ph/prebuilts/clang/ohos/linux-x86_64/llvm/bin/lldb-mi Created /home/ph/prebuilts/clang/ohos/windows-x86_64/llvm/bin/lldb-mi.exe看到prebuilts_download end这行提示说明工具链已就位。此时gn,ninja,clang,Node.js等关键工具均已部署完毕可以进入下一步。⚠️经验提醒虽然用了sudo但建议后续尽量避免全程以 root 身份操作整个构建流程以防污染用户环境。仅对特定需要写系统路径的步骤提权即可。启动构建第一次调用build.sh接下来按照文档执行构建命令./build.sh --product-name dayu210 --ccache结果刚起步就报错$ ./build.sh --product-name dayu210 --ccache The system shell is bash 5.1.16(1)-release 2024-01-02 07:26:14 --product-name dayu210 --ccache Current Node.js version is v14.21.1 Node.js version check passed lockfilefalse start set ohpm download oh-command-line-tools ohcommandline-tools-linux.zip: Permission denied unzip: cannot find or open ohcommandline-tools-linux.zip, ohcommandline-tools-linux.zip.zip or ohcommandline-tools-linux.zip.ZIP. chmod: cannot access /home/ph/OpenHarmony_Source/prebuilts/build-tools/common/oh-command-line-tools/ohpm/bin/init: No such file or directory init ohpm ./build.sh: line 121: /home/ph/OpenHarmony_Source/prebuilts/build-tools/common/oh-command-line-tools/ohpm/bin/init: No such file or directory ./build.sh: line 122: ohpm: command not found错误定位ohpm 初始化失败问题出在ohpm—— OpenHarmony 的包管理器。构建脚本尝试下载oh-command-line-tools工具包来初始化它但由于当前用户对目标目录无写权限导致下载中断、解压失败最终找不到ohpm命令。解法依旧sudo 执行构建脚本既然涉及文件系统写入那就继续提权试试sudo ./build.sh --product-name dayu210 --ccache这一次日志显示工具包成功下载--2024-01-02 08:45:26-- https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_package_901_9/a6/v3/cXARnGbKTt-4sPEi3GcnJA/ohcommandline-tools-linux-2.0.0.1.zip?HW-CC-KVV1... Resolving contentcenter-vali-drcn.dbankcdn.cn (contentcenter-vali-drcn.dbankcdn.cn)... 39.136.88.115 Connecting to ... connected. HTTP request sent, awaiting response... 200 OK Length: 17870081 (17M) [application/zip] Saving to: ‘ohcommandline-tools-linux.zip’ ohcommandline-tools-linux.zip 100%[] 17.04M 21.8MB/s in 0.8s Archive: ohcommandline-tools-linux.zip inflating: oh-command-line-tools/sdkmanager/conf/config.properties inflating: oh-command-line-tools/bin/ohpm ...随后ohpm成功初始化构建流程得以继续推进。小技巧若你希望避免频繁使用sudo可手动修改相关脚本中的下载路径至用户有权限的目录如~/openharmony_prebuilts并通过环境变量指定但这需要深入理解构建系统的路径逻辑。新坑浮现javac 找不到正当我以为终于要进入编译阶段时又一个错误跳了出来[OHOS ERROR] /home/ph/OpenHarmony_Source/developtools/packing_tool/haptobin.sh: line 65: javac: command not found [OHOS ERROR] Exception: compile haptobin java class failed!为什么鸿蒙项目还需要 Java尽管 OpenHarmony 主体是C/C/JS架构但在打包.hap应用包时某些内部工具仍依赖 Java 编写的辅助程序例如haptobin工具需编译一个Java类用于转换资源。因此即使你不写一行Java代码构建系统依然需要javac。安装 JDK选择 OpenJDK 11安装命令如下sudo apt install openjdk-11-jdk验证是否安装成功$ javac --version javac 11.0.21确认可用后重新运行构建脚本sudo ./build.sh --product-name dayu210 --ccache编译进度终于开始滚动进入内核与子系统模块的深度构建阶段。图形系统编译失败X11/Xcursor/Xcursor.h 找不到当构建进行到图形渲染部分特别是Skia或Flutter后端时出现致命错误../../third_party/flutter/glfw/src/x11_platform.h:39:10: fatal error: X11/Xcursor/Xcursor.h file not found #include X11/Xcursor/Xcursor.h ^~~~~~~~~~~~~~~~~~~~~~~ 1 error generated.问题本质缺少 X11 开发头文件虽然你在桌面版Ubuntu上运行系统本身支持图形界面但默认并未安装开发用的头文件包。这个错误意味着编译器找不到 X Cursor Extension 的定义头文件。安装开发包修复执行以下命令安装所需依赖sudo apt install xorg-dev libx11-dev libxt-dev libxcursor-dev其中-xorg-dev提供核心X11开发头文件-libx11-devX11客户端库开发包-libxcursor-dev鼠标光标支持开发头文件安装完成后检查是否存在该头文件$ ls /usr/include/X11/Xcursor/Xcursor.h /usr/include/X11/Xcursor/Xcursor.h存在即表示修复完成。再次启动构建顺利通过此前卡住的位置。内核阶段再遇阻openssl/bio.h 不存在就在以为大局已定时内核镜像构建阶段突然报错scripts/extract-cert.c:21:10: fatal error: openssl/bio.h: No such file or directory #include openssl/bio.h ^~~~~~~~~~~~~~~ compilation terminated. make[2]: *** [scripts/Makefile.host:95: scripts/extract-cert] Error 1深层原因内核构建依赖 OpenSSL 开发库Linux内核在构建过程中会使用一些工具如extract-cert来处理证书这些工具用到了 OpenSSL 的 BIO 接口因此需要链接 OpenSSL 开发库。但如果没有安装libssl-dev头文件就会缺失。解决方案安装 libssl-devsudo apt install libssl-dev该包会提供/usr/include/openssl/bio.h等关键头文件。安装后重试构建命令日志恢复正常[OHOS INFO] [82/16779] CXX clang_x64/obj/third_party/skia/src/gpu/gpu/GrGpu.o [OHOS INFO] [83/16779] CXX clang_x64/obj/third_party/skia/src/gpu/gpu/GrImageContext.o ...编译任务持续增加CPU占用飙升说明已经进入高强度并行构建阶段。经验总结常见编译问题一览表为了方便后来者快速排查我将上述所有问题整理成一张清晰的对照表问题现象报错关键词根本原因解决方法预编译脚本失败Permission denied: /home/ph/../openharmony_prebuilts上级目录无写权限使用sudo bash build/prebuilts_download.shohpm 初始化失败ohcommandline-tools-linux.zip: Permission denied下载路径受限使用sudo ./build.sh或调整路径权限Java 编译失败command not found: javac未安装 JDK安装openjdk-11-jdkX11 头文件缺失X11/Xcursor/Xcursor.h file not found缺少 X11 开发包安装xorg-dev,libxcursor-dev等OpenSSL 头文件缺失fatal error: openssl/bio.h: No such file or directory未安装 SSL 开发库安装libssl-dev这些问题看似琐碎实则反映了现代嵌入式构建系统的复杂性不仅要处理交叉编译还要应对宿主系统上的各种隐式依赖。推荐一次性安装基础依赖为了避免反复踩坑建议在开始编译前统一安装以下常用开发包sudo apt update sudo apt install -y \ openjdk-11-jdk \ git-core gnupg flex bison gperf build-essential \ zip curl libc6-dev libncurses5-dev libssl-dev \ libx11-dev libxext-dev libxrender-dev libxrandr-dev \ libxfixes-dev libxi-dev libxinerama-dev libxcursor-dev \ libgl1-mesa-dev libglu1-mesa-dev \ xorg-dev libudev-dev libasound2-dev \ python3 python3-pip python3-setuptools \ libssl-dev这条命令覆盖了绝大多数 OpenHarmony 构建所需的系统级依赖包括- Java 支持- 终端与文本处理工具- 内核与驱动开发头文件- 图形系统开发包X11、OpenGL- Python 环境- 音频、设备管理等子系统依赖一次安装基本告别“缺头少尾”的尴尬局面。写在最后编译是一场修行这次为BQ3588C开发板编译OpenHarmony的经历堪称一场典型的“从入门到放弃再到重启”的心路历程。每一个看似简单的命令背后都可能隐藏着数小时的排查时间。但从另一个角度看正是这些“坑”让我们更深入地理解了构建系统的运作机制。目前虽然仍未完全生成最终镜像仍有少量链接错误待处理但核心障碍基本扫清。下一步只需关注最后阶段的链接器报错就能产出可用于烧录的固件。这种高度集成的构建流程既是挑战也是机遇。它迫使开发者掌握全栈知识从权限管理到跨平台工具链再到系统级依赖协调。当你终于看到[OHOS INFO] Build success的那一刻所有的等待都将值得。下一篇文章将继续深入带大家完成最后的链接修复并真正实现“从零到一点亮第一屏”。在此之前记得给你的虚拟机做个快照——别问我是怎么知道的。