您的位置:首页 > 运维架构 > Linux

第三周 构造一个简单的Linux系统MenuOS

2016-03-10 12:43 246 查看
一. Linux内核源代码简介

稳定版内核:Linux-3.18.6

Linux内核源代码的目录结构:



arch目录:在Linux内核源代码里占有的比重很大,因为Linux内核支持很多的体系结构,而arch目录是支持不同的CPU的源代码.arch/x86目录下的代码是重点

Documentation目录:文档目录

fs目录:文件系统

init目录:内核启动相关的代码基本都在init目录下,其中的main.c代码里的start_kernel函数相当于普通C程序的main函数



ipc目录:进程间通信

kernel目录:Linux内核的核心代码在kernel目录中

lib目录:公用的库文件

mm目录:内存管理的

README目录:



二. 构造一个简单的Linux系统

l 使用实验楼的虚拟机打开shell



内核启动完成后进入menu程序,支持三个命令help、version和quit

l 通过gdb跟踪内核

l 使用自己的Linux系统环境搭建MenuOS



init是第一个用户态进程

l 重新配置编译Linux使之携带调试信息

在原来配置的基础上,make menuconfig选中如下选项重新配置Linux,使之携带调试信息



make重新编译(时间较长)

l 使用gdb跟踪调试内核



-S:CPU初始化之前把它冻结起来

-s:端口上创建了一个gdbserver

另开一个shell窗口



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

实验截图如下:







简单分析一下start_kernel:

init_task即手工创建的PCB,0号进程即最终的idle进程

不管分析内核的哪一部分都会涉及到start_kernel

trap_init():初始化一些中断

当系统没有进程需要执行时就调度到idle进程



四.总结

init是第一个调用的使用标准C库编译的程序。在此之前,还没有执行任何标准的C应用程序。在桌面Linux系统上,第一个启动的程序通常是/sbin/init,它的进程号为1。init进程是所有进程的发起者和控制者,它有两个作用:
(1)扮演终结父进程的角色:所有的孤儿进程都会被init进程接管。
(2)系统初始化工作:如设置键盘、字体,装载模块,设置网络等。

在完成系统初始化工作之后,init进程将在控制台上运行getty(登录程序)等任务,我们熟悉的登录界面就出现了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: