OpenHarmony移植之编译工具链

OpenHarmony移植之编译工具链

1、下载工具链

选择适合自己芯片的arm编译工具链,因为我的是arm cortex-a9的芯片,所以我选择如下交叉工具链

Downloads | GNU-A Downloads – Arm DeveloperDownload the The GNU Toolchain for the Cortex-A Family are integrated and validated packages featuring the GCC compiler, libraries and other GNU tools necessary for software development on devices based on the Arm Cortex-A processors or the Arm A-profile architecture.icon-default.png?t=N7T8https://developer.arm.com/downloads/-/gnu-a

2、将工具链放入OpenHarmony目录

2.1、放入prebuilts目录下面

3、配置编译工具链

3.1、在device目录下配置编译工具链

device/board/exynos/fs4412/linux/config.gni
# Board CPU type, e.g. "cortex-a7", "riscv32".
board_cpu = "cortex-a9"

# Board arch, e.g.  "armv7-a", "rv32imac".
board_arch = "armv7"

# Toolchain name used for system compiling.
# E.g. gcc-arm-none-eabi, arm-linux-harmonyeabi-gcc, ohos-clang,  riscv32-unknown-elf.
# Note: The default toolchain is "ohos-clang". It's not mandatory if you use the default toolchain.
board_toolchain = "arm-none-linux-gnueabi-gcc"

# The toolchain path installed, it's not mandatory if you have added toolchain path to your ~/.bashrc.
board_toolchain_path = "~/openharmony/openharmony_3.2/prebuilts/gcc-4.6.4/bin"

# Compiler prefix.
board_toolchain_prefix = "arm-none-linux-gnueabi-"

# Compiler type, "gcc" or "clang".
board_toolchain_type = "gcc"

3.2、在kernel/linux/build目录下配置编译工具链

kernel/linux/build/kernel.mk
diff --git a/kernel.mk b/kernel.mk
index dc3343b..415e4d0 100644
--- a/kernel.mk
+++ b/kernel.mk
@@ -27,15 +27,15 @@ endif
 KERNEL_SRC_PATH := $(OHOS_BUILD_HOME)/kernel/linux/${KERNEL_VERSION}
 KERNEL_PATCH_PATH := $(OHOS_BUILD_HOME)/kernel/linux/patches/${KERNEL_VERSION}
 KERNEL_CONFIG_PATH := $(OHOS_BUILD_HOME)/kernel/linux/config/${KERNEL_VERSION}
-PREBUILTS_GCC_DIR := $(OHOS_BUILD_HOME)/prebuilts/gcc
+PREBUILTS_GCC_DIR := $(OHOS_BUILD_HOME)/prebuilts/gcc-4.6.4
 CLANG_HOST_TOOLCHAIN := $(OHOS_BUILD_HOME)/prebuilts/clang/ohos/linux-x86_64/llvm/bin
 KERNEL_HOSTCC := $(CLANG_HOST_TOOLCHAIN)/clang
 KERNEL_PREBUILT_MAKE := make
 CLANG_CC := $(CLANG_HOST_TOOLCHAIN)/clang

 ifeq ($(KERNEL_ARCH), arm)
-    KERNEL_TARGET_TOOLCHAIN := $(PREBUILTS_GCC_DIR)/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin
-    KERNEL_TARGET_TOOLCHAIN_PREFIX := $(KERNEL_TARGET_TOOLCHAIN)/arm-linux-gnueabi-
+    KERNEL_TARGET_TOOLCHAIN := $(PREBUILTS_GCC_DIR)/bin
+    KERNEL_TARGET_TOOLCHAIN_PREFIX := $(KERNEL_TARGET_TOOLCHAIN)/arm-none-linux-gnueabi-
 else ifeq ($(KERNEL_ARCH), arm64)
     KERNEL_TARGET_TOOLCHAIN := $(PREBUILTS_GCC_DIR)/linux-x86/aarch64/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin
     KERNEL_TARGET_TOOLCHAIN_PREFIX := $(KERNEL_TARGET_TOOLCHAIN)/aarch64-linux-gnu-
@@ -49,7 +49,11 @@ ifeq ($(DEVICE_NAME), hispark_phoenix)
 KERNEL_CROSS_COMPILE += CONFIG_MSP="y"
 endif

+ifeq ($(DEVICE_NAME), fs4412)
+KERNEL_CROSS_COMPILE += CC="$(KERNEL_TARGET_TOOLCHAIN_PREFIX)gcc"
+else
 KERNEL_CROSS_COMPILE += CC="$(CLANG_CC)"
+endif

 ifneq ($(KERNEL_ARCH), x86_64)
 KERNEL_CROSS_COMPILE += CROSS_COMPILE="$(KERNEL_TARGET_TOOLCHAIN_PREFIX)"
@@ -101,7 +105,16 @@ endif
 ifeq ($(KERNEL_VERSION), linux-5.10)
        $(hide) $(KERNEL_MAKE) -C $(KERNEL_SRC_TMP_PATH) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) modules_prepare
 endif
+ifeq ($(DEVICE_NAME), fs4412)
+ifeq ($(KERNEL_VERSION), linux-5.10)
+       $(hide) $(KERNEL_MAKE) -C $(KERNEL_SRC_TMP_PATH) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) -j64 $(KERNEL_IMAGE) LOADADDR=0x40008000
+else
        $(hide) $(KERNEL_MAKE) -C $(KERNEL_SRC_TMP_PATH) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) -j64 $(KERNEL_IMAGE)
+endif
+       $(hide) $(KERNEL_MAKE) -C $(KERNEL_SRC_TMP_PATH) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) dtbs
+else
+       $(hide) $(KERNEL_MAKE) -C $(KERNEL_SRC_TMP_PATH) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) -j64 $(KERNEL_IMAGE)
+endif
 endif
 ifeq ($(DEVICE_NAME), hispark_phoenix)
        $(hide) $(KERNEL_MAKE) -C

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 12:48:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 12:48:04       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 12:48:04       58 阅读
  4. Python语言-面向对象

    2024-07-17 12:48:04       69 阅读

热门阅读

  1. v3+ts一套(详细)

    2024-07-17 12:48:04       21 阅读
  2. 【linux】将一个c文件编译成so库文件

    2024-07-17 12:48:04       25 阅读
  3. 2024CAIP省赛

    2024-07-17 12:48:04       23 阅读
  4. jekins 是如何知道git 提交了代码?

    2024-07-17 12:48:04       19 阅读
  5. MFC:文本可视化输出

    2024-07-17 12:48:04       22 阅读
  6. 七种软件设计原则

    2024-07-17 12:48:04       21 阅读
  7. 常见的排序算法,复杂度

    2024-07-17 12:48:04       17 阅读
  8. c#视觉应用开发中如何在C#中进行图像去伪影?

    2024-07-17 12:48:04       28 阅读
  9. @RequestPart和@RequestParam 区别和联系

    2024-07-17 12:48:04       22 阅读
  10. 聚合支付+分账系统体系

    2024-07-17 12:48:04       24 阅读
  11. 解释 Git 的基本概念和使用方式。

    2024-07-17 12:48:04       25 阅读