diff --git a/zh-cn/device-dev/porting/transplant-smallchip-kernel-a.md b/zh-cn/device-dev/porting/transplant-smallchip-kernel-a.md index f4de2f397dbc53de27f711e7bfa1e909a35b222c..47f73ccea040482e39b2bd9c1419c4173044ed2f 100644 --- a/zh-cn/device-dev/porting/transplant-smallchip-kernel-a.md +++ b/zh-cn/device-dev/porting/transplant-smallchip-kernel-a.md @@ -26,10 +26,12 @@ LiteOS-A提供系统运行所需的系统初始化流程和定制化配置选项 如下图所示,LiteOS-A的初始化流程主要包含以下五步: 1. 新增target\_config.h文件,并且编写单板内存相关的配置宏DDR\_MEM\_ADDR和DDR\_MEM\_SIZE,分别表示内存起始地址和内存的长度,预链接脚本board.ld.S会根据这两个宏进行展开生成链接脚本board.ld。 -2. 链接阶段根据链接脚本board.ld生成内核镜像。 -3. 单核CPU镜像运行入口为汇编文件reset\_vector\_up.S,多核CPU的入口为reset\_vector\_mp.S,在汇编文件中进行中断向量表初始化、MMU页表初始化等操作。 -4. reset\_vector.S汇编代码最终会跳转到C语言的main函数,进行硬件时钟、软件定时器、内存和任务等初始化,这个过程会依赖target\_config.h的特性宏配置,最后会创建SystemInit任务,并且开启任务调度OsSchedStart\(\)。 -5. SystemInit任务在单板代码中实现,其中调用DeviceManagerStart函数进行HDF驱动初始化,这个过程会调用单板代码中的驱动配置文件hdf.hcs以及drivers源码实现。 +2. 新增定义MMU映射全局数组\(g_archMmuInitMapping\),指定各个内存段属性及虚实映射关系,内核启动阶段根据该表建立内存映射关系。 +3. 如果是多核,需要新增定义从核操作函数句柄\(struct SmpOps\),其中SmpOps\-\>SmpCpuOn函数需要实现唤醒从核的功能;接着定义SmpRegFunc函数,调用LOS_SmpOpsSet接口进行句柄注册;最后通过启动框架完成注册过程,即LOS\_MODULE\_INIT\(SmpRegFunc, LOS_INIT_LEVEL_EARLIEST\)。 +4. 链接阶段根据链接脚本board.ld生成内核镜像。 +5. 单核CPU镜像运行入口为汇编文件reset\_vector\_up.S,多核CPU的入口为reset\_vector\_mp.S,在汇编文件中进行中断向量表初始化、MMU页表初始化等操作。 +6. reset\_vector.S汇编代码最终会跳转到C语言的main函数,进行硬件时钟、软件定时器、内存和任务等初始化,这个过程会依赖target\_config.h的特性宏配置,最后会创建SystemInit任务,并且开启任务调度OsSchedStart\(\)。 +7. SystemInit任务在单板代码中实现,其中调用DeviceManagerStart函数进行HDF驱动初始化,这个过程会调用单板代码中的驱动配置文件hdf.hcs以及drivers源码实现。 整体启动流程如下图所示: