10人参与 • 2025-10-23 • Linux
主要分为以下几个关键阶段和入口位置:
1.链接脚本定义的初始入口
内核镜像通过vmlinux.lds链接脚本指定入口符号,arm架构通常为_text或stext,x86架构则为startup_32或startup_64。该入口位于.head.text段,由汇编代码实现。
2.架构相关入口函数
arch/arm/kernel/head.s中的stext函数,负责关闭mmu/d-cache、校验处理器类型、创建初始页表等硬件初始化。arch/x86/boot/header.s中的startup_32(32位)或startup_64(64位),完成实模式到保护模式切换、解压内核等操作。3.通用内核入口
架构相关初始化完成后,统一跳转到c语言编写的start_kernel()函数(位于init/main.c),这是内核初始化的核心入口,负责调度器、内存管理等子系统初始化。
4.启动流程关键节点
head.o/misc.o)解压内核主体__primary_switch等函数切换到虚拟地址空间rest_init()创建init进程(用户态第一个进程)。不同架构的入口实现虽存在差异,但均遵循“汇编初始化→跳转c代码→完成核心初始化”的流程模式。
固件初始化阶段
内核解压阶段
早期初始化阶段
核心初始化阶段(start_kernel)
用户空间过渡阶段
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论