Little Kernel启动过程

Posted 四季帆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Little Kernel启动过程相关的知识,希望对你有一定的参考价值。

1. LK 代码结构

app/			应用相关
arch/		    arm 体系 
dev/			设备相关
include/		头文件
kernel/		    lk系统相关   
platform/		相关驱动
projiect/		makefile文件
scripts/		Jtag 脚本
target/		    具体板子相关

2. LK流程分析

        lk/arch/arm/ssystem-onesegment.ld 连接文件中 ENTRY(_start)指定 LK 从_start 函数开始,_start 在 lk/arch/start.S 。

        start.S主要做一些基本的CPU的初始化再通过 bl lk_main ;跳转到 C代码中。

        lk/top/main.c中有lk_main()函数的定义

lk_main()	        //lk/top/main.c
    apps_init();	//lk/app/app.c
        app->init(app);	//会调用到lk/app/atc_boot/boot_kernel.c中的boot_kernel_init
        start_app(app);	//会调用到lk/app/atc_boot/boot_kernel.c中的boot_linux_from_emmc
            theKernel (FDT_LOAD_ADDR_PHYS, 0, 0);	//启动kernel

3. 细节

        apps_start和apps_end都是在lk/app/app.ld文件中指定的,表示".apps"段

        代码中通过APP_START宏向".apps"段添加代码

4. APP_START宏定义如下

#define APP_START(appname) const struct app_descriptor _app_##appname __ALIGNED(sizeof(void *)) __SECTION(".apps") = { .name = #appname,
#define APP_END };

示例:(lk/app/atc_boot/boot_kernel.c)
APP_START(atc_boot)
.init = boot_kernel_init,
.entry = boot_linux_from_emmc,
APP_END

以上是关于Little Kernel启动过程的主要内容,如果未能解决你的问题,请参考以下文章

GT-s5660显示LK(LITTLE KERNEL)VER SEP 14 2011是啥意思,不能开机怎么办

为啥手机出来的是一行英文LK(little kernel)ver sep 9 2011 为啥是这样啊???求大神啊

20135239 益西拉姆 linux内核分析 跟踪分析Linux内核的启动过程

Linux kernel启动过程

S5PV210-kernel-内核启动过程分析

实验三:跟踪分析Linux内核的启动过程