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

添加一个单板

按照编译内核的流程,添加代码。

补丁文件openharmony_100ask_v1.2.patch,已经添加了2个单板:STM32MP157IMX6ULL

目标:仿照它们,添加一个新的单板,以后修改源码让它再次支持STM32MP157IMX6ULL

新加的单板:

  • 芯片公司: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

在这里插入图片描述

仿照代码添加一个新的板子:

在这里插入图片描述
在这里插入图片描述

打开menuconfig,就有了一个新的单板的配置

在这里插入图片描述

打开.config文件如下

在这里插入图片描述

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 set
LOSCFG_PLATFORM_DEMOCHIP=y

1.2 添加源码

刚刚配置完了config,现在要修改makefile。用一个取巧的办法就是搜索宏。参照STM32是怎么写的。

grep "LOSCFG_PLATFORM_STM32MP157" * -nr

在这里插入图片描述

这部分是源码,这部分先不管:

在这里插入图片描述
在这里插入图片描述

先修改makefile:

在这里插入图片描述

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

1.3 Makefile中根据配置项修改

Makefile
platform/Makefile
platform/bsp.mk

/openharmony/kernel/liteos_a/Makefile

第一处
在这里插入图片描述
第二处
在这里插入图片描述

/openharmony/kernel/liteos_a/platform/Makefile

第三处

在这里插入图片描述

/openharmony/kernel/liteos_a/platform/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开始阅读代码,
流程如下:

Created with Raphaël 2.3.0 start 禁止中断/设置CPU为ARM模式 禁止CACHE 代码重定位 设置页表(虚拟地址/物理地址映射) 设置栈 设置向量表基地址 清除BSS 调用main函数 end

1.6.2 main函数分析

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

Created with Raphaël 2.3.0 start main OsSetMainTask OsCurrTaskSet 打印系统信息 OsMain 启动操作系统(开始调度APP) end

1.6.3 OsMain函数分析

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

Created with Raphaël 2.3.0 start OsMain 各类初始化1 OsTickInit(会调用到单板的HalClockInit) 各类初始化2 OsSystemInit(会创建任务进而调用SystemInit) 各类初始化3 end

1.6.4 SystemInit函数分析

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

Created with Raphaël 2.3.0 start SystemInit 初始化Flash/挂载根文件系统 初始化串口驱动(给APP使用) 初始化虚拟串口驱动(给APP使用) system_console_init 创建第一个用户进程 end
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值