Arm linux启动流程

Linux启动代码分为以下三部分:
汇编编写的体系结构相关的部分
C语言编译的体系结构相关的部分
C语言编译的体系结构无关的部分

内核镜像的生成:
Arm linux启动流程_第1张图片

内核启动流程-1.汇编部分:
内核启动入口代码:
内核编译连接后生成的ELF映像文件是vmlinux,从内核源代码顶层目录的makefile中可以找到vmlinux的生成规则:

这里写图片描述

其中vmlinux-lds是链接器脚本,对于arm而言,路径是arch/arm/kernel/vmlinux.lds文件:
*SECTIONS
{

ifdef CONFIG_XIP_KERNEL

. = XIP_VIRT_ADDR(CONFIG_XIP_PHYS_ADDR);

else

. = PAGE_OFFSET + TEXT_OFFSET;

endif

.text.head : {
    _stext = .;
    _sinittext = .;
    *(.text.head)
}*

Arm linux启动流程_第2张图片
因此,非压缩 arm linux 内核的入口点是arch\arm\kernel\head.S中的stext

内核启动流程-C语言部分
这个阶段由以下函数开始
asmlinkage void __init start_kernel(void)到第一个用户进程init结束,调用了一系列函数对内核组件初始化,其中start_kernel,rest_init,kernel_init,init_post等4函数主线组成整个初始化过程
Arm linux启动流程_第3张图片

内核启动流程-Busybox的init进程

你可能感兴趣的:(linux)