Linux内核启动流程与关键函数.pdfVIP

  • 0
  • 0
  • 约3.22千字
  • 约 6页
  • 2026-01-22 发布于北京
  • 举报

一、vmlinux.lds简介

从arch/arm/kernel/vmlinux.lds分析Linux内核第一行启动代码。

找到ENTRY(stext)

函数是stext,image和zImage是经过压缩的,Linux内核会先进行解压缩,解

压缩完成以后就要运行Linux内核。要求:

1、MMU关闭2、D

缓存关闭3、I缓存无

所谓4、r0=0。5、

r1=machinenr6、

r2=atags或设备树

二、Linuxstext

_

vetatags函数验证atags或dtb是否有效,如果使用设备树的话就是

___

dtb。createpagetab创建页表。ldrr13,=mmapswitched也就

___

是r13保存mmapswitched。enablemmu使能MMU‑turn

___

mmuon‑_mmapswitched‑startkernel启动内核。Linux内核第一阶

段。

_

三、mmapswitched函数

_

四、startkernel函数

Linux内核第二阶段

一、vmlinux.lds简介

从arch/arm/kernel/vmlinux.lds分析Linux内核第一行启动代码。找到

ENTRY(stext)

函数是stext,image和zImage是经过压缩的,Linux内核会先进行解压缩,解压

缩完成以后就要运行Linux内核。要求:

1、MMU关闭

2、Dcache关闭

3、Icache无所谓

4、r0=0。

5、r1=machinenr

6、r2=atags或设备树

二、Linuxstext

vet_atags函数验证atags或dtb是否有效,如果使用设备树的话就是dtb。

create_page_tab创建页表。

ldrr13,=mmap_switched也就是r13保存mmap_switched。

enable_mmu使能MMU

-turn_mmu_on

-_mmap_switched

-start_kernel启动内核。

Linux内核第一阶段。

三、mmap_switched函数

四、start_kernel函数

Linux内核第二阶段

_____

start内核‑剩余部分初始化‑内核线程(内核初始化,NULL,CLONEFS);创建内

___

核初始化进程。也就是init进程,PID=1‑内核线程(kthreadd,NULL,CLONEFS|

___

CLONEFI);创建kthreadd进程,进程PID为2。‑CPU启动进入空闲进程,

也就是主进程为空闲进程,idle。

启动开发板,输入:ps-A,列出当前系统所有进程。

start_kernel

-rest_init

-kernel_thread(kernel_init,NULL

文档评论(0)

1亿VIP精品文档

相关文档