ARM Linux:从__lookup_machine_type到确定机器类型详解(三)
需积分: 9 47 浏览量
更新于2024-12-09
收藏 29KB DOC 举报
本文档深入剖析了ARM Linux内核启动过程中的一个重要环节——从`arch/arm/kernel/head.S`文件中的`__lookup_machine_type`函数开始。这个函数在初始化阶段用于确定当前处理器的机器类型(machinetype),这对于后续的系统配置和功能选择至关重要。
在代码的79行,程序执行`bl __lookup_machine_type@r5 = machinfo`指令,调用了一个名为`__lookup_machine_type`的函数,其参数`r5`被设置为machinfo的地址。接下来(80、81行),如果传入的`r5`(即machinetype)不是有效的机器类型(即0),程序会跳转到`__error_a`错误处理路径。
`__lookup_machine_type`函数的具体实现可以从`head-common.S`中的00193行开始查找。首先(00195行),通过`adr r3, #__proc_info_begin`和`ldmia r3, {r4, r5, r6}`加载必要的参数,包括虚拟地址和物理地址转换所需的偏移量。然后(00197-00199行)计算虚拟地址到物理地址的转换,并获取`MACHINFO_TYPE`字段,该字段包含机器类型信息。
在00201行,程序检查获取的机器类型与预设的加载器编号是否匹配,如果匹配,则执行`beq 2f@found`,表示找到了正确的机器类型。如果不匹配,就会遍历`machine_desc`结构,依次检查下一个机器类型直到找到匹配项,或者当`r5`(指向下一个结构)小于`r6`(当前已检查的结构数量)时,进入循环的下一轮。
整个过程确保了Linux内核能够正确识别并初始化特定于硬件的特性,这对于支持各种不同架构的ARM处理器至关重要。理解这个函数的工作原理对于深入研究和修改ARM Linux内核,以及进行设备驱动开发都具有重要的实践意义。
2010-01-23 上传
2009-09-10 上传
2009-09-10 上传
2009-09-10 上传
2013-08-05 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
yuaojun
- 粉丝: 0
- 资源: 8
最新资源
- Elmag-开源
- Customer-Revenue-Prediction
- Scratch少儿编程项目音效音乐素材-【风】相关音效-诡异的风.zip
- 火箭服务器
- robot,c语言吃豆子源码,c语言项目
- aircnc-react:一个漂亮而简单的应用程序,适用于开发公司景点
- sc-fermi-开源
- 陀螺仪和加速度计的卡尔曼MATLAB仿真.rar
- naviworks
- SF-DST10-RDS4
- Tic-Tac-Toe---Player-againts-Computer---Java-Swing
- my-vocab
- Scratch少儿编程项目音效音乐素材-【打斗】音效-打群架.zip
- 暴雪:转到暴雪API数据的客户端库
- ADIS16255Driver,c语言库源码大全,c语言项目
- DSAPCS1092:这是CYCU的DS课程