Linux内核分析— —构造一个简单的Linux系统MenuOS

    • 实验内容

    • Linux内核的启动过程,从start_kernel到init进程启动

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

cd LinuxKernel/

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

内核启动完成后进入menu程序(《软件工程C编码实践篇》的课程项目),支持三个命令help、version和quit,您也可以添加更多的命令,对选修过《软件工程C编码实践篇》的童鞋应该是a piece of cake.

使用gdb跟踪调试内核

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

# 关于-s和-S选项的说明:

-S freeze CPU at startup (use ’c’ to start execution)

-s shorthand for -gdb tcp::1234 若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项

另开一个shell窗口

gdb

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

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

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

(gdb)c # 系统开始启动,启动到start_kernel

(gdb)list # 可以看到start_kernel上下的代码

(gdb)break rest_init

(gdb)c # 当前系统执行到rest_init

    • 分析start_kernel函数的执行过程

trap_init:硬件中断,初始化一些中断向量,系统调用。

set_intr_gate:设置中断门。

set_system_trap_gate:系统陷阱门SYSCALL VECTOR。

mm_init:内存管理模块初始化。

sched_init:进程调度初始化函数,函数内做了很关键的一步初始化——对0号进程,即idle进程进行初始化。

rest_init:其他初始化函数,函数内将创建1号进程,即init进程。

start_kernel函数之前的内容基本都是汇编语言,而从该函数开始内核进入c语言部分,功能则是内核主要功能的初始化。

    • 总结部分

1.内核编译的时候为什么要生成符号表:

所谓内核符号表就是在内核内部函数或变量中可供外部引用的函数和变量的符号表。

在内核符号表中,左边一列是符号地址,右边一列是函数和变量。

(简单来理解,就是需要一个把函数名等外部用的东西和机器指令联系起来,这些关系对应的表格就是符号表)

符号表加载成功之后断点设置成功,可以跟踪分析调试。

2.对“Linux系统启动过程”的理解:

要启动一个内核,挂一个硬盘,然后再运行一个init即1号进程。

而rest init()就是一个0号进程,在start_kernel内核一启动时就一直存在;

然后这个0号进程就创建了1号进程kernel_init,接下来还创建了其他的一些服务类的内核线程如kthreadd。这样整个系统就启动起来了。​

    • 注:

      姓名:林涵锦

      《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

Linux内核分析— —构造一个简单的Linux系统MenuOS(20135213林涵锦)的更多相关文章

  1. Linux内核分析-构造一个简单的Linux系统MenuOS

    构造一个简单的Linux系统MenuOS linux内核目录结构 arch目录包括了所有和体系结构相关的核心代码.它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel C ...

  2. Linux内核分析——构造一个简单的Linux系统MenuOS

    马悦+原创作品转载请注明出处+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.Linux内核源代码简 ...

  3. Linux内核分析—完成一个简单的时间片轮转多道程序内核代码

    ---恢复内容开始--- 20135125陈智威 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-10 ...

  4. 20135239益西拉姆 Linux内核分析 汇编一个简单的c程序并分析其指令过程

    益西拉姆+<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第一周linux内核分析 学习笔记 一.计算机 ...

  5. Linux内核分析第三周学习总结:构造一个简单的Linux系统MenuOS

    韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.Linux内 ...

  6. 《Linux内核分析》第三周笔记 构造一个简单的Linux系统MenuOS

    构造一个简单的Linux系统MenuOS 一.linux内核源代码简介 三大法宝(存储程序计算机.函数调用堆栈.中断)和两把宝剑(中断上下文的切换:保存现场和恢复现场.进程上下文的切换) 1.在lin ...

  7. 《Linux内核分析》第三周学习小结 构造一个简单的Linux系统OS

    郝智宇 无转载 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第三周 构造一个简单的Linux系统Me ...

  8. Linux内核分析 笔记三 构造一个简单的Linux系统MenuOS ——by王玥

    一.知识点总结 (一)Linux源代码简介 arch/x86目录下的代码是我们重点关注的 内核启动相关代码都在init目录下 start_kernel函数相当于普通C程序的main函数 linux的核 ...

  9. LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS

    LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163. ...

随机推荐

  1. 4.2Python数据处理篇之Matplotlib系列(二)---plt.scatter()散点图

    目录 目录 前言 (一)散点图的基础知识 (二)相关性的举例 ==1.正相关== ==1.负相关== ==1.不相关== (三)实战项目以一股票的分析 目录 前言 散点图是用于观测数据的相关性的,有正 ...

  2. 关于C语言学习的一些感想(初学者)

    C语言是一门通用计算机编程语言,广泛应用于底层开发.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言. 尽管C语言提供了许多低 ...

  3. SQL Server2008 4064错误

    无法打开用户默认数据库,登录失败,其原因是登录帐户的默认数据库被删除.    解决办法是使用管理员帐户修改此登录帐户的默认数据库.   1.使用管理员帐号登入企业管理器,在"对象资源管理器& ...

  4. 转 jeecg3.5中多数据源的配置

    官方微信有介绍通过web界面配置的方法:浅谈jeecg多数据源的使用,没试过不知道能不能用. 如果要手工配置也是可以的 在spring-mvc-hibernate.xml这个配置文件中增加一个数据源, ...

  5. Zookeeper安装及运行

    zookeeper的安装分为三种模式:单机模式.集群模式和伪集群模式. 单机模式 首先,从Apache官网下载一个Zookeeper稳定版本,本次教程采用的是zookeeper-3.4.9版本. ht ...

  6. Linux Kernel Programming - Time,Delays,and Deferred Work

    Measuring Time Lapses The counter and the utility functions to read it live in <linux/jiffies.h&g ...

  7. vmware 12中安装苹果系统

    我用的系统是win10... 一.所需软件: 1.下载并安装VMware Workstation Pro 12 密码:7ybc和序列号 密码是:bwm0 2.下载unlocker 203(for OS ...

  8. node.js 基础一 安装

    1.下载 2.安装 3.查看版本 一 下载 下载地址:https://nodejs.org/zh-cn/download/ 二 安装 运行安装包:node-v8.9.2-x64.msi

  9. 16-(基础入门篇)GPRS(Air202)关于多个文件中的变量调用和定时器

    https://www.cnblogs.com/yangfengwu/p/9968405.html 因为自己看到好多问多个文件调用的,感觉这个应该说一说 对了大家有没有知道这个是干什么的 大家有没有看 ...

  10. I2S音频总线学习

    IIS音频总线学习(一)数字音频技术 一.声音的基本概念 声音是通过一定介质传播的连续的波. 图1 声波 重要指标: 振幅:音量的大小 周期:重复出现的时间间隔 频率:指信号每秒钟变化的次数 声音按频 ...