> 文档中心 > 鸿蒙移植i.mx6ull(八) 添加一个单板

鸿蒙移植i.mx6ull(八) 添加一个单板

文章目录

  • 添加一个单板
    • 1.1 配置界面里添加单板
    • 1.2 添加源码
    • 1.3 Makefile中根据配置项修改
    • 1.4 能否编译通过
    • 1.5 解决链接错误
    • 1.6 内核启动流程
      • 1.6.1 启动文件分析
      • 1.6.2 main函数分析
      • 1.6.3 OsMain函数分析
      • 1.6.4 SystemInit函数分析

添加一个单板

按照编译内核的流程,添加代码。
补丁文件openharmony_100ask_v1.2.patch,已经添加了2个单板:STM32MP157、IMX6ULL。
目标:仿照它们,添加一个新的单板,以后修改源码让它再次支持STM32MP157或IMX6ULL。
毕竟我们是教学,从0写代码比较好。
新加的单板:

  • 芯片公司:DemoCom

  • 芯片名称:DemoChip

本章节做的修改会制作为补丁文件:01_openharmony_add_demo_board.patch,
先打补丁:openharmony_100ask_v1.2.patch
再打补丁:01_openharmony_add_demo_board.patch

假设目录openharmony中是未修改的代码,从没打过补丁;
假设补丁文件放在openharmony的同级目录;
打补丁方法如下:

$ cd openharmony$ patch -p1 < ../openharmony_100ask_v1.2.patch$ patch -p1 < ../01_openharmony_add_demo_board.patch

打上补丁后,可以如此编译:

$ cd kernel/liteos_a$ cp tools/build/config/debug/demochip_clang.config .config$ make clean$ make

1.1 配置界面里添加单板

kernel/liteos_a/platform/Kconfig

LOSCFG_PLATFORM="demochip"# LOSCFG_PLATFORM_HI3516DV300 is not set# LOSCFG_PLATFORM_HI3518EV300 is not set# LOSCFG_PLATFORM_STM32MP157 is not set# LOSCFG_PLATFORM_IMX6ULL is not setLOSCFG_PLATFORM_DEMOCHIP=y

1.2 添加源码

在vendor目录下创建:DemoCom/DemoChip目录,里面放置文件。

1.3 Makefile中根据配置项修改

Makefile
platform/Makefile
platform/bsp.mk

1.4 能否编译通过

shell/full/src/base/show.c

shell/full/src/cmds/dmesg.c

shell/full/src/base/shcmd.c

shell/full/src/base/shmsg.c

1.5 解决链接错误

tools/build/mk/los_config.mk

mv vendor/st/stm32mp157/stm32mp157.mk vendor/st/stm32mp157/demochip.mk

vendor/democom/hdf/hdf_vendor.mk

drivers/hdf/lite/hdf_lite.mk

1.6 内核启动流程

内核启动流程可以分为4步骤(非官方):

  • 启动

    • 使用汇编代码编写,涉及非常底层的设置,比如CPU设置、代码重定位等等
    • 地址映射也在这里实现
    • 它最终会调用main函数
  • main函数

    • 以后的代码,基本都是使用C语言编写了
    • 主要工作是:调用OsMain进行各类初始化、最终会启动用户程序
  • OsMain函数

    • 进行操作系统层面的初始化,比如异常初始化、任务初始化、IPC初始化
    • 调用SystemInit
  • SystemInit

    • 偏向于应用程序的初始化
    • 挂载根文件系统
    • 启动第一个用户进程

1.6.1 启动文件分析

kernel\liteos_a\arch\arm\arm\src\startup\reset_vector_up.S开始阅读代码,
流程如下:

1.6.2 main函数分析

main函数在这个文件里kernel\liteos_a\platform\main.c
流程如下:

1.6.3 OsMain函数分析

OsMain函数在这个文件里kernel\liteos_a\kernel\common\los_config.c
流程如下:

1.6.4 SystemInit函数分析

SystemInit函数在这个文件里vendor\st\stm32mp157\board\board.c
流程如下:

简谱吧