ARM Linux内核启动分析:从入口到start_kernel(4)
需积分: 10 183 浏览量
更新于2024-12-09
收藏 37KB DOC 举报
"这篇文档是关于ARM Linux启动过程的代码分析,主要集中在从入口到`start_kernel`阶段,特别是创建页表的环节。"
在ARM架构的Linux系统中,从入口点开始,系统逐步初始化,直到调用`start_kernel`函数,这个过程中包含了多个关键步骤。在描述的这一部分,我们关注的是如何为系统创建页表,这是内存管理的基础,它允许CPU高效地映射和访问物理内存。
创建页表的过程是由函数`__create_page_tables`执行的。在这个阶段,系统已经获取了处理器类型(processortype)和机器类型(machinetype)的信息。这些信息通常是在系统启动时由固件或Bootloader传递给内核的,以便内核能够根据硬件特性进行适当的配置。
在ARM体系结构中,使用了两级页表机制:L1页表和L2页表。在这个分析中,我们专注于L1页表,也称为段页表(Section Page Table)。L1页表将整个4GB的虚拟地址空间划分为4096个1MB大小的段(section)。每个段表项(section entry)占用32位(4字节),所以L1页表总计需要16KB的内存空间。
ARM926EJS的L1页表段表项结构如上所述,包括了以下字段:
- BaseAddress:这是段的起始物理地址,占据高20位。
- SBZ(Software Bits,保留位):这部分位通常是未使用的,可以由软件设置。
- AP(Access Permissions):访问权限位,控制段的读/写权限以及用户态/内核态访问权限。
- Domain:域字段,用于内存访问权限控制。
- C(Cacheable):缓存位,如果设置,则表示该段内容可被缓存。
- B(Bufferable):缓冲位,如果设置,表示内容可以被缓冲。
其他位还有额外的属性,如数据缓存和缓冲标志,它们决定了页表项对应的内存区域是否被缓存,以及缓存类型。例如,当CacheBit和BufferBit都为0时,表示该段的内容既不缓存也不缓冲。
创建页表的目的是为了将虚拟地址映射到物理地址,使CPU能够正确地访问内存。在Linux内核启动过程中,这个步骤至关重要,因为它允许内核在初始化阶段设置内存管理和调度等核心服务,最终调用`start_kernel`函数,正式开始运行用户态程序和服务。
2010-01-23 上传
2009-09-10 上传
2009-09-10 上传
2009-09-10 上传
2013-08-05 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
2021-09-13 上传
yuaojun
- 粉丝: 0
- 资源: 8
最新资源
- PortafolioAdsi:工业生物技术中心 ADSI 案例研究项目 - Palmira。 软件开发的整个过程将展示实施 Scrum 框架,以同样的方式利用 JAVA、JPA、Mysql、Html5、CSS 等技术
- ISO15118是欧洲的电动汽车充电协议标准,这是第一部分,通用信息及用例定义
- 测试
- teamtool-spring:团队工具(Spring MVC)
- Learners-Academy
- 为桌面和Web应用程序配置Log4Net
- be-kanBAO:后端做看报
- react-redux-flask-mongodb:带有Mongodb的Flask JWT后端和带有Material UI的ReactRedux前端的入门应用程序
- 新的多站点DLL或如何在根目录中开发.NET项目
- fakhrusy.com:我的个人网站
- image-mosaic
- pyg_lib-0.3.0+pt20-cp310-cp310-macosx_11_0_x86_64whl.zip
- N10SG开发教学视频.zip
- Toolint-tests-Empty-TC-Add-Tools-2021-04-07T15-40-16.889Z:为工具链创建
- 122页中国移动互联网2019半年大报告-QuestMobile-2019.7.rar
- practice:练习