ITPub博客

首页 > 应用开发 > IT综合 > Ubuntu 24.04环境配置:OpenHarmony移植开发环境搭建指南

Ubuntu 24.04环境配置:OpenHarmony移植开发环境搭建指南

IT综合 作者:bhluo 时间:2026-01-30 17:12:00 0 删除 编辑

# Ubuntu 24.04环境配置:OpenHarmony移植开发环境搭建指南


在Ubuntu 24.04系统上构建OpenHarmony命令行开发环境,为跨平台应用开发提供基础支持。本文将详细解析环境配置步骤,并展示核心编译工具的部署流程。


## 系统准备与环境依赖


OpenHarmony开发环境对系统配置有明确要求,首先进行基础环境检测:


```bash

#!/bin/bash

# 环境检测脚本:openharmony_env_check.sh


echo "=== OpenHarmony开发环境检测 ==="

echo "检测时间:$(date)"

echo ""


# 系统信息检测

echo "1. 系统信息:"

lsb_release -a

echo "内核版本:$(uname -r)"

echo ""


# 内存与存储检查

echo "2. 资源检测:"

MEM_GB=$(free -g | awk '/^Mem:/ {print $2}')

SWAP_GB=$(free -g | awk '/^Swap:/ {print $2}')

DISK_FREE=$(df -h / | awk 'NR==2 {print $4}')


echo "物理内存:${MEM_GB}GB"

echo "交换空间:${SWAP_GB}GB"

echo "根目录可用空间:${DISK_FREE}"


if [ "$MEM_GB" -lt 8 ]; then

    echo "警告:建议内存不低于8GB"

fi

if [ "$SWAP_GB" -lt 8 ]; then

    echo "提示:建议配置8GB以上交换空间"

fi

echo ""


# 依赖包检查

echo "3. 必要依赖检查:"

REQUIRED_PKGS=("python3.9" "git" "curl" "wget" "unzip" "tar" "make" "gcc" "g++" "cmake" "ninja-build")


for pkg in "${REQUIRED_PKGS[@]}"; do

    if command -v "$pkg" >/dev/null 2>&1; then

        echo "✓ $pkg 已安装"

    else

        echo "✗ $pkg 未安装"

    fi

done


# Python版本检查

PYTHON_VERSION=$(python3 --version 2>&1 | awk '{print $2}')

echo "Python版本:$PYTHON_VERSION"

if [[ "$PYTHON_VERSION" == 3.9.* ]] || [[ "$PYTHON_VERSION" == 3.10.* ]]; then

    echo "✓ Python版本符合要求"

else

    echo "✗ 需要Python 3.9或3.10"

fi

echo ""


echo "=== 检测完成 ==="

```


## 开发环境完整配置流程


### 步骤1:系统依赖安装


```bash

#!/bin/bash

# 系统依赖安装脚本:install_dependencies.sh


echo "开始安装OpenHarmony开发依赖..."


# 更新包管理器

sudo apt update

sudo apt upgrade -y


# 安装基础编译工具

sudo apt install -y \

    git \

    git-lfs \

    curl \

    wget \

    tar \

    unzip \

    python3.10 \

    python3.10-venv \

    python3-pip \

    python3-dev \

    build-essential \

    gcc-11 \

    g++-11 \

    gcc-arm-none-eabi \

    binutils-arm-none-eabi \

    cmake \

    ninja-build \

    scons \

    pkg-config \

    libssl-dev \

    libffi-dev \

    libncurses5-dev \

    libxml2-dev \

    libusb-1.0-0-dev \

    mtools \

    dosfstools


# 设置Python3.10为默认Python3

sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 1


# 安装Python必要模块

pip3 install --upgrade pip

pip3 install wheel setuptools


# 安装rust工具链(用于部分组件编译)

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y

source $HOME/.cargo/env


# 验证安装

echo "验证安装结果:"

gcc --version | head -n1

g++ --version | head -n1

cmake --version | head -n1

python3 --version

rustc --version


echo "依赖安装完成"

```


### 步骤2:OpenHarmony源码获取与配置


```bash

#!/bin/bash

# OpenHarmony源码获取脚本:clone_openharmony.sh


# 设置工作目录

OH_WORKSPACE="$HOME/openharmony"

mkdir -p "$OH_WORKSPACE"

cd "$OH_WORKSPACE"


echo "工作目录:$OH_WORKSPACE"


# 配置Git参数

git config --global user.name "Your Name"

git config --global user.email "your.email@example.com"

git config --global core.precomposeunicode true

git config --global core.quotepath false


# 安装repo工具

REPO_URL="https://gitee.com/oschina/repo/raw/fork_flow/repo-py3"

curl -o /tmp/repo $REPO_URL

sudo install /tmp/repo /usr/local/bin/repo

chmod a+x /usr/local/bin/repo


# 配置镜像源加速(国内环境)

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'


# 拉取OpenHarmony源码

echo "开始拉取OpenHarmony 4.0 Release代码..."

repo init -u https://gitee.com/openharmony/manifest.git \

    -b refs/tags/OpenHarmony-4.0-Release \

    --no-repo-verify --depth=1


# 同步代码(可选择性同步,减少下载量)

repo sync -c --no-tags \

    --current-branch \

    --optimized-fetch \

    -j$(nproc) \

    --no-clone-bundle


echo "源码同步完成"


# 显示代码结构

echo "代码结构:"

find . -maxdepth 2 -type d -name "*.git" | head -10

```


### 步骤3:编译工具链配置


```bash

#!/bin/bash

# 编译工具链配置:setup_toolchain.sh


OH_WORKSPACE="$HOME/openharmony"

TOOLCHAIN_DIR="$OH_WORKSPACE/prebuilts"


echo "设置编译工具链..."


# 创建工具链目录

mkdir -p "$TOOLCHAIN_DIR"

cd "$TOOLCHAIN_DIR"


# 下载并配置编译工具

TOOLS=(

    "gcc_riscv32-linux-musl"

    "gcc_arm-none-eabi"

    "clang"

    "ninja"

    "nodejs"

    "gn"

    "hc-gen"

)


for tool in "${TOOLS[@]}"; do

    echo "配置 $tool..."

    if [ ! -d "$tool" ]; then

        # 从OpenHarmony镜像下载预编译工具

        wget -q "https://repo.huaweicloud.com/harmonyos/compiler/${tool}/latest/linux/${tool}.tar.gz"

        tar -xzf "${tool}.tar.gz"

        rm "${tool}.tar.gz"

    fi

done


# 设置环境变量

echo "设置环境变量..."

cat > "$HOME/.openharmony_env" << EOF

# OpenHarmony开发环境变量

export OH_WORKSPACE="$OH_WORKSPACE"

export PATH="\$OH_WORKSPACE/prebuilts/clang/ohos/linux-x86_64/llvm/bin:\$PATH"

export PATH="\$OH_WORKSPACE/prebuilts/gcc/linux-x86/arm/gcc-arm-none-eabi/bin:\$PATH"

export PATH="\$OH_WORKSPACE/prebuilts/gcc/linux-x86/riscv32-linux-musl/bin:\$PATH"

export PATH="\$OH_WORKSPACE/prebuilts/cmake/bin:\$PATH"

export PATH="\$OH_WORKSPACE/prebuilts/ninja/linux-x86_64:\$PATH"

export PATH="\$OH_WORKSPACE/prebuilts/nodejs/linux-x86_64/bin:\$PATH"

export PATH="\$OH_WORKSPACE/prebuilts/python/linux-x86_64/bin:\$PATH"


# 编译配置

export OHOS_TARGET_CPU=arm

export OHOS_BUILD_TYPE=release

export OHOS_COMPILER=clang

export OHOS_ROOT="\$OH_WORKSPACE"

EOF


# 使环境变量生效

source "$HOME/.openharmony_env"


echo "工具链配置完成"

```


### 步骤4:编译配置与内核构建


```python

#!/usr/bin/env python3

# 编译配置脚本:build_config.py


import os

import subprocess

import json

import sys


class OpenHarmonyBuilder:

    def __init__(self, workspace_path):

        self.workspace = os.path.expanduser(workspace_path)

        self.config_file = os.path.join(self.workspace, "build_config.json")

        self.setup_environment()

    <"s2.p5k3.org.cn"><"f5.p5k3.org.cn"><"z1.p5k3.org.cn">

    def setup_environment(self):

        """设置编译环境"""

        env_file = os.path.expanduser("~/.openharmony_env")

        if os.path.exists(env_file):

            with open(env_file, 'r') as f:

                for line in f:

                    if line.strip() and not line.startswith('#'):

                        key, value = line.strip().split('=', 1)

                        os.environ[key] = value.strip('"')

        

        # 添加工作目录到环境

        os.environ['OHOS_ROOT'] = self.workspace

    

    def create_build_config(self, target_platform="pc"):

        """创建编译配置文件"""

        config = {

            "platform": target_platform,

            "target_cpu": "x86_64",

            "build_type": "debug",

            "kernel_type": "linux",

            "features": {

                "enable_ace": True,

                "enable_ark": True,

                "enable_hdf": True,

                "enable_drivers": True,

                "enable_applications": True

            },

            "toolchain": {

                "cc": "clang",

                "cxx": "clang++",

                "ar": "llvm-ar",

                "ld": "lld"

            },

            "output_dir": os.path.join(self.workspace, "out", target_platform)

        }

        

        os.makedirs(os.path.dirname(self.config_file), exist_ok=True)

        with open(self.config_file, 'w') as f:

            json.dump(config, f, indent=2)

        

        print(f"编译配置已生成: {self.config_file}")

        return config

    

    def run_gn_gen(self):

        """执行gn生成ninja文件"""

        build_dir = os.path.join(self.workspace, "out", "pc")

        gn_path = os.path.join(self.workspace, "build", "tools", "gn")

        

        if not os.path.exists(gn_path):

            # 使用预构建的gn

            gn_path = os.path.join(self.workspace, "prebuilts", "gn", "linux-x86_64", "gn")

        

        cmd = [

            gn_path,

            "gen",

            build_dir,

            f'--root="{self.workspace}"',

            '--args=target_os="ohos" target_cpu="x86_64"',

            '--export-compile-commands'

        ]

        

        print(f"执行: {' '.join(cmd)}")

        result = subprocess.run(cmd, cwd=self.workspace, capture_output=True, text=True)

        

        if result.returncode != 0:

            print(f"gn生成失败: {result.stderr}")

            return False

        

        print("gn生成成功")

        return True

    

    def run_ninja_build(self, target=None):

        """执行ninja编译"""

        build_dir = os.path.join(self.workspace, "out", "pc")

        ninja_path = os.path.join(self.workspace, "prebuilts", "ninja", "linux-x86_64", "ninja")

        

        cmd = [ninja_path, "-C", build_dir]

        if target:

            cmd.append(target)

        else:

            cmd.append("all")

        

        print(f"执行编译: {' '.join(cmd)}")

        result = subprocess.run(cmd, cwd=self.workspace, capture_output=True, text=True)

        

        if result.returncode != 0:

            print(f"编译失败: {result.stderr}")

            return False

        

        print("编译成功")

        return True


if __name__ == "__main__":

    builder = OpenHarmonyBuilder("~/openharmony")

    

    # 创建配置

    config = builder.create_build_config("pc")

    

    # 生成构建文件

    if builder.run_gn_gen():

        # 开始编译

        success = builder.run_ninja_build("//kernel/linux:linux_kernel")

        if success:

            print("OpenHarmony PC版编译完成")

        else:

            print("编译过程中出现错误")

            sys.exit(1)

```


### 步骤5:示例应用开发与编译


```c

// 示例:简单的OpenHarmony PC应用

// apps/demo/hello_world/src/main.c


#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include "ohos_init.h"

#include "cmsis_os2.h"


// 任务函数

static void HelloTask(void *arg) {

    (void)arg;

    

    for (int i = 0; i < 5; i++) {

        printf("[OpenHarmony PC] Hello World! Count: %d\n", i);

        osDelay(1000);  // 延时1秒

    }

    

    printf("任务执行完成\n");

}


// 应用入口

static void AppEntry(void) {

    osThreadAttr_t attr;

    

    // 配置任务属性

    attr.name = "HelloTask";

    attr.attr_bits = 0U;

    attr.cb_mem = NULL;

    attr.cb_size = 0U;

    attr.stack_mem = NULL;

    attr.stack_size = 4096;  // 4KB栈空间

    attr.priority = osPriorityNormal;

    

    // 创建任务

    if (osThreadNew(HelloTask, NULL, &attr) == NULL) {

        printf("创建任务失败\n");

        return;

    }

    

    printf("OpenHarmony PC应用启动成功\n");

}


// 注册应用

APP_FEATURE_INIT(AppEntry);

```


```python

# 示例应用的BUILD.gn配置文件

# apps/demo/hello_world/BUILD.gn


import("//build/ohos.gni")


# 定义可执行文件

ohos_executable("hello_world") {

  sources = [

    "src/main.c",

    "src/utils.c"

  ]

  

  include_dirs = [

    "include",

    "//kernel/liteos_a/kernel/include",

    "//foundation/arkui/ace_engine/frameworks/core/common",

  ]

  

  cflags = [

    "-Wall",

    "-Werror",

    "-fPIC",

    "-m64"

  ]

  

  ldflags = [

    "-lpthread",

    "-lm"

  ]

  

  deps = [

    "//base/startup/bootstrap_lite/services/source:bootstrap",

    "//foundation/arkui/ace_engine/frameworks/core/common:core_common",

  ]<"j8.p5k3.org.cn"><"n0.p5k3.org.cn"><"w4.p5k3.org.cn">

  

  subsystem_name = "demo"

  part_name = "hello_world"

  

  install_enable = true

  install_images = [ "system" ]

}


# 定义测试

ohos_unittest("hello_world_test") {

  sources = [

    "test/test_main.cpp",

    "test/test_utils.cpp"

  ]

  

  deps = [

    ":hello_world",

    "//third_party/googletest:gtest_main"

  ]

}

```


### 步骤6:环境验证与测试


```bash

#!/bin/bash

# 环境验证脚本:verify_environment.sh


echo "=== OpenHarmony开发环境验证 ==="

echo ""


OH_WORKSPACE="$HOME/openharmony"


# 1. 检查关键目录

echo "1. 目录结构验证:"

required_dirs=(

    "$OH_WORKSPACE"

    "$OH_WORKSPACE/kernel"

    "$OH_WORKSPACE/device"

    "$OH_WORKSPACE/vendor"

    "$OH_WORKSPACE/build"

    "$OH_WORKSPACE/prebuilts"

)


for dir in "${required_dirs[@]}"; do

    if [ -d "$dir" ]; then

        echo "✓ $dir"

    else

        echo "✗ $dir (缺失)"

    fi

done

echo ""


# 2. 检查工具链

echo "2. 工具链验证:"

tools=(

    "python3"

    "cmake"

    "ninja"

    "gn"

    "clang"

    "clang++"

    "arm-none-eabi-gcc"

    "riscv32-unknown-linux-gnu-gcc"

)


for tool in "${tools[@]}"; do

    if command -v "$tool" >/dev/null 2>&1; then

        version=$($tool --version 2>/dev/null | head -n1)

        echo "✓ $tool: $version"

    else

        echo "✗ $tool (未找到)"

    fi

done

echo ""


# 3. 编译测试

echo "3. 简单编译测试:"

TEST_SRC="$OH_WORKSPACE/build_test"

mkdir -p "$TEST_SRC"


cat > "$TEST_SRC/test.c" << 'EOF'

#include <stdio.h>


int main() {

    printf("OpenHarmony编译测试通过\n");

    return 0;

}

EOF


# 使用OpenHarmony工具链编译

if command -v clang >/dev/null 2>&1; then

    clang "$TEST_SRC/test.c" -o "$TEST_SRC/test_output"

    if [ -f "$TEST_SRC/test_output" ]; then

        "$TEST_SRC/test_output"

        echo "✓ 编译测试成功"

    else

        echo "✗ 编译测试失败"

    fi

else

    echo "✗ clang编译器未找到"

fi

echo ""


# 4. 环境变量检查

echo "4. 环境变量检查:"

env_vars=(

    "OHOS_ROOT"

    "PATH"

    "PYTHONPATH"

)


for var in "${env_vars[@]}"; do

    value="${!var}"

    if [ -n "$value" ]; then

        echo "✓ $var: 已设置"

    else

        echo "✗ $var: 未设置"

    fi

done


echo ""

echo "=== 验证完成 ==="

```


## 常见问题解决


```bash

#!/bin/bash

# 问题排查脚本:troubleshoot_openharmony.sh


echo "=== OpenHarmony环境问题排查 ==="


# 1. 权限问题

echo "1. 检查权限..."

if [ "$EUID" -eq 0 ]; then

    echo "警告:不建议使用root用户编译"

fi


# 2. 磁盘空间

echo "2. 检查磁盘空间..."

df -h /home


# 3. 内存使用

echo "3. 检查内存..."

free -h


# 4. 已知问题修复

echo "4. 应用已知修复..."

# 修复Python环境

if ! python3 -c "import ssl" 2>/dev/null; then

    echo "修复Python SSL..."

    sudo apt install -y libssl-dev

fi


# 修复git大文件支持

git lfs install --skip-smudge


# 修复编译缓存

echo "5. 清理编译缓存..."

find ~/openharmony/out -name "*.o" -type f -delete 2>/dev/null

find ~/openharmony -name "ninja.log" -delete 2>/dev/null


echo "=== 排查完成 ==="

```


通过以上步骤,可以在Ubuntu 24.04上成功搭建OpenHarmony命令行开发环境。该环境支持PC平台的OpenHarmony应用开发与移植工作,为开发者提供了完整的编译、调试和测试能力。在配置过程中,需特别注意系统依赖版本匹配和工具链路径配置,这些是确保编译成功的关键因素。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/19545/viewspace-3109559/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-11-01

  • 博文量
    895
  • 访问量
    934227