linux内核启动之谜
文章平均质量分 91
想深入了解linux内核,学习分析其启动过程是一种很好的方法,启动过程涉及到内核从0到1的奥妙。本人将自己工作中遇到的各个平台处理器的内核启动代码进行总结分析,与大家分享
kerneler_
做一个有技术追求的人
ps:目前公司太忙,暂没时间更新博客,,大家评论我尽量回复,望大家谅解
展开
-
powerpc-linux内核start_kernel之前启动分析(1)-开门见山
公司处理器换核,前期用FPGA仿真板进行了芯片验证和软件移植,借这个机会也学习了powerpc处理器的一些知识,对powerpc的内核启动也有所了解。 完成了arm版本内核start_kernel之前汇编分析,也想尝试写几篇文章对powerpc的启动进行分析,与大家分享。其实不管哪个平台处理器,内核启动之初,因为运行地址无法保证与链接地址一致,都要完成一次地址的配置和跳转来保证内核运行地址与链接地址的一致性。原创 2015-09-16 16:34:06 · 6939 阅读 · 0 评论 -
arm-linux内核start_kernel之前启动分析(3)-开启MMU,走进新时代
在第二篇启动分析文章中讲到create pgtable时,对__turn_mmu_on所在的1M地址空间做了平映射,到现在这个阶段就看出其作用了。CPU执行完成“mcr p15, 0, r0, c1, c0,0”指令后开启MMU,接下来CPU取指地址是当前pc+4,由于做了平映射,虽然接下来是虚拟地址,但是该虚拟地址跟之前的物理地址是完全一致的,pc+4可以取到mrc p15, 0, r3, c0, c0, 0指令原创 2015-08-28 16:35:38 · 8745 阅读 · 2 评论 -
arm-linux内核start_kernel之前启动分析(2)- 页表的准备
create_page_table完成了3种地址映射的页表空间填写:(1)turn_mmu_on所在1M空间的平映射(2)kernel image的线性映射(2)bootparams所在1M空间的线性映射原创 2014-11-24 17:17:56 · 9286 阅读 · 7 评论 -
arm-linux内核start_kernel之前启动分析(1)-接过bootloader的衣钵
如果想运行和链接地址不一致,我能想到的办法,只能是汇编中尽量不去涉及一些绝对地址,使用PIC位置无关代码。联想之前分析的uboot relocation原理,uboot在relocation之后,kernel在开启MMU之前,都实现了链接地址和运行地址不一致,看看它们用的什么方法?(1)uboot在relocation时修改rel.dyn段(存储所有变量地址),实现将所有变量地址重定位到新运行地址(2)kernel在开启MMU之前,计算运行地址(物理地址)与链接地址(虚拟地址)的偏移,对变量寻址时都进原创 2014-11-21 10:05:03 · 13903 阅读 · 5 评论