《Linux内核分析》第三周笔记 构造一个简单的Linux系统MenuOS
构造一个简单的Linux系统MenuOS
一、linux内核源代码简介
三大法宝(存储程序计算机、函数调用堆栈、中断)和两把宝剑(中断上下文的切换:保存现场和恢复现场、进程上下文的切换)
1、在linux内核源码里面arch占有的代码量相当庞大。arch/x86目录下的代码是我们重点关注的。
2、内核启动相关的代码基本都在init目录下(main.c)。
start_kernel是初始化linux内核的起点。
start_kernel相当于c程序中的main函数
3、linux内核的核心代码在kernel目录中
二、构造一个简单的linux系统
init是第一个用户态进程,是1号进程。
内核启动:
三、跟踪调查linux内核的启动过程
1.使用gdb跟踪调试内核的方法
启动内核:qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S/*在开始之前将CPU冻结*/
/*在1234端口上创建了一个gdb server -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:
加载linux符号表,启动到start_lernel位置:
start_kernel向下的代码,另设断点:
在start_kernel的尾部:
2、简单分析一下start_kernel
main.c中的
asmlinkage __visible void __init start_kernel(void)
501{
502 char *command_line;
503 char *after_dashes;
504
505 /*
506 * Need to run as early as possible, to initialize the
507 * lockdep hash:
508 */
509 lockdep_init();
510 set_task_stack_end_magic(&init_task); /*定义&init_task全局变量,即手工创建的PCB,0号进程即最终的idle进程*/
511 smp_setup_processor_id();
512 debug_objects_early_init();
513
514 /*
515 * Set up the the initial canary ASAP:
516 */
517 boot_init_stack_canary();
518
519 cgroup_init_early();
520
521 local_irq_disable();
522 early_boot_irqs_disabled = true;
523
524/*
525 * Interrupts are still disabled. Do necessary setups, then
526 * enable them
527 */
所有的模块在初始化的时候都会通过init,都会通过start_kernel来调用模块进行初始化。
trap init:初始化一些中断向量
设置中断门:
start_kernel最后一句rest init:
init_process是linux系统的1号进程,是第一个用户态进程,默认是根目录下的程序。
kthreadd创建一个内核线程。
当系统没有进程需要执行时就调度到idel进程(0号进程)
四、总结
这一周学习的是构造一个简单的linux系统,在linux内核源码里面arch占有的代码量相当庞大,arch/x86目录下的代码是我们重点关注的,内核启动相关的代码基本都在init目录下,linux内核的核心代码在kernel目录中,我们主要了解start_kernel函数的执行过程。我们通过在实验楼里构造一个简单的linux系统来慎入料及构造过程。同时还学习到init称为1号进程,从start_lernel起一直存在,在WINDOWS系统上称为system idel,0号进程创建了1号进程,还创建了其他服务的内核线程,这样系统就启动起来了,这就是内核的启动过程。
《Linux内核分析》第三周笔记 构造一个简单的Linux系统MenuOS的更多相关文章
- 第三周:构造一个简单的LINUX系统MENUOS
吕松鸿 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.Linux内 ...
- Linux内核分析第三周学习笔记
linux内核分析第三周学习笔记 标签(空格分隔): 20135328陈都 陈都 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.co ...
- LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS
LINUX内核分析第三周学习总结——构造一个简单的Linux系统MenuOS 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163. ...
- 20135327郭皓--Linux内核分析第三周 构造一个简单的Linux系统MenuOS
Linux内核分析第三周 构造一个简单的Linux系统MenuOS 前提回顾 1.计算机是如何工作的三个法宝 1.存储程序计算机 2.函数调用堆栈 3.中断 2.操作系统的两把宝剑 中断上下文的切换 ...
- linux内核分析第三周
20135103王海宁 linux内核分析第三周 http://mooc.study.163.com/course/USTC-1000029000 按照课堂提供的方法,命令行一行行敲上去,我是手机缓 ...
- Linux内核分析第三周学习博客——跟踪分析Linux内核的启动过程
Linux内核分析第三周学习博客--跟踪分析Linux内核的启动过程 实验过程截图: 过程分析: 在Linux内核的启动过程中,一共经历了start_kernel,rest_init,kernel_t ...
- LINUX内核分析第八周学习总结——进程的切换和系统的一般执行过程
LINUX内核分析第八周学习总结——进程的切换和系统的一般执行过程 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/c ...
- Linux内核分析——第三周学习笔记20135308
第三周 构造一个简单的Linux系统MenuOS 计算机三个法宝: 1.存储程序计算机 2.函数调用堆栈 3.中断 操作系统两把宝剑: 1.中断上下文的切换:保存现场和恢复现场 2.进程上下文的切换 ...
- Linux内核分析第三周学习总结:构造一个简单的Linux系统MenuOS
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.Linux内 ...
随机推荐
- Spark学习之路 (二十二)SparkStreaming的官方文档
官网地址:http://spark.apache.org/docs/latest/streaming-programming-guide.html 一.简介 1.1 概述 Spark Streamin ...
- 启动报错:Access denied for user 'root'@'localhost' (using password:YES)
项目启动报错:Access denied for user 'root'@'localhost' (using password:YES) 原因:root帐户默认不开放远程访问权限,所以需要修改一下相 ...
- WorldWind源码剖析系列:图层管理器按钮类LayerManagerButton和菜单条类MenuBar
WorldWindow用户定制控件类中所包含的的可视化子控件主要有:图层管理器按钮类LayerManagerButton和菜单条类MenuBar.BmngLoader类中所包含的的可视化子控件主要有: ...
- 配置openfire环境
Openfire 的安装和配置 1. 下载最新的openfire安装文件 官方下载站点:http://www.igniterealtime.org/downloads/index.jsp#openfi ...
- Android 连续按两次back键退出系统
需求:在程序的首页,连续按两次back键退出Androd程序. 第一步:新建一个GApplication类继承Application,在GApplication中添加一个用于存放Activity的集合 ...
- 03-Centos7安装部署Mirrorgate-踩坑记录
FAQ 1.没有安装bzip2 解决方法 yum -y install bzip2 > phantomjs-prebuilt@2.1.16 install /root/test/mirrorga ...
- 20155308 《网络攻防》 Exp3 免杀原理与实践
20155308 <网络攻防> Exp3 免杀原理与实践 基础问题回答 杀软是如何检测出恶意代码的? 基于特征来检测:恶意代码中一般会有一段有较明显特征的代码也就是特征码,如果杀毒软件检测 ...
- 20155339 Exp6 信息搜集与漏洞扫描
20155339 Exp6 信息搜集与漏洞扫描 实验后回答问题 (1)哪些组织负责DNS,IP的管理. 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务器.DNS和IP地址管理. ...
- Spring-data-jpa 学习笔记(一)
Spring家族越来越强大,作为一名javaWeb开发人员,学习Spring家族的东西是必须的.在此记录学习Spring-data-jpa的相关知识,方便后续查阅. 一.spring-data-jpa ...
- HTML基础语法
目录 HTML基础语法 1.全局架构标签 2.标题 3.段落 4.文本 5.属性 6.链接 7.图片 8.列表 9.表格 10.区块 11.布局 12.表单 13.框架 14.头部 HTML基础语法 ...