OpenHarmony 平头哥玄铁架构 轻量系统移植—润和W800移植分享

本文详细介绍了如何在润和软件海王星100开发板上,基于OpenHarmony LiteOS-M内核进行联盛德W800芯片的移植工作。内容涵盖移植准备、目录规划、单板配置、内核移植、Kconfig适配、模块化编译以及OpenHarmony子系统适配等多个方面,旨在为开发者提供全面的移植指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本方案基于OpenHarmony LiteOS-M内核,使用联盛德W800芯片的润和软件海王星系列[Neptune100开发板](https://gitee.com/openharmony-sig/device_board_hihope),进行开发移植。移植架构采用`Board`与`SoC`分离方案,支持通过Kconfig图形化配置编译选项,增加玄铁`ck804ef`架构移植,实现了`HDF`、`XTS`等子系统及组件的适配。

适配准备

准备ubuntu20.04系统环境,安装[csky-abiv2-elf-gcc](https://occ.t-head.cn/community/download?id=3885366095506644992)交叉编译工具链。

编译构建

目录规划

本方案的目录结构使用[Board和Soc解耦的思路](https://gitee.com/openharmony-sig/sig-content/blob/master/devboard/docs/board-soc-arch-design.md):

芯片适配目录规划为:
   ```
   device
   ├── board                                --- 单板厂商目录
   │   └── hihope                           --- 单板厂商名字:HiHope
   │       └── neptune100                   --- 单板名:Neptune100
   └── soc                                  --- SoC厂商目录
       └── winnermicro                      --- SoC厂商名字:联盛德
           └── wm800                        --- SoC Series名:w800系列芯片
   ```

产品样例目录规划为:

   ```
   vendor
   └── hihope                               --- 开发产品样例厂商目录,润和软件的产品样例
       ├── neptune_iotlink_demo             --- 产品名字:Neptune100产品样例代码
       └── ...
   ```

产品定义

`vendor/hihope/neptune_iotlink_demo/config.json`文件下,描述了产品使用的内核、单板、子系统等信息。其中,内核、单板型号、单板厂商需提前规划好,是预编译指令`hb set`关注的。例如:

   ```
   {
     "product_name": "neptune_iotlink_demo",   --- 产品名
     "ohos_version": "OpenHarmony 3.1",        --- 使用的OS版本
     "type":"mini",                            --- 系统类型: mini
     "version": "3.0",                         --- 系统版本: 3.0
     "device_company": "hihope",               --- 单板厂商:hihope
     "board": "neptune100",                    --- 单板名:neptune100
     "kernel_type": "liteos_m",                --- 内核类型:liteos_m
     "kernel_version": "3.0.0",                --- 内核版本:3.0.0
     "subsystems": []                          --- 子系统
   }
```
填入的信息与规划的目录相对应,其中`device_company`和`board`用于关联出`device/board/<device_company>/`目录。

单板配置

关联到的<board>目录下,在`device/board/hihope/neptune100/liteos_m`目录下放置`config.gni`文件,该配置文件用于描述该单板信息,包括CPU型号、交叉编译工具链及全局编译、链接参数等重要信息:

```
# Kernel type, e.g. "linux", "liteos_a", "liteos_m".
kernel_type = "liteos_m"

# Kernel version.
kernel_version = "3.0.0"

# Board CPU type, e.g. "cortex-a7", "riscv32".
board_cpu = "ck804ef"

# Board arch, e.g.  "armv7-a", "rv32imac".
board_arch = "ck803"

# 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 toolchain.
board_toolchain = "csky-elfabiv2-gcc"

#use_board_toolchain = true

# The toolchain path installed, it's not mandatory if you have added toolchain path to your ~/.bashrc.
board_toolchain_path = ""

# Compiler prefix.
board_toolchain_prefix = "csky-elfabiv2-"

# Compiler type, "gcc" or "clang".
board_toolchain_type = "gcc"

# config.json parse
if (product_path != "") {
  product_conf = read_file("${product_path}/config.json", "json")
  product_name = product_conf.product_name
  bin_list = product_conf.bin_list
}

# Board related common compile flags.
board_cflags = [
  "-mcpu=ck804ef",
  "-mhard-float",
  "-DGCC_COMPILE=1",
  "-DTLS_CONFIG_CPU_XT804=1",
  "-DNIMBLE_FTR=1",
  "-D__CSKY_V2__=1",
  "-DCPU_CK804",
  "-O2",
  "-g3",
  "-Wall",
  "-ffunction-sections",
  "-MMD",
  "-MP",
]

board_cxx_flags = board_cflags

board_asmflags = [
  "-mcpu=ck804ef",
  "-DCPU_CK804",
]

board_ld_flags = []

# Board related headfiles search path.
board_include_dirs = []

# Board adapter dir for OHOS components.
board_adapter_dir = ""

# Sysroot path.
board_configed_sysroot = ""

# Board storage type, it used for file system generation.
storage_type = ""
```

预编译

在工程根目录下输入预编译指令`hb set`可显示相关产品信息,如下:

```
hb set
OHOS Which product do you need?  (Use arrow keys)

hihope
 > neptune_iotlink_demo

OHOS Which product do you need?  neptune_iotlink_demo
```

执行`hb set`后,会在根目录下自动生成`ohos_config.json`文件,文件中会列出待编译的产品信息。

通过`hb env`可以查看选择出来的预编译环境变量。

```
[OHOS INFO] root path: /home/xxxx/openharmony_w800
[OHOS INFO] board: neptune100
[OHOS INFO] kernel: liteos_m
[OHOS INFO] product: neptune_iotlink_demo
[OHOS INFO] product path: /home/xxxx/openharmony_w800/vendor/hihope/neptune_iotlink_demo
[OHOS INFO] device path: /home/xxxx/openharmony_w800/device/board/hihope/neptune100/liteos_m
[OHOS INFO] device company: hihope
```

至此,预编译适配完成,但工程还不能执行hb build进行编译,还需要准备好后续的LiteOS-M内核移植。

内核移植

Kconfig适配

在`kernel/liteos_m`的编译中,需要在相应的单板以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值