前段时间移植uboot仔细研究过uboot启动过程,最近耐不住寂寞,想对kernel下手。
Kernel版本号:3.4.55
Uboot启动过程分析博文连接如下:
移植内核时kernel启动过程需要我们修改的地方比较少,研究这个对于编写driver也没有多大帮助,但对了解整个linux架构,各种机制还是非常有用。
只有知道kernel如何启动,我们才能真正的去理解kernel
作为一个嵌入式工作者,我想不能仅仅局限于某个module driver,而应深入到kernel的汪洋大海中去傲游!
学习启动过程,我本着打破沙锅问到底的原则,希望能研究的明明白白,但也鉴于水平有限,还是有很多纰漏之处
共享博文,希望大家多多交流指正,辛苦整理,如需转载,还请注明出处。
对于arm linux,start_kernel之前都是汇编代码,区区上百行汇编,但是却蕴含着很多精髓。
这部分代码分3篇来分析,另外两篇链接地址如下:
http://blog.youkuaiyun.com/skyflying2012/article/details/41447843
http://blog.youkuaiyun.com/skyflying2012/article/details/48054417
今天先来学习前几十行!
Kernel版本号:3.4.55
在arch/arm/kernel/head.S中,如下:
.arm
__HEAD
ENTRY(stext)
THUMB( adr r9, BSYM(1f) ) @ Kernel is always entered in ARM.
THUMB( bx r9 ) @ If this is a Thumb-2 kernel,
THUMB( .thumb ) @ switch to Thumb now.
THUMB(1: )
//处理器进入svc模式,关闭中断
setmode PSR_F_BIT

本文探讨了ARM Linux内核在start_kernel之前的启动过程,包括汇编代码的解析,特别是针对链接地址与运行地址不一致的问题。文章通过分析__lookup_processor_type函数,解释了kernel如何匹配当前CPU信息,并介绍了proc_info_list结构体的作用。同时,内容提到了在开启MMU之前,如何处理链接地址和运行地址的差异,并引用了之前关于Uboot启动和参数传递的分析文章。
最低0.47元/天 解锁文章
1282

被折叠的 条评论
为什么被折叠?



