【Linux0.11代码分析】01 之 代码目录分析

news/2024/11/22 6:17:55/

【Linux0.11代码分析】01 之 代码目录分析


系列文章如下:

系列文章汇总:《【Linux0.11代码分析】之 系列文章链接汇总(全)》
.
1.《【Linux0.11代码分析】01 之 代码目录分析》
2.《【Linux0.11代码分析】02 之 bootsect.s 启动流程》
3.《【Linux0.11代码分析】03 之 setup.s 启动流程》
4.《【Linux0.11代码分析】04 之 head.s 启动流程》



从本文开始,我们来详细分析下,Linux0.11 的代码:

Linux 各版源代码下载地址:
官方下载地址: https://mirrors.edge.kernel.org/pub/linux/kernel/
清华大学开源镜像站:https://mirrors.tuna.tsinghua.edu.cn/kernel/
http://www.oldlinux.org/Book-Lite/code-list/pdf/P-all.pdf


Linux0.11的代码不多,下面我们一一来简单介绍下它的作用:

linux0.11
│  Makefile
├─boot
│      bootsect.s			// 磁盘引导程序, 被bios启动子程序加载至0x7c00 (31k)处
│      head.s				// 从绝对地址0x00000000开始运行的32位运行启动代码程序,后续将会被将页目录覆盖掉
│      setup.s				// 负责从BIOS 中获取系统数据,并将这些数据放到系统内存的适当地方(0x90000-0x901FF)
├─fs						// 【文件系统模块】
│      bitmap.c				// 创建/释放inode节点,申请/释放block磁盘块
│      block_dev.c			// block 块读写函数实现
│      buffer.c				// 实现缓冲区高速缓存功能, 实现缓冲区读写函数,及队列操作方法
│      char_dev.c			// char 字符设备操作方法实现
│      exec.c				// 执行一个新的可执行程序,含解析环境变量和参数字符串函数
│      fcntl.c				// 文件控制相关系统调用函数实现
│      file_dev.c			// 文件读写函数实现
│      file_table.c			// 定义file_table文件表数组
│      inode.c				// inode 节点操作方法:获取/等待/上锁/解锁/释放/同步/读/写inode节点
│      ioctl.c				// 定义 ioctl_table 操作函数指针表,实现sys_ioctl系统调用
│      Makefile				// Makefile 含 编译规则,链接规则,依赖规则
│      namei.c				// 检测文件证读写执行权限,查找/获取/打开/创建/删除文件目录项
│      open.c				// 文件访问相关函数
│      pipe.c				// 创建/读/写 操作函数实现
│      read_write.c			// 文件读sys_lseek/sys_read/sys_wirte 定位,读,写 系统调用函数
│      stat.c				// 获文件状态相关信息
│      super.c				// super 超级块读写函数,卸载/挂载根文件系统
│      truncate.c			// 释放指定i节点在设备上占用的所有逻辑块,包括直接块、一次间接块和二次间接块
├─include
│  │  a.out.h				// a.out 头文件, 定义了a.out 执行文件格式和一些宏
│  │  const.h				// 常数符号头文件, 目前仅定义了inode 节点中i_mode 字段的各标志位
│  │  ctype.h				// 字符类型头文件。定义了一些有关字符类型判断和转换的宏
│  │  errno.h				// 错误号头文件。包含系统中各种出错号。(Linus 从minix 中引进的)
│  │  fcntl.h				// 文件控制头文件,用于文件及其描述符的操作控制常数符号的定义
│  │  signal.h				// 信号头文件。定义信号符号常量,信号结构以及信号操作函数原型
│  │  stdarg.h				// 标准参数头文件。以宏的形式定义变量参数列表
|  |					    // 主要说明了一个类型(va_list)和三个宏(va_start, va_arg 和va_end),用于vsprintf、vprintf、vfprintf 函数。
│  │  stddef.h				// 标准定义头文件。定义了NULL, offsetof(TYPE, MEMBER)
│  │  string.h				// 字符串头文件。主要定义了一些有关字符串操作的嵌入函数
│  │  termios.h				// 终端输入输出函数头文件。主要定义控制异步通信口的终端接口
│  │  time.h				// 时间头文件,定义了标准时间数据结构tm 和一些处理时间函数原型
│  │  unistd.h				// Linux 标准头文件。定义了各种符号常数和类型,并申明了各种函数
│  │  utime.h				// 用户时间头文件。定义了访问和修改时间结构以及utime()原型
│  ├─asm
│  │      io.h				// io 头文件。定义硬件端口输入/输出宏汇编语句
│  │      memory.h			// 内存拷贝头文件。含有memcpy()嵌入式汇编宏函数
│  │      segment.h			// 段操作头文件。定义了有关段寄存器操作的嵌入式汇编函数
│  │      system.h			// 系统头文件。以宏的形式定义了许多有关设置或修改 描述符/中断门等的嵌入式汇编子程序
│  ├─linux
│  │      config.h			// 内核配置头文件。定义键盘语言和硬盘类型(HD_TYPE)可选项
│  │      fs.h				// 文件系统头文件。定义文件表结构(file,buffer_head,m_inode 等)
│  │      hdreg.h			// 硬盘参数头文件。定义访问硬盘寄存器端口,状态码,分区表等信息
│  │      head.h			// head 头文件,定义了段描述符的简单结构,和几个选择符常量
│  │      kernel.h			// 内核头文件, 含有一些内核常用函数的原形定义
│  │      mm.h				// 内存管理头文件, 含有页面大小定义和一些页面释放函数原型
│  │      sched.h		// 调度程序头文件,定义了任务结构task_struct,初始任务0的数据,以及有关描述符参数设置和获取的嵌入式汇编函数宏语句
│  │      sys.h				// 文件系统头文件。定义文件表结构(file,buffer_head,m_inode 等)
│  │      tty.h				// tty 头文件,定义了有关tty_io,串行通信方面的参数、常数
│  └─sys
│          stat.h			// 文件状态头文件,含有文件或文件系统状态结构stat{}和常量
│          times.h			// 定义了进程中运行时间结构tms 以及times()函数原型
│          types.h			// 类型头文件。定义了基本的系统数据类型。
│          utsname.h		// 系统名称结构头文件
│          wait.h			// 等待调用头文件。定义系统调用wait()和waitpid()及相关常数符号。
├─init
│      main.c				// 内核主程序
├─kernel
│  │  asm.s					// 【异常】包括大部分的硬件故障(或出错)处理的底层次代码
│  │  exit.c				// 【进程调度模块】挂机waitpid/终止exit/杀死kill/发送sig信号/释放release等进程相关操作
│  │  fork.c				// 【进程调度模块】复制创建子程序,含mem\寄存器拷贝等动作
│  │  mktime.c				// 【时间】计算从1970年1月1日0日开始到当前的时间
│  │  panic.c				// 【异常】内核崩溃处理函数
│  │  printk.c				// 【日志】Printk 实现函数
│  │  sched.c				// 【进程调度模块】调度程序相关函数 以及部分系统调用实现
│  │  signal.c				// 【信号】signal 函数具体实现
│  │  sys.c					// 部分系统调用函数实现
│  │  system_call.s			// 【系统调用】(system-call)底层处理子程序
|  |  traps.c				// 当出现硬件traps陷阱和faults错误时,会先调用asm.s保存当前状态,然后调用traps.c进行处理
│  │  vsprintf.c			// 字符串格式化输出实现
│  ├─blk_drv				
│  │      blk.h				// 块设备头文件。定义请求数据结构、块设备数据结构和宏函数等信息
│  │      floppy.c			// 软盘驱动
│  │      hd.c				// 底层硬盘中断辅助程序。主要用于扫描请求列表,使用中断在函数之间跳转。
│  │      ll_rw_blk.c		// 处理块设备的所有读/写操作
│  │      Makefile
│  │      ramdisk.c			// ramdisk 虚拟盘驱动
│  ├─chr_drv
│  │      console.c			// 控制台输入输出功能
│  │      keyboard.S		// 键盘读操作
│  │      Makefile
│  │      rs_io.s			// rs232 输入输出中断处理程序
│  │      serial.c			// 实现rs232 的输入输出功能 以及与传输IO 有关系的所有中断处理程序
│  │      tty_io.c			// tty 终端相关函数
│  │      tty_ioctl.c		// tty 终端设备的ioctl 函数
│  └─math
│          Makefile
│          math_emulate.c	// 该目录里应该包含协处理器数学仿真代码。目前仅产生一个信号
├─lib
│      close.c				// 关闭文件函数 close(),直接调用了系统中断int 0x80,参数是__NR_close
│      ctype.c				// 字符特性数组(表), 定义了各字符对应的属性,用于判断字符是控制字符(_C)、大写字符(_U)、小写字符(_L)等所属类型
│      dup.c				// 复制文件描述符函数dup(), 直接调用了系统中断int 0x80,参数是__NR_dup
│      errno.c				// 定义变量 int errno
│      execve.c				// 加载并执行子进程(其它程序)函数execve(),直接调用了系统中断int 0x80,参数是__NR_execve
│      Makefile		
│      malloc.c				// Linux 的通用内核内存分配函数 malloc()
│      open.c				// 打开文件函数, 调用了系统中断int 0x80,参数是__NR_open
│      setsid.c				// 创建一个会话并设置进程组号, pid_t setsid()
│      string.c
│      wait.c				// 等待进程终止系统调用函数 waitpid()
│      write.c				// 写文件系统调用函数 write()
│      _exit.c				// 程序(退出)终止函数_exit(), 直接调用系统中断int 0x80,功能号__NR_exit。
├─mm
│      Makefile
│      memory.c				// 【内存管理模块】内存页管理核心程序
│      page.s				// 包含底层页异常处理代码, 实际的工作在memory.c 中完成
└─toolsbuild.c




http://www.ppmy.cn/news/59502.html

相关文章

Flutter 组件使用:使用 Stack 替代 GlobalKey 的定位 tip-widget 实现

场景 有时候需要在指定位置进行 tip-widget 的弹出与展示,常见的方式是通过给指定位置上的指定 widget 添加 GlobalKey 来实现; 但是,使用这种方式的话,【一】大多数时候都需要进行全局定位转换(localToGlobal&#…

OD工具之动态逆向分析技术实例分析

OD工具之动态逆向分析技术实例分析 vscode等编写cmp.cOD工具打开cmp.exe 卧槽垃圾高级软件工程真是烦人还是记录一下吧那么简单的几行没有手册搞半天都无力吐槽了 vscode等编写cmp.c 在vscode等编辑器中编写cmp.c文件&#xff1a; #include<stdio.h> int main() {int …

计算机电脑中了勒索病毒怎么办,Windows系统中了faust勒索病毒解密数据恢复

电脑的操作系统被恶意软件攻击已不再是新鲜的话题了。而攻击的恶意软件中有一种叫做faust勒索病毒&#xff0c;常常袭击Windows电脑系统。如果我们的电脑在使用Windows操作系统时感染了faust勒索软件&#xff0c;请不要慌张&#xff0c;我们可以咨询专业的数据恢复厂商&#xf…

【Qt5】多线程串口

文章目录 原版代码工程增加QCustomplot实时画图的源码工程源码 原版代码工程 源码下载链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/15pWzadPwOx_OfJGtvL-MjA 提取码&#xff1a;lief –来自百度网盘超级会员V5的分享 增加QCustomplot实时画图的源码工程 源码&…

Vue第一章:基本概念

一.关于Vue的说法正确的是 v-for指令基于一个数组来渲染一个列表v-for指令需要使用item in items形式的特殊语法&#xff0c;其中items是源数据数组&#xff0c;而item则是被迭代的数组元素的别名v-for在使用的时候最好添加key&#xff0c;且key最好不是索引可以用v-for来遍历…

USB协议分析仪

1 ULPI PHY passive sniffing mode 概念: non driving, no pull-up, no pull-down Function Control.opMode 1; // non-Driving OTG Control.DpPulldown 0; // no pull-down OTG Control.DmPulldown 0; // no pull-down USB IO.ChargerPullupEnDP 0; // no pull-up USB IO.…

JavaEE 第二周

计算机Z20-第2周作业 总分&#xff1a;100分 得分&#xff1a;100.0分 1 . 单选题 中等 15分 下面关于JSP注释的说法中&#xff0c;正确的是&#xff08;&#xff09; A.JSP注释语法格式&#xff1a;<!-- 注释信息 --> B.JSP注释不会发送到…

Java 的简要介绍及开发环境的搭建(超级详细)

图片来源于互联网 目录 | CONTENT Java 简介 一、什么是 Java 二、认识 Java 版本 三、选择哪个版本比较好 搭建 Java 开发环境 一、下载 Java 软件开发工具包 JDK 二、配置环境变量 自动配置 手动配置 三、下载合适的 IDE IntelliJ IDEA Visual Studio Code Eclip…