ARM Linux内核启动分析:从head-armv.S到start_kernel
需积分: 10 132 浏览量
更新于2024-08-02
1
收藏 171KB PDF 举报
"本文档深入分析了ARMLinux内核启动的过程,主要聚焦于arch/arm/kernel/head-armv.S文件,这是内核启动的第一步,由bootloader执行后跳转至此。在head-armv.S中,还会涉及到arch/arm/kernel/debug-armv.S和arch/arm/mm/proc-arm920.S等其他文件,尤其是当分析基于MX1内核启动时,着重考虑与CONFIG_ARCH_MX1ADS相关的代码和针对arm920 CPU的部分。文档详细解释了多个关键定义和代码段,帮助理解内核启动的细节。
2.相关定义介绍
2.1.TEXTADDR
TEXTADDR标记了内核映像的起始地址,通常位于虚拟地址空间的0xC0000000(对应物理内存开始的地方)加上32K,即0xC0008000。这个值在arch/arm/Makefile中被设定。
2.2.stext
stext是内核文本段(code segment)的起始地址,是TEXTADDR之后的第一个可执行指令的地址。
2.3.swapper_pg_dir
swapper_pg_dir是内核页目录,用于管理虚拟内存到物理内存的映射。
2.4.(M)pgtbl
(M)pgtbl指的是内存页表,用于实现多级页表机制,帮助转换虚拟地址到物理地址。
2.5.(M)krnladr
(M)krnladr可能是指内核的加载地址,是内核在内存中的实际位置。
2.6..proc.info段
这部分包含内核运行时信息,供/proc文件系统使用。
2.7.__proc_info_begin/__proc_info_end
这两个符号定义了.proci.info段的范围,用于内核信息的存储和访问。
2.8..arch.info段
这个段包含了架构相关的信息,如处理器特性等。
2.9.__arch_info_begin/__arch_info_end
这两个符号标记了.arch.info段的边界,用于架构特定的数据存储。
3.代码分析
3.1.KERNELENTRY
这是内核入口点,标志着内核启动流程的开始。
3.2.__arm920_setup
这个函数可能是特定于arm920处理器的设置,初始化硬件和环境。
3.3.__ret
该函数可能处理内核启动后的返回逻辑,确保正确跳转到后续的启动阶段。
3.4.__mmap_switched
该函数涉及内存映射的切换,可能用于调整内核的内存布局。
3.5.__lookup_processor_type
查找并确定系统的处理器类型,为内核配置提供基础。
3.6.__lookup_architecture_type
根据处理器类型查找对应的体系结构特性,以便进行进一步的初始化。
3.7.__create_page_tables
创建或初始化页表,确保内核可以正确地管理和访问内存。
通过以上分析,我们可以看出ARMLinux内核启动涉及内存管理、处理器识别、以及特定硬件的初始化等多个复杂步骤。这些详细解析对于理解和调试内核启动问题,以及优化内核性能至关重要。
2016-09-10 上传
2022-06-13 上传
2022-07-11 上传
2010-08-31 上传
2008-05-05 上传
点击了解资源详情
点击了解资源详情
2010-01-27 上传
morre
- 粉丝: 187
- 资源: 2328
最新资源
- Beginning Visual Basic 2005
- extjs电子书pdf格式
- LoadRunnerManual教程
- [eBook] A Guide to MATLAB for Beginners and Experienced Users - B.R.Hunt,R.L.Lipsman,J.M.Rosenberg - (Cambridge University Press)
- 在XP下安装SAP R/3
- 数据库监控系统需求规格说明书(WY-SPWF-004)
- 基于PLC控制的十字路口交通信号灯控制系统设计
- 基于单片机的温度监控系统的设计
- oracle+常用SQL语法手册
- 在XP环境下安装R/3.pdf
- Higher Order Perl 高阶Perl
- Logistic回归
- 清华ARM教程 嵌入式系统的构建
- HP9000系统管理员必读
- 46家公司笔试面试题
- 基于FPGA的超高速FFT硬件实现