文档详情

armlinux从入口到startkernel代码详细分析2.pdf

发布:2025-03-27约1.87万字共20页下载文档
文本预览下载声明

1.确定processortype

arch/arm/kernel/head.S中:

00075:mrcp15,0,r9,c0,c0@getprocessorid

00076:bl__lookup_processor_type@r5=procinfor9=cpuid

00077:movsr10,r5@invalidprocessor(r5=0)?

00078:beq__error_p@yes,errorp

75行:通过cp15协处理器的c0寄存器来获得processorid的指令.关于cp15

的详细内容可参考相关的arm手册

76行:跳转到__lookup_processor_type.在__lookup_processor_type中,会把

processortype存储在r5中

77,78行:判断r5中的processortype是否是0,如果是0,说明是无效的

processortype,跳转到__error_p(出错)

__lookup_processor_type函数主要是根据从cpu中获得的processorid和系统

中的proc_info进行匹配,将匹配到的proc_info_list的基地址存到r5中,0表示没

有找到对应的processortype.

下面我们分析__lookup_processor_type函数

arch/arm/kernel/head-common.S中:

00145:.type__lookup_processor_type,%function

00146:__lookup_processor_type:

00147:adrr3,3f

00148:ldmdar3,{r5-r7}

00149:subr3,r3,r7@getoffsetbetweenvirtphys

00150:addr5,r5,r3@convertvirtaddressesto

00151:addr6,r6,r3@physicaladdressspace

00152:1:ldmiar5,{r3,r4}@value,mask

00153:andr4,r4,r9@maskwantedbits

00154:teqr3,r4

00155:beq2f

00156:addr5,r5,#PROC_INFO_SZ@sizeof(proc_info_list)

00157:cmpr5,r6

00158:blo1b

00159:movr5,#0@unknownprocessor

00160:2:movpc,lr

00161:

00162:

00165:

显示全部
相似文档