linux内核目录结构

  • arch目录包括了所有和体系结构相关的核心代码。它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CPU及与之相兼容体系结构的子目录。PC机一般都基于此目录。

  • include目录包括编译核心所需要的大部分头文件,例如与平台无关的头文件在include/linux子目录下。

  • init目录包含核心的初始化代码(不是系统的引导代码),有main.c和Version.c两个文件。这是研究核心如何工作的好起点。

  • mm目录包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/*/mm目录下。

  • drivers目录中是系统中所有的设备驱动程序。它又进一步划分成几类设备驱动,每一种有对应的子目录,如声卡的驱动对应于drivers/sound。

  • ipc目录包含了核心进程间的通信代码。

  • modules目录存放了已建好的、可动态加载的模块。

  • fs目录存放Linux支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext3文件系统对应的就是ext3子目录。

  • Kernel内核管理的核心代码放在这里。同时与处理器结构相关代码都放在arch/*/kernel目录下。

  • net目录里是核心的网络部分代码,其每个子目录对应于网络的一个方面。

  • lib目录包含了核心的库代码,不过与处理器结构相关的库代码被放在arch/*/lib/目录下。

  • scripts目录包含用于配置核心的脚本文件。

  • documentation目录下是一些文档,是对每个目录作用的具体说明。

实验楼环境

cd Linuxkernel/

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

qemu:启动一个虚拟机平台
-kernel:给一个内核,操作系统
-initrd:驱动所需的硬盘
rootfs.img:放一个可执行文件由menuOS源代码编译成的init

进入menu系统,支持三个命令 help version quit

自己搭建

1、下载内核源代码编译内核(下载,解压,编译)

2、制作根文件系统(创建目录存放文件系统)

3、启动menuOS

三、分析start_kernel函数的执行过程

在init目录下的main.c有函数 ,其中包含start_kernel函数

基本所有模块,都需要start_kernel来进行初始化。

asmlinkage __visible void __init start_kernel(void)

其中,有init_ task,set_ task_ stack_ end_ magic(&init_task);这个是手工创建的PCB,0号进程,即最终的idle进程。

trap_init();//中断向量初始化
mm_init();//内存管理模块初始化
sched_init();//调度模块初始化
console_init();//控制模块初始化
rest_init(); //其他模块初始化

其中rest_ init()调用了 
-->kernel_ thread(kernel_ init, NULL, CLONE_ FS); 调用了
-->run_ init_ process(ramdisk_ execute_ command); 
//init是第一个用户态进程,是1号进程

pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
//创建了线程

在rest_init中,各部分启动完毕后,

   /* Call into cpu_idle with preempt disabled */

cpu_startup_entry(CPUHP_ONLINE); 

调用static void cpu_idle_loop(void);
里面有个while(1) 也就是在系统没有进程需要执行时就调度idle进程

总结下来:在start_ kernel启动后,rest_ init的中0号进程会一直存在。

linux 第三周的更多相关文章

  1. Linux第三周学习总结——构造一个简单的Linux系统MenuOS

    第三周学习总结--构造一个简单的Linux系统MenuOS 作者:刘浩晨 [原创作品转载请注明出处] <Linux内核分析>MOOC课程http://mooc.study.163.com/ ...

  2. Linux第三周——跟踪分析内核的启动过程

    跟踪分析内核的启动过程实验 张潇月<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 这周主要学习的是对内核 ...

  3. Linux第三周作业

    1.三个法宝 ①存储程序计算机工作模型,计算机系统最最基础性的逻辑结构: ②函数调用堆栈,堆栈完成了计算机的基本功能:函数的参数传递机制和局部变量存取 : ③中断,多道程序操作系统的基点,没有中断机制 ...

  4. Linux 第三周 学习笔记和实验

    姬梦馨 原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 常用调试参数 r(run) 开始运行程 ...

  5. linux 第三周读书笔记-----第一二章 20135334赵阳林

    第一章 Linux内核简介 1.1 Unix的历史 由于Unix系统设计简洁并且在发布时提供源代码,所以许多其他组织和团体都对它进了进一步的开发. Unⅸ虽然已经使用了40年,但计算机科学家仍然认为它 ...

  6. 20135337朱荟潼 Linux第三周学习总结 ——Linux内核源代码简介

    朱荟潼 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课http://mooc.study.163.com/course/USTC 1000029000 知识笔记 1.ar ...

  7. 20135316王剑桥 linux第三周课实验笔记

    通过使用标准的字符码能够对文档中的字母和符号进行编码. 三种重要的数字表现形式: 1. 无符号数:编码基于传统的二进制表示法表示大于或等于零的数字. 2. 补码:编码是表示有符号整数的最常见方法,可以 ...

  8. Linux内核设计第三周——构造一个简单的Linux系统

    Linux内核设计第三周 ——构造一个简单的Linux系统 一.知识点总结 计算机三个法宝: 存储程序计算机 函数调用堆栈 中断 操作系统两把宝剑: 中断上下文的切换 进程上下文的切换 linux内核 ...

  9. 2018-2019-1 20189221《Linux内核原理与分析》第三周作业

    2018-2019-1 20189221<Linux内核原理与分析>第三周作业 实验二 完成一个简单的时间片轮转多道程序内核代码 实验过程 在实验楼中编译内核 编写mymain.c函数和m ...

随机推荐

  1. Eclipse常用快捷键(转载)

    编辑相关快捷键 Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键. 1. [ALT+/] 此快捷键为用户编辑的好帮手 ...

  2. Servlet3.0文件上传

    Servelt3.0文件上传作为一种便捷的文件上传方式很是值得我们去应用的 1.Servlet3.0文件上传使用步骤 浏览器端的要求 表单的提交方法必须是post 必须有一个文件上传组件 <in ...

  3. js实现购物车(源码)

    首先是页面布局html+css部分 <!doctype html><html lang="en"> <head>  <meta chars ...

  4. CodeForces 639 A

    Bear and Displayed Friends time limit per test2 seconds memory limit per test256 megabytes inputstan ...

  5. 联合约束 CONCAT()

    w SELECT 原理. SELECT * FROM wz WHERE CONCAT(wint,wchar) NOT IN (SELECT CONCAT(wint,wchar) FROM wa); S ...

  6. 每天一個Linux指令- chmod指令

    拷貝來源: 01.http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html 02.http://www.cnblogs.com/peid ...

  7. intelij IDEA在启动tomcat时控制台日志乱码

    1.在idea安装目录的bin下修改idea.exe.vmoptions和idea64.exe.vmoptions,添加 -Dfile.encoding=UTF-8 -Dconsole.encodin ...

  8. 网络编程 - 1.简单的套接字通信/2.加上通信循环/3.bug修复/4.加上链接循环/5.模拟ssh远程执行命令

    1.简单的套接字通信 服务端 ''' 服务端 接电话 客户端 打电话 1.先启动服务端 2.服务端有两种套接字 1.phone 用来干接收链接的 2.conn 用来干收发消息的 ''' import ...

  9. beego

    https://www.kancloud.cn/hello123/beego/126087

  10. 怎样在QML应用中创建一个Context Menu

    我们在非常多的系统中看见能够在屏幕的一个地方长按,然后就能够依据当前显示的上下文弹出一个菜单. 菜单中能够有一些选项,比方删除,改动该项.这样的一般在ListView或GridView中常见.今天,我 ...