# OHOSDevNote **Repository Path**: xmwvv/ohosdev-note ## Basic Information - **Project Name**: OHOSDevNote - **Description**: 记录 OpenHarmony 设备开发技巧 - **Primary Language**: Unknown - **License**: Unlicense - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2024-07-08 - **Last Updated**: 2025-11-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 本仓库用于记录 OpenHarmony 设备端开发的一些技巧,以及一些常见问题的解决方案。 无特殊说明,都是基于 OpenHarmony 4.1 版本标准系统。 ## 加速 linux 内核链接 > 内核使用 clang 编译的环境下, 通过移除一些内核优化配置,可以加速内核链接, 预计减少 1 分钟以上的链接时间! 移除 defconfig 中的以下选项 ``` conf CONFIG_LTO CONFIG_LTO_CLANG CONFIG_LTO_CLANG_THIN CONFIG_CFI_CLANG_SHADOW CONFIG_DEBUG_INFO CONFIG_DEBUG_INFO_BTF CONFIG_CFI_CLANG ``` > 移除配置后,重新编译内核,需要删除以下目录 ( 以 hihope rk3568 为例 )再运行产品编译脚本:out/kernel/vendor, out/rk3568/obj/drivers
**如果编译时出错,再次删除以上两个目录** 并重新编译 ## 系统参数查看, 修改 ``` text param get param set ``` ## hilog 开机日志设置 修改 /system/etc/param/hilog.para ``` text hilog.private.on=true hilog.debug.on=true persist.sys.hilog.kmsg.on=true persist.sys.hilog.debug.on=true hilog.flowctrl.proc.on=false hilog.flowctrl.domain.on=false hilog.loggable.global=I hilog.buffersize.global=16777216 ``` ## vscode clangd 配置 > 通过配置 vscode 的 clangd 插件,可以实现 C++ 代码补全、跳转等功能。需要预先安装 clangd 插件、compdb 工具 以 hihope rk3568 为例,在 openharmony 根目录下创建工程为例 - 生成编译数据库 compile_commands.json 命令格式 (在 openharmony 根目录下执行): ./prebuilts/build-tools/linux-x86/bin/ninja -w dupbuild=warn -C <*产品构建路径*> **-t compdb cxx c** > <*产品构建路径*>/compile_commands.json ``` shell ./prebuilts/build-tools/linux-x86/bin/ninja -w dupbuild=warn -C ./out/rk3568 -t compdb cxx c > out/rk3568/compile_commands.json ``` > 有新增加源文件、修改 BUILD.gn 时,需要重新生成编译数据库 - vscode 工程 clangd 配置 修改工程配置, 指定 clangd 路径, 设置产品构建路径 ``` json { "clangd.path": "${workspaceFolder}/prebuilts/clang/ohos/linux-x86_64/llvm/bin/clangd", "clangd.arguments": [ "--compile-commands-dir=${workspaceFolder}/out/rk3568", ] } ``` > clangd 一定要采用 ohos sdk 的版本, 否则会出错 - 内核创建 compile_commands.json: 先编译一遍内核再运行 ./scripts/clang-tools/gen_compile_commands.py >内核需要用 clang 编译, 用 gcc 会出错 ## 系统启动脚本修改 rk3568 平台可修改 device/board/hihope/rk3568/cfg/init.rk3568.cfg. 设备上的路径为 /vendor/etc/init.rk3568.cfg ## 添加 shell 登录脚本 实现 shell 登录时执行脚本,主要用于添加环境变量,别名等 - 添加 /.mkshrc, 系统根目录处于 system 分区 ( system.img ) 参考 .mkshrc : ``` shell alias ...='cd ../..' alias ....='cd ../../..' alias .....='cd ../../../..' alias ......='cd ../../../../..' alias ls='ls --color=tty' alias l='ls -CF' alias la='ls -A' alias ll='ls -alF' alias lsa='ls -lah' alias loader='reboot loader' alias hd='busybox hd' alias vi='busybox vi' export PS1=$'\x1b[32m'ohos@$hardware':'$'\x1b[1;36m'\$PWD$'\x1b'[0m➜$'\n'#' ' ``` > 可修改 third_party/mksh/main.c 中 MKSHRC_PATH 为 /system/etc/.mkshrc, 将产品的 .mkshrc 文件添加到系统中编译 ## 快速编译模块 通过直接调用 ninja 来编译可以节省不少时间 以 foundation/window/window_manager/dmserver:libdms , 产品为 rk3568 为例: ``` shell prebuilts/build-tools/linux-x86/bin/ninja -w dupbuild=warn -C out/rk3568 foundation/window/window_manager/dmserver:libdms ``` 可以通过 [env.sh 脚本](script/env.sh) 里的 build_module 来更方便地编译模块, 同上面的例子,可以这样调用: - 将 env.sh 放到 openharmony 根目录下 - 在 openharmony 根目录执行 env.sh 脚本 ( 先前需要编译过, 或用 hb set 设置了 product ) ``` source env.sh ``` 之后就可以调用 env.sh 里的 build_module 函数来编译模块了 - 进入 foundation/window/window_manager/dmserver 目录 - 运行编译脚本 ``` shell build_module libdms ``` - 编译完成后,可以看到提示信息查看到输出的文件 ( 源代码有发生改变时 ) window/window_manager/libdms.z.so - 运行发送脚本,可以将编译好的文件发送到设备上 ( 如果有生成 so 文件, 会看到输出的路径是 window/window_manager/libdms.z.so, 在设备上查找对应路径是 /system/lib/libdms.z.so ) ``` shell send window/window_manager/libdms.z.so /system/lib ``` > 对应分区需要预先设置成可写 ## hdc usb 共享远程调试 用于设备没网络时,通过 usb 连接到主机,再通过主机转发端口给远程主机使用 #### 终端运行以下命令, 打开 tcp 模式 ``` shell hdcd -t ``` hdcd 默认打开 36199 端口, 可通过修改 persist.hdc.port 参数修改端口号 #### 主机通过以下命令转发端口 ``` shell hdc fport tcp:36199 tcp:36199 ``` #### 主机通过以下命令提供端口给远程主机使用 ``` shell socat TCP-LISTEN:1888,fork TCP:localhost:36199 ``` 这样远程主机就可以通过 1888 端口访问主机的 36199 端口了 ( hdc 只监听 localhost 上的端口, 所以需要通过 socat 转发端口 ) #### 远程主机通过以下命令连接到主机 (以主机 IP 地址 192.168.1.12 为例 ) ``` shell hdc tconn 192.168.1.12:1888 ``` ## 安装文件、文件夹到系统镜像 ### 编写安装脚本 以 dayu200 为例,device/board/hihope/rk3568/BUILD.gn: ``` gn # 当前目录 etc/.mkshrc 安装到 /system/etc ohos_prebuilt_etc("my_mkshrc") {   source = "etc/.mkshrc"   part_name = "rockchip_products"   install_enable = true } # 将当前目录 tools 安装到 /system/bin/tools ohos_prebuilt_executable("my_tools") {   source = "tools"   part_name = "rockchip_products"   install_enable = true } group("rk3568_group") {   deps = [     ":my_mkshrc",     ":my_tools",     ...   ]   ...  } ``` ### 为 tools 设置权限 修改 build/ohos/images/mkimage/dac.txt, 添加以下配置 ``` text system/bin/tools/*, 00755, 0, 2000, 0 ```