文档详情

lk启动过程.doc

发布:2017-05-23约4.79千字共5页下载文档
文本预览下载声明
? ?LK 是 Little Kernel 它是 appsbl (Applications ARM Boot Loader)流程代码??,little kernel 是小内核小操作系统。 ? ?? ?? ???LK 代码 在 bootable/bootloadler/lk 目录下 ? ?? ?? ???LK 代码结构 ? ?? ?? ???+app? ?? ?? ?? ?// 应用相关 ? ?? ?? ???+arch? ?? ?? ???// arm 体系 ? ?? ?? ???+dev? ?? ?? ?? ?// 设备相关 ? ?? ?? ???+include? ?? ?// 头文件 ? ?? ?? ???+kernel? ?? ???// lk系统相关?? ? ?? ?? ???+platform? ? // 相关驱动 ? ?? ?? ???+projiect? ???// makefile文件 ? ?? ?? ???+scripts? ?? ?// Jtag 脚本 ? ?? ?? ???+target? ?? ???// 具体板子相关 ? ?? ? 在 bootable/bootloadler/lk/arch/arm/ssystem-onesegment.ld 连接文件中 ENTRY(_start)指定 LK 从_start 函数开始,_start 在 lk/arch/crt0.S中 。crt0.S 主要做一些基本的 CPU 的初始化再通过 bl??kmain ;跳转到 C 代码中。 ? ?? ?? ? kmain 在 lk/kernel/main.c 中 ? ?? ? kmain() ? ?? ?? ?? ?kmain 主要做两件事:1、本身 lk 这个系统模块的初始化;2、boot 的启动初始化动作。 ? ?? ?? ?? ?kmain 源码分析: ? ?? ??? ?? ?void kmain() ? ?? ?? ? { ? ?? ?? ??1.初始化进程(lk 中的简单进程)相关结构体。 ? ?? ?? ?? ? thread_init_early(); ? ?? ?? ???2.做一些如 关闭 cache,使能 mmu 的 arm 相关工作。 ? ?? ?? ?? ?arch_early_init(); ? ?? ?? ???3.相关平台的早期初始化 ? ?? ?? ?? ?platform_early_init(); ? ?? ?? ??4.现在就一个函数跳转,初始化UART(板子相关) ? ?? ?? ?? ?target_early_init(); ? ?? ?? ??5.构造函数相关初始化 ? ?? ?? ?? ?call_constructors(); ? ?? ?? ???6.lk系统相关的堆栈初始化 ? ?? ?? ?? ?heap_init(); ? ?? ??? ? 7.简短的初始化定时器对象 ? ?? ?? ?? ?thread_init(); ? ?? ?? ???8.lk系统控制器初始化(相关事件初始化) ? ?? ?? ?? ?dpc_init(); ? ?? ?? ???9.初始化lk中的定时器 ? ?? ?? ?? ?timer_init(); ? ?? ?? ???10.新建线程入口函数?bootstrap2 用于boot 工作(重点) ? ?? ?? ???thread_resume(thread_create(bootstrap2, bootstrap2, NULL, DEFAULT_PRIORITY, DEFAULT_STACK_SIZE)); ? ?? ????} ? ?以上与 boot 启动初始化相关函数是arch_early_init、??platform_early_init 、bootstrap2,这些是启动的重点,我们下面慢慢来看。 ? ?arch_early_init() ? ?? ?? ?体系架构相关的初始化我们一般用的 ARM 体系 ? ?? ?? ?1.关闭cache ? ?? ?? ?arch_disable_cache(UCACHE); ? ?? ?? ?2.设置向量基地址(中断相关) ? ?? ?? ?set_vector_base(MEMBASE); ? ?? ?? ?3.初始化MMU ? ?? ?? ?arm_mmu_init(); ? ?? ?? ?4.初始化MMU映射__平台相关 ? ?? ?? ?platform_init_mmu_mappings(); ? ?? ?? ?5.开启cache??? ?? ? ? ?? ?? ?arch_enable_cache(UCACHE)
显示全部
相似文档