openharmony 鸿蒙 porting-minichip-prepare

2022-12-05 浏览 (841)

Porting Preparation

The OpenHarmony project must be built in the Linux environment. This topic describes how to set up the build environment, obtain the OpenHarmony source code, and create a vendor working directory to adapt the compilation framework of the vendor chip.

Setting Up the Build Environment

Before porting, set up the build environment as instructed in Setting Up the Windows Environment.

Obtaining Source Code

Procedure

Download and compile the source code by following instructions in Obtaining Source Code.

icon-note.gif NOTE

This document applies only to OpenHarmony LTS 3.0.1 and earlier versions. Make sure you obtain the source code for one of these versions.

Directory Structure

Table 1 describes the main directories of the OpenHarmony source code. The device and vendor directories are the working areas of chip and device module vendors. For details, see Setting Up the Compilation Framework.

Table 1 Main directories of OpenHarmony source code

DirectoryDescription
buildDirectory where the compilation framework is located.
kernel/liteos_mDirectory where the kernel is located. The arch directory describes the supported kernel architecture.
deviceDirectory for adaptation by the chip vendor, where the config.gni file describes the architecture, toolchain, and linking options used by the current chip.
vendorDirectory for adaptation by the device module vendor, where the config.json file describes the list of OpenHarmony subsystems to be integrated.
utilsAdaptation related to files and KVs.

Setting Up the Compilation Framework

During porting, the vendor must create a working directory in the project based on your company name, chip model, and development board model, and add the created directory to the OpenHarmony compilation framework so that the working directory can participate in compilation. You can perform the following steps:

  1. Add the chip vendor.

    To adapt to OpenHarmony based on a chip, create a chip vendor directory in the device directory. The files in the directory describe the kernel type, compiler toolchain, linking options, and kernel configuration options.

    Directory format: device/{Chip vendor}/{Chip development board}

    Example: device/MyDeviceCompany/MyBoard

    device
    ├── hisilicon                                   # HiSilicon chip-related directory, which can be used as a reference during directory creation.
    ├── MyDeviceCompany                             # Chip vendor
    │   └── MyBoard                                 # Chip model
    │          ├── BUILD.gn
    │          ├── liteos_m
    │          │   └── config.gni                   # Chip toolchain and compilation linking options
    │          └── target_config.h                  # Kernel configuration options
    └── qemu                                        # QEMU-related
    

    Build script: Add the files in device/MyDeviceCompany/MyBoard to the OpenHarmony compilation framework.

    Path: device/MyDeviceCompany/MyBoard/BUILD.gn

    group("MyBoard") {    # Add the BUILD.gn file for parsing.
        print("MyDeviceCompany MyBoard is under developing.")
    }
    

    Compilation configuration of the development board: This includes the kernel type, toolchain type, and compilation parameters. For details, see Table 2.

    Path: device/MyDeviceCompany/MyBoard/liteos_m/config.gni

    # Kernel type, e.g. "linux", "liteos_a", "liteos_m".
    kernel_type = "liteos_m"
     
    # Kernel version.
    kernel_version = ""
     
    # Board CPU type, e.g. "cortex-a7", "riscv32".
    board_cpu = "cortex-m4"
     
    # Board arch, e.g.  "armv7-a", "rv32imac".
    board_arch = ""
     
    # 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 toochain.
    board_toolchain = "arm-none-eabi-gcc"
     
    # The toolchain path instatlled, it's not mandatory if you have added toolchian path to your ~/.bashrc.
    board_toolchain_path = ""
     
    # Compiler prefix.
    board_toolchain_prefix = "arm-none-eabi-"
     
    # Compiler type, "gcc" or "clang".
    board_toolchain_type = "gcc"
     
    # Board related common compile flags.
    board_cflags = []
    board_cxx_flags = board_cflags
    board_ld_flags = []
     
    # Board related headfiles search path.
    board_include_dirs = []
     
    # Board adapter dir for OHOS components.
    board_adapter_dir =""
    

    Table 2 Main configuration items in config.gni

Configuration ItemDescription
kernel_typeKernel type of the development board, for example, "liteos_a", "liteos_m", or "linux".
kernel_versionKernel version of the development board.
board_cpuCPU type of the development board, for example, "cortex-m4", "cortex-a7", or "riscv32".
board_archArchitecture instruction set of the development board, for example, "armv7-a".
board_toolchainName of the customized compiler toolchain used by the development board, for example, "gcc-arm-none-eabi". If this parameter is not specified, ohos-clang will be used by default.
board_toolchain_pathPath of the compiler toolchain. If this parameter is left empty, the toolchain in the environment variable is used.
board_toolchain_prefixPrefix of the compiler toolchain, for example, "arm-none-eabi-".
board_toolchain_typeType of the compiler toolchain, which can be gcc or clang.
board_cflagsBuild options of the .c file configured for the development board.
board_cxx_flagsBuild options of the .cpp file configured for the development board.
board_ld_flagsLinking options configured for the development board.
board_include_dirsList of system header files configured on the development board.
board_adapter_dirAdaptation files of the development board.
  1. Add the device module vendor.

    To develop a device module based on a chip with the OpenHarmony capability, create a module vendor directory under vendor and configure the OpenHarmony subsystem capabilities.

    Directory format: vendor/{Product module vendor}/{Product module name}.

    Example: vendor/MyVendorCompany/MyProduct

    vendor
    ├── hisilicon                                            # HiSilicon chip-related directory, which can be used as a reference during directory creation.
    └── MyVendorCompany                                      # Module vendor
           └── MyProduct                                     # Product
                  ├── BUILD.gn
                  └── config.json                            # Product subsystem list
    

    Build script: Add the files in vendor/MyVendorCompany/MyProduct/BUILD.gn to the OpenHarmony compilation framework.

    Path: vendor/MyVendorCompany/MyProduct/BUILD.gn

    group("MyProduct") {
        print("MyVendorCompany MyProduct is under developing.")
    }
    

    Product configuration information: Add the product name, device vendor, kernel type, and subsystem list. For details, see Table 3.

    Path: vendor/MyVendorCompany/MyProduct/config.json

    {
        "product_name": "MyProduct",
        "ohos_version": "OpenHarmony 1.0",
        "device_company": "MyDeviceCompany",
        "board": "MyBoard",
        "kernel_type": "liteos_m",
        "kernel_version": "",
        "subsystems": [
          {
            "subsystem": "startup",
            "components": [
              { "component": "bootstrap", "features":[] },
              { "component": "syspara_lite", "features":
                [
                  "enable_ohos_startup_syspara_lite_use_thirdparty_mbedtls = false"
                ]
              }
            ]
          }
        ],
        "vendor_adapter_dir": "",
        "third_party_dir": "",
        "product_adapter_dir": "//vendor/MyVendorCompany/MyProduct/hals",
    }
    

    Table 3 Configuration items in the config.json file

Configuration ItemDescription
product_nameProduct name, which is displayed during hb set.
ohos_versionOpenHarmony version number, which must be the same as the actual version number.
device_companyChip vendor name, which is the same as the level-2 directory name under device.
boardName of the development board, which is the same as the level-3 directory name under device.
kernel_typeKernel type, which must match the kernel type of the OpenHarmony system ported to the development board.
kernel_versionKernel version number, which matches the value of kernel_version in config.gni.
subsystemSubsystem, which must be one supported by the OS. For details about the subsystem definition, see the description file of each subsystem in build/lite/components.
componentsComponents of the subsystem. For details about the components supported by a specific subsystem, see the build/lite/components/{Subsystem}.json file.
featuresFeatures of the component configured for the product. For details, see the BUILD.gn file corresponding to the subsystem source code directory.
vendor_adapter_dirDirectory used for adaptation to IoT peripherals and UtilsFile file read and write capabilities. Generally, the value points to a directory under device. For details, see Step 2 in Porting the File Subsystem.
third_party_dirThird-party software directory of the chip vendor, such as mbedtls and lwip. If the third-party software provided by OpenHarmony is used, leave this parameter empty or refer to the configuration for hispark_pegasus.
product_adapter_dirDirectory used for adaptation to hal_token and system parameters. Generally, the value points to a directory under vendor. For details, see Step 1 in Porting the Startup Subsystem.

icon-note.gif NOTE

The compilation and build system checks the validity of fields.

  • The values of device_company, board, kernel_type, and kernel_version must match those configured by the chip vendor.

  • The values of subsystem and component must match the component description under build/lite/components.

你可能感兴趣的鸿蒙文章

harmony 鸿蒙Introduction

harmony 鸿蒙Combo Solution – ASR Chip Porting Case

harmony 鸿蒙Mini-System Devices with Screens – Bestechnic SoC Porting Case

harmony 鸿蒙FAQs

harmony 鸿蒙IoT Solution - Chipsea CST85 Chip Porting Case

harmony 鸿蒙Standard System Solution – Rockchip RK3568 Porting Case

harmony 鸿蒙A Method for Rapidly Porting the OpenHarmony Linux Kernel

harmony 鸿蒙Kernel Porting

harmony 鸿蒙Overview

harmony 鸿蒙Porting the Communication Subsystem

  • 所属分类: 后端技术
  • 本文标签: 鸿蒙 软件
  • 版权声明: 本文链接 https://seaxiang.com/blog/a92ba87ae8b946e9a89ce5c6811660fa