IT评测·应用市场-qidao123.com

标题: OpenHarmony移植之编译工具链 [打印本页]

作者: 乌市泽哥    时间: 2024-7-17 20:29
标题: 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.
https://developer.arm.com/downloads/-/gnu-a

2、将工具链放入OpenHarmony目次

2.1、放入prebuilts目次下面


3、配置编译工具链

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

  1. device/board/exynos/fs4412/linux/config.gni
  2. # Board CPU type, e.g. "cortex-a7", "riscv32".
  3. board_cpu = "cortex-a9"
  4. # Board arch, e.g.  "armv7-a", "rv32imac".
  5. board_arch = "armv7"
  6. # Toolchain name used for system compiling.
  7. # E.g. gcc-arm-none-eabi, arm-linux-harmonyeabi-gcc, ohos-clang,  riscv32-unknown-elf.
  8. # Note: The default toolchain is "ohos-clang". It's not mandatory if you use the default toolchain.
  9. board_toolchain = "arm-none-linux-gnueabi-gcc"
  10. # The toolchain path installed, it's not mandatory if you have added toolchain path to your ~/.bashrc.
  11. board_toolchain_path = "~/openharmony/openharmony_3.2/prebuilts/gcc-4.6.4/bin"
  12. # Compiler prefix.
  13. board_toolchain_prefix = "arm-none-linux-gnueabi-"
  14. # Compiler type, "gcc" or "clang".
  15. board_toolchain_type = "gcc"
复制代码
3.2、在kernel/linux/build目次下配置编译工具链

  1. kernel/linux/build/kernel.mk
  2. diff --git a/kernel.mk b/kernel.mk
  3. index dc3343b..415e4d0 100644
  4. --- a/kernel.mk
  5. +++ b/kernel.mk
  6. @@ -27,15 +27,15 @@ endif
  7. KERNEL_SRC_PATH := $(OHOS_BUILD_HOME)/kernel/linux/${KERNEL_VERSION}
  8. KERNEL_PATCH_PATH := $(OHOS_BUILD_HOME)/kernel/linux/patches/${KERNEL_VERSION}
  9. KERNEL_CONFIG_PATH := $(OHOS_BUILD_HOME)/kernel/linux/config/${KERNEL_VERSION}
  10. -PREBUILTS_GCC_DIR := $(OHOS_BUILD_HOME)/prebuilts/gcc
  11. +PREBUILTS_GCC_DIR := $(OHOS_BUILD_HOME)/prebuilts/gcc-4.6.4
  12. CLANG_HOST_TOOLCHAIN := $(OHOS_BUILD_HOME)/prebuilts/clang/ohos/linux-x86_64/llvm/bin
  13. KERNEL_HOSTCC := $(CLANG_HOST_TOOLCHAIN)/clang
  14. KERNEL_PREBUILT_MAKE := make
  15. CLANG_CC := $(CLANG_HOST_TOOLCHAIN)/clang
  16. ifeq ($(KERNEL_ARCH), arm)
  17. -    KERNEL_TARGET_TOOLCHAIN := $(PREBUILTS_GCC_DIR)/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/bin
  18. -    KERNEL_TARGET_TOOLCHAIN_PREFIX := $(KERNEL_TARGET_TOOLCHAIN)/arm-linux-gnueabi-
  19. +    KERNEL_TARGET_TOOLCHAIN := $(PREBUILTS_GCC_DIR)/bin
  20. +    KERNEL_TARGET_TOOLCHAIN_PREFIX := $(KERNEL_TARGET_TOOLCHAIN)/arm-none-linux-gnueabi-
  21. else ifeq ($(KERNEL_ARCH), arm64)
  22.      KERNEL_TARGET_TOOLCHAIN := $(PREBUILTS_GCC_DIR)/linux-x86/aarch64/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin
  23.      KERNEL_TARGET_TOOLCHAIN_PREFIX := $(KERNEL_TARGET_TOOLCHAIN)/aarch64-linux-gnu-
  24. @@ -49,7 +49,11 @@ ifeq ($(DEVICE_NAME), hispark_phoenix)
  25. KERNEL_CROSS_COMPILE += CONFIG_MSP="y"
  26. endif
  27. +ifeq ($(DEVICE_NAME), fs4412)
  28. +KERNEL_CROSS_COMPILE += CC="$(KERNEL_TARGET_TOOLCHAIN_PREFIX)gcc"
  29. +else
  30. KERNEL_CROSS_COMPILE += CC="$(CLANG_CC)"
  31. +endif
  32. ifneq ($(KERNEL_ARCH), x86_64)
  33. KERNEL_CROSS_COMPILE += CROSS_COMPILE="$(KERNEL_TARGET_TOOLCHAIN_PREFIX)"
  34. @@ -101,7 +105,16 @@ endif
  35. ifeq ($(KERNEL_VERSION), linux-5.10)
  36.         $(hide) $(KERNEL_MAKE) -C $(KERNEL_SRC_TMP_PATH) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) modules_prepare
  37. endif
  38. +ifeq ($(DEVICE_NAME), fs4412)
  39. +ifeq ($(KERNEL_VERSION), linux-5.10)
  40. +       $(hide) $(KERNEL_MAKE) -C $(KERNEL_SRC_TMP_PATH) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) -j64 $(KERNEL_IMAGE) LOADADDR=0x40008000
  41. +else
  42.         $(hide) $(KERNEL_MAKE) -C $(KERNEL_SRC_TMP_PATH) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) -j64 $(KERNEL_IMAGE)
  43. +endif
  44. +       $(hide) $(KERNEL_MAKE) -C $(KERNEL_SRC_TMP_PATH) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) dtbs
  45. +else
  46. +       $(hide) $(KERNEL_MAKE) -C $(KERNEL_SRC_TMP_PATH) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) -j64 $(KERNEL_IMAGE)
  47. +endif
  48. endif
  49. ifeq ($(DEVICE_NAME), hispark_phoenix)
  50.         $(hide) $(KERNEL_MAKE) -C
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4