20242828《Linux内核原理与分析》第四周作业

《Linux内核原理与分析》第四周作业

一、启动menu程序

在实验楼的配置环境打开shell,内核启动完成后将进入menu程序

cd ~/LinuxKernel/
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img

图

二、调试跟踪内核

在shell中输入以下命令

$ 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选项

图

打开另一个shell窗口,使用gdb 跟踪调试内核

# 打开 GDB 调试器
$ gdb

# 在 GDB 中输入以下命令:

# 在gdb界面中targe remote之前加载符号表
(gdb)file linux-3.18.6/vmlinux

# 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行
(gdb)target remote:1234

# 断点的设置可以在target remote之前,也可以在之后
(gdb)break start_kernel

图

断点设置后,输入c,继续运行程序,程序将在start_kernel处暂停

图

使用list,查看start_kernel()函数上文代码

图

再在函数rest_init处设置一个断点,输入c继续运行

使用list查看断点rest_init附近代码

图

总结

start_kernel 是 Linux 内核的入口点之一,位于 init/main.c 中。它的主要任务是初始化系统的硬件和数据结构,最终启动 init 进程。可以通过设置断点 b start_kernel 来观察内核启动的早期阶段。

rest_init 函数,负责启动系统中的两个最核心的进程:

1、idle 进程(进程号0):

  • 这是内核调度器的初始进程,专门在系统空闲时运行。在 SMP 系统中,它会为每个 CPU 创建一个 idle 进程。
  • cpu_idle 是这个进程的主要函数,它让 CPU 进入低功耗状态,等待调度新任务。

2、init 进程(进程号1):

  • kernel_thread 函数在此处用于创建 init 进程。
  • init 进程是用户空间的第一个进程,它最终会从磁盘加载用户空间的 init 可执行文件(通常是 /sbin/init/bin/init)。

在 GDB 中可以通过断点 b kernel_init 来跟踪 init 进程的创建过程。

Linux 内核的启动过程可以概括为:

1、start_kernel 阶段

  • 系统从硬件启动开始,通过 BIOS 或者 UEFI 加载内核映像。
  • start_kernel 负责初始化系统架构、内存管理、调度器、中断系统等核心功能。

2、rest_init 阶段

  • 内核创建两个重要的进程:idle 进程(进程0)和 init 进程(进程1)。
  • idle 进程是调度器空闲时运行的进程,它负责在系统没有其他任务时让 CPU 进入空闲状态。

3、init 进程启动

  • init 进程是系统启动过程中最重要的用户空间进程。它负责加载和启动其他系统服务和守护进程。init 进程的进程号为 1,是所有用户空间进程的祖先。

4、idle 进程

  • idle 进程是 CPU 空闲时的默认进程,它通过 cpu_idle 函数在系统调度中循环运行。

总结而言,Linux 系统的启动过程首先通过 start_kernel 完成硬件初始化,创建 idle 进程和 init 进程,并最终启动用户空间的初始化进程(/sbin/init)。idle 进程作为调度器的空闲任务,而 init 进程作为所有用户进程的父进程。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值