查看: 116|回复: 0

[经验] 飞凌嵌入式ElfBoard ELF1板卡-Linux内核移植之内核启动流程

[复制链接]

该用户从未签到

发表于 2025-1-6 09:49:00 | 显示全部楼层 |阅读模式
分享到:
关于内核启动流程涉及内容较多而且复杂,过度的分析意义不大,因此,这里不做详细讲解,只做一个大概的介绍。初学者只做了解,有一定基础的可以深入理解。
内核镜像被uboot加载到内存空间之后,获得控制权,内核启动流程开始。在前面章节讲解zImage生成过程的时候说过内核镜像image是被压缩进zImage之中的。所以,内核获得控制权之后,第一件事,是解压缩内核镜像。解压缩工作由arch/arm/boot/compressed/head.S完成,head.S在解压完zImage之后将生成的image镜像重定位到内核入口地址0X80008000,并跳转到此处执行image。
打开arch/arm/kernel/vmlinux.lds可以找到内核入口ENTRY(stext):
13-1.png
而stext存在于arch/arm/kernel/head.S中:
13-2.png
在stext下有一个__mmap_switched函数:
13-3.png
该函数存在于arch/arm/kernel/head-common.S,其中有一句跳转指令:b start_kernel
13-4.png
从start_kernel函数开始,内核进入C语言部分,完成内核的大部分初始化工作。start_kernel函数存在于init/Main.c中:
13-5.png
13-6.png
函数在最后调用rest_init函数:
13-7.png
此函数中调用了kernel_init函数,kernel_init函数完成了设备驱动程序的初始化,并启动了用户进程:
13-8.png

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条



手机版|小黑屋|与非网

GMT+8, 2025-1-20 03:46 , Processed in 0.116561 second(s), 16 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.