如何深入探索Linux内核的奥秘?

1、内核启动过程

Bootloader的作用:在系统上电或复位后,Bootloader是首先被执行的程序,它负责初始化处理器及外设,并将Linux内核从非易失性存储器(如Flash)拷贝到RAM中,然后跳转到内核的第一条指令处继续执行。

如何深入探索Linux内核的奥秘?插图1
(图片来源网络,侵删)

内核解压:如果使用的是压缩内核(如zImage),内核需要先进行自解压,这一过程包括调用解压缩程序,将压缩的内核映像解压到指定位置,对于ARM处理器,这一过程主要通过head.S中的代码完成。

2、内核初始化阶段

关闭MMU和缓存:内核初始化的第一步通常是关闭内存管理单元(MMU)和数据缓存(D-cache),以确保后续操作的正确性。

设置CPU模式:内核会将CPU设置为SVC(Supervisor)模式,并关闭所有中断,确保内核初始化过程中不受外部干扰。

创建页表:内核接下来会创建页表,为开启MMU做准备,这包括调用__create_page_tables函数来初始化内存分页机制。

如何深入探索Linux内核的奥秘?插图3
(图片来源网络,侵删)

启用MMU:页表创建完成后,内核会启用MMU,使能虚拟内存管理功能,内核开始使用虚拟地址进行操作。

3、C语言部分的初始化

start_kernel函数:从这一步开始,内核进入用C语言编写的部分,执行大量的初始化工作,start_kernel函数位于init/main.c文件中,负责初始化内核的各项子系统。

设备驱动初始化:在start_kernel函数中,内核会初始化各种设备驱动,设置控制台和根文件系统,这是通过do_basic_setup函数完成的,该函数会调用driver_init来初始化驱动模型子系统。

创建内核线程:内核还会创建一些关键的内核线程,如kthreadd和init进程,init进程是系统的第一个用户空间进程,其PID为1,负责进一步的系统初始化和挂载根文件系统。

如何深入探索Linux内核的奥秘?插图5
(图片来源网络,侵删)

4、系统启动

进入idle进程:当所有初始化工作完成后,内核会进入idle进程,这是一个内核线程,当CPU没有其他任务可执行时,就会运行这个进程,idle进程的主要作用是节省CPU资源。

进入Linux内核的过程涉及多个步骤,从Bootloader的执行到内核的自解压,再到各种硬件和软件的初始化,最终完成系统的启动,这些步骤确保了系统能够正确加载和运行,提供了稳定可靠的操作环境。

小伙伴们,上文介绍linux 进入内核的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。

本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/71911.html

小末小末
上一篇 2024年10月9日 01:18
下一篇 2024年10月9日 01:28

相关推荐