2022-2023-1 20222816 《Linux内核原理与分析》第四周作业

本章介绍Linux内核源代码的目录结构,并基于Linux内核源代码构造一个简单的操作系统MenuOS,同时在MenuOS启动过程中跟踪分析Linux内核的启动过程。

1.构造一个简单的Linux内核

在“实验楼”的虚拟机中,一下命令就可以把Linux系统和一个简单的文件系统运行起来:

cd LinuxKernel/

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

关掉QEMU界面:同时按住crtl+Alt,然后直接关掉界面。

2.跟踪调试Linux内核的启动过程

        这时候就可以再次输入命令启动内核,然后它就会被冻结。

        再打开一个窗口,启动gdb,把内核加载进来,进来连接。

 

        出现错误没有进入liunxKernel目录下。

        解决方案:cd ~/LinuxKernel/。 

        在start_kernel处设置断点,刚才是stop状态,如果按“c”继续执行,那么系统开始执行,启动到start_kernel函数的位置停在断点处,如上图所示的断点查看代码。

        输入list查看:

        start_kernel中最后一句为rest_init,内核启动完成后,有一个call_cpu_idle,当系统没有进程需要执行时就调用idle进程。rest_init是0号进程,他创建了1号进程init和其他的一些服务进程。

        设置rest_init断点:

1.start_kernel()

main.c中没有main函数,start_kernel()相当于c语言中的main函数。

2.init_task()

init_task(0号进程)是task_struct类型,是进程描述符。

3.rest_init()

通过rest_init()新建kernel_init和kthreadd内核线程。

kthreadd函数的任务是管理和调度其他内核线程kernel_thread。

3.总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值