lk启动过程.doc
文本预览下载声明
? ?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)
显示全部