# 芯片解决方案 ### 芯片解决方案é…置规则 - èŠ¯ç‰‡è§£å†³æ–¹æ¡ˆæ˜¯æŒ‡åŸºäºŽæŸæ¬¾å¼€å‘æ¿çš„完整解决方案,包å«é©±åЍã€è®¾å¤‡ä¾§æŽ¥å£é€‚é…ã€å¼€å‘æ¿sdkç‰ã€‚ - 芯片解决方案是一个特殊的部件,æºç 路径规则为:**device/{开呿¿}/{芯片解决方案厂商}**。 - 芯片解决方案部件会éšäº§å“é€‰æ‹©çš„å¼€å‘æ¿é»˜è®¤ç¼–译。 - èŠ¯ç‰‡è§£å†³æ–¹æ¡ˆç›®å½•æ ‘è§„åˆ™å¦‚ä¸‹ï¼š ```shell device └── board └── company # 芯片解决方案厂商 └── hispark_aries # 开呿¿åç§° ├── BUILD.gn # 编译脚本 ├── hals # OSå—呿ޥå£é€‚é… â”œâ”€â”€ linux # å¯é€‰ï¼Œlinuxå†…æ ¸ç‰ˆæœ¬ │ └── config.gni # linux版本编译é…ç½® └── liteos_a # å¯é€‰ï¼Œliteoså†…æ ¸ç‰ˆæœ¬ └── config.gni # liteos_a版本编译é…ç½® ``` > **注æ„**:config.gniä¸ºå¼€å‘æ¿ç¼–译相关的é…置,编译时会采用该é…置文件ä¸çš„傿•°ç¼–译所有OS部件,编译阶段系统全局å¯è§ã€‚ - config.gniçš„å…³é”®å—æ®µä»‹ç»å¦‚下: ```shell kernel_type: 开呿¿ä½¿ç”¨çš„å†…æ ¸ç±»åž‹ï¼Œä¾‹å¦‚ï¼šâ€œliteos_aâ€, “liteos_mâ€, “linuxâ€ã€‚ kernel_version: å¼€å‘ä½¿ç”¨çš„å†…æ ¸ç‰ˆæœ¬ï¼Œä¾‹å¦‚ï¼šâ€œ4.19â€ã€‚ board_cpu: 开呿¿CPU类型,例如:“cortex-a7â€, “riscv32â€ã€‚ board_arch: å¼€å‘芯片arch, 例如: “armv7-aâ€, “rv32imacâ€ã€‚ board_toolchain: 开呿¿è‡ªå®šä¹‰çš„编译工具链å称,例如:“gcc-arm-none-eabiâ€ã€‚若为空,则使用默认为ohos-clang。 board_toolchain_prefix:编译工具链å‰ç¼€ï¼Œä¾‹å¦‚:“gcc-arm-none-eabiâ€ã€‚ board_toolchain_type: ç¼–è¯‘å·¥å…·é“¾ç±»åž‹ï¼Œç›®å‰æ”¯æŒgccå’Œclang。例如:“gcc†,“clangâ€ã€‚ board_cflags: 开呿¿é…置的c文件编译选项。 board_cxx_flags: 开呿¿é…置的cpp文件编译选项。 board_ld_flags: 开呿¿é…置的链接选项。 ``` ### 新增并编译芯片解决方案 ç¼–è¯‘æž„å»ºæ”¯æŒæ·»åŠ æ–°çš„èŠ¯ç‰‡è§£å†³æ–¹æ¡ˆåŽ‚å•†ï¼Œå…·ä½“æ¥éª¤å¦‚下: 1. 创建芯片解决方案目录。 按照芯片解决方案é…置规则创建目录,以芯片厂商realtek的“rtl8720â€œå¼€å‘æ¿ä¸ºä¾‹, åœ¨ä»£ç æ ¹ç›®å½•执行: ```shell mkdir -p device/board/realtek/rtl8720 ``` 2. åˆ›å»ºå†…æ ¸é€‚é…ç›®å½•ï¼Œå¹¶ç¼–å†™å¼€å‘æ¿ç¼–译é…ç½®config.gni文件。 以realtek的“rtl8720â€œå¼€å‘æ¿çš„liteos_a适é…为例,device/board/realtek/rtl8720/liteos_a/config.gni的内容如下: ```shell # Kernel type, e.g. "linux", "liteos_a", "liteos_m". kernel_type = "liteos_a" # Kernel version. kernel_version = "3.0.0" # Board CPU type, e.g. "cortex-a7", "riscv32". board_cpu = "real-m300" # 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 = "gcc-arm-none-eabi" # The toolchain path instatlled, it's not mandatory if you have added toolchian path to your ~/.bashrc. board_toolchain_path = rebase_path("//prebuilts/gcc/linux-x86/arm/gcc-arm-none-eabi/bin", root_build_dir) # Compiler prefix. board_toolchain_prefix = "gcc-arm-none-eabi-" # Compiler type, "gcc" or "clang". board_toolchain_type = "gcc" # Board related common compile flags. board_cflags = [] board_cxx_flags = [] board_ld_flags = [] ``` 3. 编写编译脚本。 åœ¨å¼€å‘æ¿ç›®å½•下创建BUILD.gn,targetåç§°åº”ä¸Žå¼€å‘æ¿å称一致。以realtekçš„rtl8720开呿¿ä¸ºä¾‹ï¼Œdevice/board/realtek/rtl8720/BUILD.gn内容å¯ä»¥æ˜¯ï¼š ```shell group("rtl8720") { # target类型也å¯ä»¥shared_library, static_library, executable # 具体内容 ...... } ``` 4. 编译芯片解决方案。 åœ¨å¼€å‘æ¿ç›®å½•下执行hb build,å³å¯å¯åŠ¨èŠ¯ç‰‡è§£å†³æ–¹æ¡ˆçš„ç¼–è¯‘ã€‚