• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 编译构建<a name="ZH-CN_TOPIC_0000001105406466"></a>
2
3-   [编译环境搭建](#section3336103410314)
4-   [编译构建系统介绍](#section354343816319)
5-   [新建芯片解决方案](#section18612153175011)
6
7## 编译环境搭建<a name="section3336103410314"></a>
8
9首先请搭建OpenHarmony基础环境,步骤请参考轻量和小型系统入门[linux环境搭建](../quick-start/quickstart-lite-env-setup-linux.md)。用户态和LiteOS-A的内核态编译均使用llvm编译器编译,安装方法在搭建基础环境中已提供。若选择移植linux内核,请执行如下命令安装gcc-arm-linux-gnueabi交叉编译工具链,用于编译linux内核态镜像:
10
11```
12sudo apt-get install gcc-arm-linux-gnueabi
13```
14
15## 编译构建系统介绍<a name="section354343816319"></a>
16
17编译构建流程、编译脚本编写、目录规则、独立编译单个组件、独立编译芯片解决方案等介绍请见[编译构建子系统介绍](../subsystems/subsys-build-mini-lite.md)。
18
19## 新建芯片解决方案<a name="section18612153175011"></a>
20
21了解编译框架和搭建完编译环境后,请参考如下步骤新建芯片解决方案:
22
231.  <a name="li20894101862"></a>新建目录
24
25    芯片解决方案的目录规则为:device/\{芯片解决方案厂商\}/\{开发板\}。以海思的hispark\_taurus开发板为例,在代码根目录执行如下命令建立目录:
26
27    ```
28    mkdir -p device/hisilicon/hispark_taurus
29    ```
30
31    芯片解决方案目录树的规则如下:
32
33    ```
34    device
35    └── company                         # 芯片解决方案厂商
36        └── board                       # 开发板名称
37            ├── BUILD.gn                # 编译脚本
38            ├── hals                    # OS南向接口适配
39            ├── linux                   # 可选,linux内核版本
40            │   └── config.gni          # linux版本编译配置
41            └── liteos_a                # 可选,liteos内核版本
42                └── config.gni          # liteos_a版本编译配置
43    ```
44
45    以hispark\_taurus移植linux内核为例,目录树应该如下:
46
47    ```
48    device
49    └── hisilicon
50        └── hispark_tautus
51            ├── BUILD.gn
52            ├── hals
53            ├── ......
54            └── linux
55                └── config.gni
56    ```
57
58    目录树建立后开发板相关的源码放到hispark\_taurus目录下。
59
602.  配置开发板编译选项
61
62    [步骤1](#li20894101862)中的config.gni可配置开发板相关的编译选项,编译构建框架将会遵照该配置文件中的参数编译所有用户态OS组件。其中关键的字段说明如下:
63
64    ```
65    kernel_type:            开发板使用的内核类型,例如:“liteos_a”, “liteos_m”, “linux”。
66    kernel_version:         开发板使用的内核版本,例如:“4.19”。
67    board_cpu:              开发板CPU类型,例如:“cortex-a7”, “riscv32”。
68    board_arch:             开发板芯片arch, 例如: “armv7-a”, “rv32imac”。
69    board_toolchain:        开发板自定义的编译工具链名称,例如:“gcc-arm-none-eabi”。若为空,则使用默认为ohos-clang。
70    board_toolchain_prefix:编译工具链前缀,例如:“gcc-arm-none-eabi”。
71    board_toolchain_type:  编译工具链类型,目前支持gcc和clang。例如:“gcc” ,“clang”。
72    board_cflags:          开发板配置的c文件编译选项。
73    board_cxx_flags:       开发板配置的cpp文件编译选项。
74    board_ld_flags:        开发板配置的链接选项。
75    ```
76
77    还以海思的hispark\_taurus开发板为例,对应的device/hisilicon/hispark\_taurus/config.gni内容如下:
78
79    ```
80    # Board CPU type, e.g. "cortex-a7", "riscv32".
81    board_cpu = "cortex-a7"
82
83    # Toolchain name used for system compiling.
84    # E.g. gcc-arm-none-eabi, arm-linux-harmonyeabi-gcc, ohos-clang,  riscv32-unknown-elf.
85    # Note: The default toolchain is "ohos-clang". It's not mandatory if you use the default toochain.
86    board_toolchain = "mips-linux-gnu-gcc"
87
88    # The toolchain path instatlled, it's not mandatory if you have added toolchian path to your ~/.bashrc.
89    board_toolchain_path =
90        rebase_path("//prebuilts/gcc/linux-x86/arm/arm-linux-ohoseabi-gcc/bin",
91                    root_build_dir)
92
93    # Compiler prefix.
94    board_toolchain_prefix = "arm-linux-ohoseabi-"
95
96    # Compiler type, "gcc" or "clang".
97    board_toolchain_type = "gcc"
98
99    # Board related common compile flags.
100    board_cflags = [
101    ]
102    board_cxx_flags = [
103    ]
104    board_ld_flags = []
105
106    # Board related headfiles search path.
107    board_include_dirs = []
108    board_include_dirs += [ rebase_path(
109            "//prebuilts/gcc/linux-x86/arm/arm-linux-ohoseabi-gcc/target/usr/include",
110            root_build_dir) ]
111
112    # Board adapter dir for OHOS components.
113    board_adapter_dir = ""
114
115    # Sysroot path.
116    board_configed_sysroot = ""
117
118    # Board storage type, it used for file system generation.
119    storage_type = "emmc"
120    ```
121
1223.  编写开发板编译脚本
123
124    步骤1中的BUILD.gn为新增的开发板的编译入口,主要用于编译开发板相关的代码,主要为设备侧驱动、设备侧接口适配\(媒体,图形等\)和开发板的SDK等等。
125
126    海思的hispark\_taurus开发板的device/hisilicon/hispark\_taurus/BUILD.gn可写成:
127
128    ```
129    # group名称建议与开发板名称一致
130    group("hispark_taurus") {
131      deps = [ "//kernel/linux/patches:linux_kernel" ] # 拉起内核编译
132      deps += [
133      ...... # 开发板其他编译单元
134      ]
135    }
136    ```
137
1384.  编译调试
139
140    在开发板目录下执行hb set和hb build即可启动芯片解决方案的编译,编译框架会以开发板下的BUILD.gn为入口启动编译。
141
142
143