码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2016-03-10 14:29:36      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:

一.   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使之携带调试信息

  1. 在原来配置的基础上,make menuconfig选中如下选项重新配置Linux,使之携带调试信息
  2. 技术分享
  3. 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(登录程序)等任务,我们熟悉的登录界面就出现了。

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

标签:

原文地址:http://www.cnblogs.com/20135305yg/p/5251402.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!