S3C2410 Linux 2.6.35.7 内核启动分析

需积分: 10 5 下载量 167 浏览量 更新于2024-07-30 收藏 180KB DOC 举报
"S3C2410 Linux 2.6.35.7内核启动分析第二阶段涉及的关键步骤和结构体解析" 在Linux 2.6.35.7内核启动过程中,第二阶段的启动至关重要,它在硬件初始化的基础上继续构建操作系统的核心架构。这一阶段的起点是汇编语言代码\arch\arm\kernel\head.S,它负责执行一系列关键任务,以确保C代码的顺利执行。 首先,CPU ID的检查确保了系统正在使用的处理器与内核支持的类型匹配。这对于多处理器系统尤其重要,因为它需要正确地识别和配置每个CPU。这一过程通常通过读取CPU的标识寄存器来完成。 其次,machine ID(开发板ID)的验证确保内核针对的是正确的硬件平台。这个ID是在开发板特定的文件中定义的,如arch/arm/mach-s3c2410/mach-smdk2410.c,这使得内核能够识别并适应不同的硬件特性。 接下来,初始化页表是构建内存管理的基础。在ARM架构中,页表用于将虚拟地址映射到物理地址,这是为了实现内存保护和高效内存管理。在第二阶段,内核会创建一个初始的页表,以便在C代码执行时能够访问内存。 设置C代码运行环境涉及初始化堆栈、设置全局描述符表(GDT)以及其他必要的系统寄存器。这些操作使得内核可以安全地执行C语言代码,因为C代码依赖于这些环境来访问内存和执行控制流。 在这些准备工作完成后,控制权传递给内核的第一个真正C函数`start_kernel()`。这个函数是整个内核初始化过程的起点,它将调用更多的函数来初始化设备驱动、调度器、网络子系统等。 在第二阶段,有两个重要的结构体起到核心作用: 1. `struct proc_info_list`:这个结构体描述了CPU的相关信息,包括CPU的特性、状态等。它的定义和处理在arch/arm/include/asm/procinfo.h和arch/arm/mm/proc_arm920.S中进行。 2. `struct machine_desc`:这个结构体存储了开发板或机器的特定信息,比如中断控制器的配置、设备的布局等。它的定义在arch/arm/include/asm/mach/arch.h中,而具体的实现和赋值则在与开发板相关的源文件中,例如arch/arm/mach-s3c2410/mach-smdk2410.c。 在编译时,所有的machine ID列表会根据arch/arm/tools/mach-types文件的内容,链接到内核映像vmlinux的特定段中。这两个段`.proc.info.init`和`.arch.info.init`在链接脚本arch/arm/kernel/vmlinux.lds中被定义和安排,以供内核加载时使用。 S3C2410 Linux 2.6.35.7内核启动的第二阶段是连接硬件和软件的关键步骤,它为后续的系统初始化提供了必要的基础设施。通过对CPU ID、machine ID的检查以及页表和C运行环境的设置,内核确保了与硬件的正确交互,并为运行高层次的系统服务做好准备。