JuanA1的专栏

金字塔最底层之IT民工的技术点滴

Linux内核初始化过程的源码分析疑点记录+好书推荐(附下载)

    这个对基于PowerPC的Linux内核源码剖析的文章已经写了三篇了(见前三篇博文),由于可以找到的关于PowerPC E300处理器的Linux文章基本没有,这些都是一点点摸索的,可能存在不少的错误,特别是第3篇,自我感觉很差,开始计划写这个系列的时候,自以为已经很了解PowerPC的内部体系了,现在回首,还是有很大的提升空间啊。这个系列到这里也算是一个中节点了,我打算先放一放,处理好工作上的琐事,然后再细细看一下E300内核的机制,再来开篇续集。

    这里分享下一本很好的对PowerPC Linux做介绍的书---《Linux PowerPC详解-核心篇》,机械工业出版社,王齐编著。本书基于E500处理器,介绍了Linux PowerPC的组成;PowerPC的指令集、寄存器、内存体系结构等;还讲述了进程调度、中断处理、内存管理MMU等知识。对于想入手Linux+PowerPC的童鞋,是不可多得的好资料。希望大家共同学习,共同进步。详细见我的上传资源:http://download.csdn.net/detail/JuanA1/3752721

    再总结一下在分析代码时碰到的疑问,算是备案,也算是求助,只要解决了,我都会留言说明的,如下:

1、head.s开始时,首先根据PowerPC ABI规范,保存r3、r4、r5、r6和r7,然后调用early_init,现在只知道r3保存函数返回值,其余未知。__start一开始就cmpwi 0,r5,0,是判断什么?

 

2、在early_init阶段,内核会为CPU特性做fixup处理,调用的几个do_feature_fixup函数,虽然勉强知道是用于代码复用的处理器特性处理,但具体机制不清楚,输入参数__start___ftr_fixup、__stop___ftr_fixup都不清楚含义。

 

3、在__init_fpu_registers中,有一个REST_32FPRS(0,r9),r9为空数组,宏定义如下:

#define REST_FPR(n, base) lfd n,THREAD_FPR0+8*TS_FPRWIDTH*(n)(base) /*THREAD_FPR0为double fpr[32][TS_FPRWIDTH]在结构体thread_struct中的偏移*/

这句也一直不清楚,是不是清FPR的操作?

 

4、Linux有一个Oops机制,用于处理内核的异常,处理Oops异常的入口位于head_32.S中的trun_on_mmu函数后面的一大段代码,其中还和arch/powerpc/kvm文件夹下的程序有关。(Sailor的CSDN博客有相关介绍)

 

5、接上面,Linux中的异常处理,在head_32.S中有一大段的代码,一直没敢去碰它,初始化时碰到的DSI异常和PTE中的IMISS和DMISS也都是一笔带过,要找时间和资料细细分析下。

 

6、函数lockdep_init是什么意思? 虽然知道是用于启动Lock Dependency Validator(内核依赖的关系表),本质上就是建立两个散列表calsshash_table和chainhash_table,并初始化全局变量lockdep_initialized,标志已初始化完成。但还是不清楚,有没有更直白点的解释?

 

7、Linux内核在启动早期就会在屏幕打印输出(BTEXT),以及后来的machin_init中的调试使能函数,对于PowerPC就是NS16550的串口,具体的初始化方法和机制都不是很清楚。

 

8、MMU硬件初始化的流程,可能是心里太乱了,又正好E300的MMU初始化那么复杂,花了很久都没能理清,是以后摸索的重点。

欢迎高手解答!!

阅读更多
个人分类: Linux学习 PowerPC
想对作者说点什么? 我来说一句

Linux内核源码分析之系统初始化

2011年01月26日 154KB 下载

深入分析Linux内核源码完整版

2009年05月05日 3.95MB 下载

深入分析Linux内核源码(完整版)

2017年09月21日 3.95MB 下载

linux内核深入剖析

2011年05月03日 7.78MB 下载

Linux线程创建源码分析

2014年11月14日 58KB 下载

Linux内核源码分析.rar

2009年06月03日 85KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭