博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Little Kernel启动过程
阅读量:3897 次
发布时间:2019-05-23

本文共 1004 字,大约阅读时间需要 3 分钟。

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

转载地址:http://feuen.baihongyu.com/

你可能感兴趣的文章
为什么你应该尝试 “全栈”
查看>>
程序员什么时候该考虑辞职
查看>>
如何写一本书?
查看>>
加班能体现编程的热情吗?
查看>>
Hadley Wickham:一个改变了R的人
查看>>
glibc 指导委员会解散声明
查看>>
Linux创始者托瓦兹谈及IoT --「安全在其次」
查看>>
传感器数据分析(Sensor Data Analytics)是什么?
查看>>
智能硬件开发如何选择低功耗MCU?
查看>>
阿里感悟(十)如何写好简历
查看>>
阿里感悟(十一)如何准备面试
查看>>
软件架构入门
查看>>
80 多个 Linux 系统管理员必备的监控工具
查看>>
OOD的原则
查看>>
Tool to trace local function calls in Linux
查看>>
Linux 下查询 DNS 服务器信息
查看>>
ulimit 里的 file size 的 block 单位是多少?
查看>>
linux下查看端口对应的进程
查看>>
将 gdb 用作函数跟踪器 (Function Tracer)
查看>>
原 GCC一些有用的技巧
查看>>