20135201李辰希《Linux内核分析》第三次 构造一个简单的Linux系统OS
2016-03-13 14:30
453 查看
李辰希 无转载 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第三周构造一个简单的Linux系统MenuOS一、Linux内核源代码简介三个法宝和两把宝剑:三个法宝:存储程序计算机、函数调用堆栈、终断操作系统的两把宝剑:中断上下文的切换(保存现场和恢复现场)、进程上下文的切换
2.简单分析一下start_kernelinit_task即手工创建的,0号进程即最终的idle进程不管分析内核的哪一部分都会涉及到start_kernel当系统没有进程需要执行时就调度到idle进程三.总结1.总结内核启动过程kernelthread是0号进程,它创建了1号进程kernelinit,以及它的一些服务的内核线程,这样整个系统及启动起来了。然后init进程会再启动一些进程。道生一,一生二, 二生(前面0、1和2三个进程), 三生万物(1号进程是所有用户态进程的祖先,2号进程是所有内核线程的祖先)2.从restinit开始,Linux开始产生进程,因为inittask是静态制造出来的,pid=0,它试图将从最早的汇编代码一直到startkernel的执行都纳入到inittask进程上下文中。在restinit函数中,内核将通过下面的代码产生第一个真正的进程(pid=1),也就是 kernelthread(kernelinit, NULL, CLONEFS | CLONE_SIGHAND);【0号进程创建1号进程】3.一般分两阶段启动,先是利用initrd的内存文件系统,然后切换到硬盘文件系统继续启动。initrd文件的功能主要有两个: 1、提供开机必需的但kernel文件(即vmlinuz)没有提供的驱动模块(modules) 2、负责加载硬盘上的根文件系统并执行其中的/sbin/init程序进而将开机过程持续下去
2.linux内核源代码简介
arch/x86目录下的代码是重点关注的
init目录:内核启动相关的代码基本都在init目录下 init/main.c中start_kernel函数就相当于普通C程序的main函数 fs目录:file system文件系统 ipc目录:进程间通信 kernel目录:Linux内核核心代码在kernel目录中二.构造一个简单的Linux系统实验过程1.使用实验楼的虚拟机打开shell输入cd LinuxKernel/ qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img 2.启动kernel 3.启动gdb调试 4.用水平分割另外打开一个shell窗口之后,进行调试 设置断点(break) 设置完断点之后,输入c命令continue继续执行,函数会停在断点处 输入list指令之后,可以详细地查看断点附近的代码,输入list指令之后,可以详细地查看函数停留的位置
2.简单分析一下start_kernelinit_task即手工创建的,0号进程即最终的idle进程不管分析内核的哪一部分都会涉及到start_kernel当系统没有进程需要执行时就调度到idle进程三.总结1.总结内核启动过程kernelthread是0号进程,它创建了1号进程kernelinit,以及它的一些服务的内核线程,这样整个系统及启动起来了。然后init进程会再启动一些进程。道生一,一生二, 二生(前面0、1和2三个进程), 三生万物(1号进程是所有用户态进程的祖先,2号进程是所有内核线程的祖先)2.从restinit开始,Linux开始产生进程,因为inittask是静态制造出来的,pid=0,它试图将从最早的汇编代码一直到startkernel的执行都纳入到inittask进程上下文中。在restinit函数中,内核将通过下面的代码产生第一个真正的进程(pid=1),也就是 kernelthread(kernelinit, NULL, CLONEFS | CLONE_SIGHAND);【0号进程创建1号进程】3.一般分两阶段启动,先是利用initrd的内存文件系统,然后切换到硬盘文件系统继续启动。initrd文件的功能主要有两个: 1、提供开机必需的但kernel文件(即vmlinuz)没有提供的驱动模块(modules) 2、负责加载硬盘上的根文件系统并执行其中的/sbin/init程序进而将开机过程持续下去
相关文章推荐
- /usr/include/linux/input.h 中部分按键与KEY值对应关系
- Linux 的启动流程
- linux下安装boost
- 浅析linux下core文件及调试
- Linux笔记(28)——ip地址配置
- GNU/Linux下用户、组及权限管理
- LINUX和UNIX的关系是什么?
- Linux文本处理三剑客之grep
- 解决 Linux 终端 wget 命令下载jdk的问题,jdk在linux下的配置问题
- linux内核分析学习笔记:用gdb跟踪linux内核启动过程
- linux下解压缩jar包
- Linux内核分析——构造一个简单的Linux系统MenuOS
- 《linux内核与分析》第三周
- TLS线程局部存储
- linux使用dhclient自动获取IP
- linux常用命令
- 实验三:跟踪分析Linux内核的启动过程 ----- 20135108 李泽源
- linux下gdb调试器使用学习-03
- Linux内核分析第三周学习总结
- 第三节 构造一个简单的Linux系统MenuOS