跟踪分析 Linux 内核的启动过程
1.使用实验楼的虚拟机打开 shell
cd ~/LinuxKernel/
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img
2.内核启动完成后进入 menu程序
3.使用 gdb 跟踪调试内核
$ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S
# 关于-s和-S选项的说明:
# 1. -S
# -S freeze CPU at startup (use ’c’ to start execution)
# 2. -s
# -s shorthand for -gdb tcp::1234
# 若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项
4.另开一个 shell 窗口
利用 cd ~/LinuxKernal/ 重新进入路径。进行gdb调试,并与gdbserver建立链接。并设置断点start_kernel。按c可以让qemu上的Linux继续运行。
5.按照要求在init设置断点
分析
Linux启动过程是指从计算机开机到操作系统完全加载并准备就绪的整个过程。下面是对Linux启动过程的一般理解:
-
BIOS/UEFI启动:当计算机开机时,首先会执行基本输入/输出系统(BIOS)或统一的可扩展固件接口(UEFI)程序。这些程序负责初始化硬件设备并加载引导程序。
-
引导程序加载:引导程序(如GRUB或LILO)位于硬盘的引导扇区,它负责加载操作系统的内核。引导程序会读取配置文件,确定要加载的内核的位置。
-
内核加载:引导程序加载内核后,控制权交给内核。内核是操作系统的核心部分,它负责管理系统资源、驱动设备和提供各种功能。
-
初始化过程:内核启动后,它会执行一系列初始化任务。这些任务包括设置系统时钟、初始化内存管理、挂载根文件系统等。
-
启动守护进程:在初始化过程中,内核会启动一些守护进程,如udev用于设备管理、syslog用于日志记录等。这些守护进程在后台运行,提供系统所需的服务。
-
用户空间启动:一旦内核初始化完成,它会启动第一个用户空间进程,即init进程。init进程负责启动其他系统进程和服务,并提供一个用户交互的环境。
-
系统初始化和运行级别:在Linux中,系统可以在不同的运行级别下运行,每个运行级别都有不同的服务和进程。通过init进程,可以切换运行级别,启动或停止特定的服务。
-
登录管理:最后,系统会启动一个登录管理器(如GDM或LightDM),它提供了图形化登录界面。用户可以通过登录界面输入用户名和密码,登录到系统。
一旦用户成功登录,Linux系统就完全加载并准备就绪,用户可以开始使用各种应用程序和执行各种任务。
需要注意的是,不同的Linux发行版可能会有稍微不同的启动过程,但上述步骤大致涵盖了Linux启动的主要过程。
使用chatgpt
总结
本周学习跟踪分析Linux内核的启动过程,Linux内核启动过程包括BIOS/UEFI启动、引导程序加载、内核加载、初始化过程、启动守护进程、用户空间启动、系统初始化和运行级别、登录管理等步骤。这些步骤确保了系统的正确初始化和用户空间的启动。