文章目录
添加一个单板
按照编译内核的流程,添加代码。
补丁文件
openharmony_100ask_v1.2.patch
,已经添加了2个单板:STM32MP157
、IMX6ULL
。
目标:仿照它们,添加一个新的单板,以后修改源码让它再次支持
STM32MP157
或IMX6ULL
。
新加的单板:
芯片公司:
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 添加源码
刚刚配置完了
confi
g,现在要修改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
开始阅读代码,
流程如下:
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
,
流程如下: