# ç§»æ¤å‡†å¤‡ 由于OpenHarmony工程需è¦åœ¨Linux环境下进行编译,æ¤ç« 节将指导厂商æå»ºOpenHarmony的编译环境ã€èŽ·å–OpenHarmonyæºç ,并且创建厂商工作目录完æˆåŽ‚å•†èŠ¯ç‰‡çš„ç¼–è¯‘æ¡†æž¶é€‚é…。 ## æå»ºç¼–译环境 开展移æ¤å‰è¯·å‚考[å¼€å‘环境准备](../quick-start/quickstart-ide-env-win.md)完æˆçŽ¯å¢ƒæå»ºå·¥ä½œã€‚ ## èŽ·å–æºç ### èŽ·å–æ“作 请å‚考[èŽ·å–æºç ](../get-code/sourcecode-acquire.md)å®Œæˆæºç 下载并进行编译。 >  **说明:** > 本文档仅适用于OpenHarmony LTS 3.0.1åŠä¹‹å‰ç‰ˆæœ¬ï¼Œæ‰€ä»¥è¯·èŽ·å–对应版本的æºç 。 ### ç›®å½•ä»‹ç» OpenHarmonyæºç é‡è¦ç›®å½•介ç»è§è¡¨1 OpenHarmonyé‡è¦ç›®å½•,其ä¸deviceå’Œvendor目录为芯片厂商和终端模组厂商工作区域(在[æå»ºç¼–译框架](#æå»ºç¼–译框架)部分详细介ç»ï¼‰ã€‚ **表1** OpenHarmonyé‡è¦ç›®å½• | 目录 | 用途 | | -------- | -------- | | build | 编译框架所在目录。 | | kernel/liteos_m | å†…æ ¸æ‰€åœ¨çš„ç›®å½•ï¼Œå…¶ä¸arch目录æè¿°æ”¯æ’‘çš„å†…æ ¸æž¶æž„ã€‚ | | device | 芯片厂商适é…目录,其ä¸â€œconfig.gniâ€æè¿°å½“å‰èŠ¯ç‰‡ä½¿ç”¨çš„arch,工具链,编译链接选项ç‰ã€‚ | | vendor | 终端模组厂商适é…目录,其ä¸â€œconfig.jsonâ€æè¿°éœ€è¦é›†æˆçš„OpenHarmonyå系统列表。 | | utils | file,kvç‰ç›¸å…³çš„适é…。 | ## æå»ºç¼–译框架 厂商开展移æ¤å·¥ä½œæ—¶ï¼Œéœ€è¦åœ¨å·¥ç¨‹ä¸æŒ‰ç…§å…¬å¸åã€èŠ¯ç‰‡åž‹å·ã€å¼€å‘æ¿åž‹å·ç‰åˆ›å»ºå·¥ä½œç›®å½•ï¼Œå¹¶ä¸”å°†æ‰€åˆ›ç›®å½•åŠ å…¥åˆ°OpenHarmony的编译框架ä¸ï¼Œä½¿åŽ‚å•†çš„å·¥ä½œç›®å½•èƒ½å¤Ÿå‚与编译,开å‘者å¯å‚照以下æ¥éª¤è¿›è¡Œæ“作。 1. 新增芯片厂商。 åŸºäºŽæŸæ¬¾èŠ¯ç‰‡è¿›è¡ŒOpenHarmony的适é…,需è¦åœ¨device目录下创建芯片厂商目录,目录内文件æè¿°å†…æ ¸ç±»åž‹ï¼Œç¼–è¯‘å·¥å…·é“¾ï¼Œç¼–è¯‘é“¾æŽ¥é€‰é¡¹ï¼Œå†…æ ¸é…置选项ç‰ã€‚ 创建目录规则:“device/{芯片厂商}/{èŠ¯ç‰‡å¼€å‘æ¿}â€ã€‚ 例:“device/MyDeviceCompany/MyBoard†``` device ├── hisilicon # hisilicon芯片相关目录,创建目录时å¯ä¾›å‚考 ├── MyDeviceCompany # MyDeviceCompany 芯片厂商 │ └── MyBoard # MyBoard èŠ¯ç‰‡åž‹å· â”‚ ├── BUILD.gn │ ├── liteos_m │ │ └── config.gni # 芯片工具链,编译链接选项 │ └── target_config.h # å†…æ ¸é…置选项 └── qemu # qemu相关 ``` 编译脚本:将“device/MyDeviceCompany/MyBoardâ€ä¸‹çš„æ–‡ä»¶æ·»åŠ åˆ°OpenHarmony编译框架ä¸ã€‚ 路径:“device/MyDeviceCompany/MyBoard/BUILD.gn†``` group("MyBoard") { #å°†æ¤BUILD.gnæ–‡ä»¶åŠ å…¥è§£æž print("MyDeviceCompany MyBoard is under developing.") } ``` 开呿¿ç¼–译é…ç½®ï¼šåŒ…æ‹¬å†…æ ¸ç±»åž‹ã€å·¥å…·é“¾ç±»åž‹ä»¥åŠç¼–è¯‘å‚æ•°ç‰å†…容(详è§è¡¨2“config.gniâ€ä¸»è¦é…置项)。 路径:“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 ="" ``` **表2** “config.gniâ€ä¸»è¦é…置项 | é…置项 | ä»‹ç» | | -------- | -------- | | kernel_type | 开呿¿ä½¿ç”¨çš„å†…æ ¸ç±»åž‹ï¼Œä¾‹å¦‚ï¼šâ€œliteos_aâ€,“liteos_mâ€,“linuxâ€ã€‚ | | kernel_version | 开呿¿ä½¿ç”¨çš„å†…æ ¸ç‰ˆæœ¬ã€‚ | | board_cpu | 开呿¿CPU类型,例如:“cortex-m4â€ï¼Œâ€œcortex-a7â€ï¼Œâ€œriscv32â€ã€‚ | | board_arch | å¼€å‘芯片arch指令集, 例如:“armv7-aâ€ã€‚ | | board_toolchain | 开呿¿è‡ªå®šä¹‰çš„编译工具链å称,例如:“gcc-arm-none-eabiâ€ã€‚若为空,则使用默认为ohos-clang。 | | board_toolchain_path | 编译工具链路径,为空则默认使用环境å˜é‡ä¸çš„工具链。 | | board_toolchain_prefix | 编译工具链å‰ç¼€ï¼Œä¾‹å¦‚:“arm-none-eabi-â€ã€‚ | | board_toolchain_type | ç¼–è¯‘å·¥å…·é“¾ç±»åž‹ï¼Œç›®å‰æ”¯æŒgccå’Œclang。 | | board_cflags | 开呿¿é…置的c文件编译选项。 | | board_cxx_flags | 开呿¿é…置的cpp文件编译选项。 | | board_ld_flags | 开呿¿é…置的链接选项。 | | board_include_dirs | 开呿¿é…置的系统头文件路径列表。 | | board_adapter_dir | 开呿¿é€‚é…æ–‡ä»¶è·¯å¾„。 | 1. 新增模组终端厂商。 åŸºäºŽæŸæ¬¾å…·å¤‡OpenHarmony能力的芯片进行模组终端开å‘,需è¦åœ¨vendorä¸‹åˆ›å»ºæ¨¡ç»„åŽ‚å•†ç›®å½•ï¼Œç›®å½•å†…å®¹ä¸»è¦æ˜¯ä½¿ç”¨çš„OpenHarmonyå系统能力。 创建目录规则:“vendor/{äº§å“æ¨¡ç»„厂商}/{äº§å“æ¨¡ç»„åç§°}â€ã€‚ 例:“vendor/MyVendorCompany/MyProduct†``` vendor ├── hisilicon # hisilicon 产å“相关目录,å¯ä¾›å‚考 └── MyVendorCompany # MyVendorCompany äº§å“æ¨¡ç»„厂商 └── MyProduct # å…·ä½“äº§å“ â”œâ”€â”€ BUILD.gn └── config.json # 产å“å系统列表 ``` 编译脚本:将“vendor/MyVendorCompany/MyProduct/BUILD.gnâ€ä¸‹çš„æ–‡ä»¶æ·»åŠ åˆ°OpenHarmony编译框架ä¸ã€‚ 路径:“vendor/MyVendorCompany/MyProduct/BUILD.gn†``` group("MyProduct") { print("MyVendorCompany MyProduct is under developing.") } ``` 产å“é…置信æ¯ï¼šåŒ…括产å“åã€è®¾å¤‡åނ商ã€å†…æ ¸ç±»åž‹ä»¥åŠæ‰€æ·»åŠ çš„å系统列表ç‰ä¿¡æ¯ï¼ˆè¯¦è§è¡¨3)。 路径:“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", } ``` **表3** “config.jsonâ€æ–‡ä»¶é…置项 | é…置项 | ä»‹ç» | | -------- | -------- | | product_name | 产å“å称,hb set时显示产å“å称。 | | ohos_version | OpenHarmony版本å·ï¼Œä¸Žå®žé™…ç‰ˆæœ¬ä¿æŒä¸€è‡´å³å¯ã€‚ | | device_company | 芯片厂商å称,与device的二级目录å称一致。 | | board | 开呿¿å称,与device的三级目录å称一致。 | | kernel_type | å†…æ ¸ç±»åž‹ï¼Œåº”ä¸Žå¼€å‘æ¿ç§»æ¤çš„OpenHarmonyç³»ç»Ÿå†…æ ¸ç±»åž‹åŒ¹é…。 | | kernel_version | å†…æ ¸ç‰ˆæœ¬å·ï¼Œä¸Žconfig.gniä¸kernel_version值匹é…。 | | subsystem | 产å“选择的å系统,应为OS支æŒçš„å系统。å系统定义请è§build/lite/components目录下的å„å系统æè¿°æ–‡ä»¶ã€‚ | | components | 产å“选择的æŸä¸ªå系统下的组件,å系统支æŒçš„组件详è§build/lite/components/{å系统}.json文件。 | | features | 产å“é…置的æŸä¸ªç»„件的特性,详è§å系统æºç 目录对应的BUILD.gn文件。 | | vendor_adapter_dir | 适é…IOT外设,UtilsFile文件读写能力,一般指å‘device下目录。使用详è§[文件å系统移æ¤å®žä¾‹æ¥éª¤2。](porting-minichip-subsys-filesystem.md#ç§»æ¤å®žä¾‹) | | third_party_dir | 芯片厂自身三方软件目录,例如mbedtls,lwipç‰ã€‚如果使用OpenHarmonyæä¾›çš„ä¸‰æ–¹è½¯ä»¶ï¼Œå¯æš‚æ—¶è®¾ç©ºï¼Œä¹Ÿå¯å‚考hispark_pegasusçš„é…ç½® 。 | | product_adapter_dir | 适é…hal_token以åŠç³»ç»Ÿå‚数,一般指å‘vendor下目录。使用详è§[å¯åЍæ¢å¤å系统移æ¤å®žä¾‹æ¥éª¤1。](porting-minichip-subsys-startup.md#ç§»æ¤å®žä¾‹) | >  **说明:** > 1. ç¼–è¯‘æž„å»ºç³»ç»Ÿä¼šå¯¹å—æ®µè¿›è¡Œæœ‰æ•ˆæ€§æ£€æŸ¥ï¼Œå…¶ä¸ï¼š > > - device_company,board,kernel_type,kernel_version应与芯片厂商é…置匹é…。 > > - subsystem,component应与“build/lite/componentsâ€ä¸‹çš„部件æè¿°åŒ¹é…。