1 Star 0 Fork 0

laokz / ohos_memo

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
small 5.92 KB
一键复制 编辑 原始数据 按行查看 历史
### liteos_a多核启动大体过程-20211024
**core0**
kernel/liteos_a/arch/arm/arm/src/startup/reset_vector_mp.S
将内核映像由ROM的物理地址0搬移至RAM的物理地址0x40000000
用device/qemu/arm_virt/liteos_a/board/platform.c中的g_archMmuInitMapping建立页表g_firstPageTable
启用MMU
初始化栈
清零BSS段
kernel/liteos_a/kernel/common/main.c::main
kernel/liteos_a/kernel/common/los_config.c::OsMain
kernel/liteos_a/kernel/base/core/los_task.c::OsSetMainTask
将当前线程设置主线程"osMain",置为当前线程
**kernel/liteos_a/kernel/common/los_init.c::OsInitCall**LOS_INIT_LEVEL_EARLIEST
(LOS_INIT_LEVEL的原理是链接时设置有序的不同的只读数据段,每段存放若干函数地址钩子;core0控制level的递进)
初始化shell的logger、dmesg
设置时钟、中断
**kernel/liteos_a/kernel/common/los_init.c::OsInitCall**LOS_INIT_LEVEL_ARCH_EARLY(空)
初始化uart
**kernel/liteos_a/kernel/common/los_init.c::OsInitCall**LOS_INIT_LEVEL_PLATFORM_EARLY(空)
打印"main core booting up..."
kernel/liteos_a/kernel/base/core/los_task.c::OsTaskInit
(静态)分配并初始化TCB数组
kernel/liteos_a/kernel/base/sched/sched_sq/los_sched.c::OsSchedInit
分配并初始化调度数据结构
**kernel/liteos_a/kernel/common/los_init.c::OsInitCall**LOS_INIT_LEVEL_KMOD_PREVM(空)
kernel/liteos_a/kernel/base/vm/los_vm_boot.c::OsSysMemInit
kernel/liteos_a/kernel/base/vm/los_vm_map.c::OsKSpaceInit
kernel/liteos_a/arch/arm/arm/src/los_arch_mmu.c::OsArchMmuInit
初始化内核VSpace和malloc VSpace,将g_firstPageTable设为内核页表
kernel/liteos_a/kernel/base/mem/tlsf/los_memory.c::OsKHeapInit
kernel/liteos_a/kernel/base/vm/los_vm_boot.c::OsVmBootMemAlloc
设置内核堆
kernel/liteos_a/kernel/base/vm/los_vm_page.c::OsVmPageStartup
设置可用物理内存页、段数据结构
kernel/liteos_a/arch/arm/arm/src/los_arch_mmu.c::OsInitMappingStartUp
重设内核页表属性
**kernel/liteos_a/kernel/common/los_init.c::OsInitCall**LOS_INIT_LEVEL_VM_COMPLETE
初始化共享内存数据结构
初始化sem、queue
kernel/liteos_a/kernel/base/core/los_process.c::OsSystemProcessCreate
(静态)分配并初始化PCB数组,创建内核进程、idle进程线程
kernel/liteos_a/arch/arm/arm/src/los_arch_mmu.c::OsArchMmuInitPerCPU
内核、用户页表访问分离
**kernel/liteos_a/kernel/common/los_init.c::OsInitCall**LOS_INIT_LEVEL_ARCH
blackbox
**kernel/liteos_a/kernel/common/los_init.c::OsInitCall**LOS_INIT_LEVEL_PLATFORM
bsd
blackbox system adapter
kernel/liteos_a/kernel/base/core/los_swtmr.c::OsSwtmrInit
初始化定时器、创建定时器线程
**kernel/liteos_a/kernel/common/los_init.c::OsInitCall**LOS_INIT_LEVEL_KMOD_BASIC
VFS
**kernel/liteos_a/kernel/common/los_init.c::OsInitCall**LOS_INIT_LEVEL_KMOD_EXTENDED
linux work queue
device perf
device trace
procFS
futex
cpup
hidumper
hilog
liteIPC
perf
power manager
trace
VDSO
syscall
kernel/liteos_a/kernel/base/core/los_smp.c::OsSmpInit
kernel/liteos_a/arch/arm/arm/src/smp.c::HalArchCpuOn
device/qemu/arm_virt/liteos_a/board/platform.c::
释放其它core
打印"releasing secondary cores"
逐个释放并等待所有core完成启动
**所有core已完成启动,开始并行执行**
**LOS_INIT_LEVEL_KMOD_TASK由自旋锁保护,粒度为单个钩子函数,可能由不同的核执行**
**kernel/liteos_a/kernel/common/los_init.c::OsInitCall**LOS_INIT_LEVEL_KMOD_TASK
创建资源管理线程
MP多核管理
创建OOM线程
创建SystemInit线程--device/qemu/arm_virt/liteos_a/board/os_adapt/os_adapt.c::SystemInit
创建CPUP防守定时任务
**同步等待所有core都完成本阶段**
kernel/liteos_a/kernel/base/sched/sched_sq/los_sched.c::OsSchedStart
**开始调度**
打印“cpu 0 entering scheduler”
**core1**
kernel/liteos_a/arch/arm/arm/src/startup/reset_vector_mp.S
设置svc栈
用core0建立的页表启用MMU
kernel/liteos_a/arch/arm/arm/src/smp.c::HalSecondaryCpuStart
用core0的主线程作为当前线程
**置启动完毕标志,core0开始释放并等待下一core;本core继续执行**
kernel/liteos_a/arch/arm/arm/src/los_arch_mmu.c::OsArchMmuInitPerCPU
内核、用户页表访问分离
kernel/liteos_a/arch/arm/gic/gic_v2.c::HalIrqInitPercpu
使能硬件中断
kernel/liteos_a/kernel/base/core/los_smp.c::OsSmpSecondaryInit
用core0建立的内核init进程
初始化定时器、创建定时器线程
创建idle线程
**kernel/liteos_a/kernel/common/los_init.c::OsInitCall**LOS_INIT_LEVEL_KMOD_TASK
**同步等待所有core都完成本阶段**
kernel/liteos_a/kernel/base/sched/sched_sq/los_sched.c::OsSchedStart
**开始调度**
打印“cpu 1 entering scheduler”
#### SystemInit线程的执行内容-20211024
net_init
DeviceManagerStart逐一加载在HDF注册的驱动
获取启动参数(通过读取存储设备)
OsMountRootfs
终端控制台
kernel/liteos_a/kernel/base/core/los_process.c::OsUserInitProcess
创建用户进程
#### 用户init进程线程
kernel/liteos_a/kernel/base/core/los_process.c::OsUserInitProcess
初始化进程的IPC池
HTML
1
https://gitee.com/laokz/ohos_memo.git
git@gitee.com:laokz/ohos_memo.git
laokz
ohos_memo
ohos_memo
master

搜索帮助