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

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


从本文开始,我们来详细分析下,Linux0.11 的代码,
通过它来重点学习下进程调度模块内存管理模块文件系统模块进程间通信模块驱动管理模块 的核心理念。

Linux 各版源代码下载地址:
官方下载地址: https://mirrors.edge.kernel.org/pub/linux/kernel/
清华大学开源镜像站:https://mirrors.tuna.tsinghua.edu.cn/kernel/


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
│  │  sched.c
│  │  signal.c
│  │  sys.c
│  │  system_call.s
│  │  vsprintf.c
│  ├─blk_drv
│  │      blk.h
│  │      floppy.c
│  │      hd.c
│  │      ll_rw_blk.c
│  │      Makefile
│  │      ramdisk.c
│  ├─chr_drv
│  │      console.c
│  │      keyboard.S
│  │      Makefile
│  │      rs_io.s
│  │      serial.c
│  │      tty_io.c
│  │      tty_ioctl.c
│  └─math
│          Makefile
│          math_emulate.c
├─lib
│      close.c
│      ctype.c
│      dup.c
│      errno.c
│      execve.c
│      Makefile
│      malloc.c
│      open.c
│      setsid.c
│      string.c
│      wait.c
│      write.c
│      _exit.c
├─mm
│      Makefile
│      memory.c
│      page.s
└─tools
        build.c








附分析代码过程中遇到的问题:
Vscode 打开 GB2312格式代码显示乱码
在这里插入图片描述
永久解决办法:
如下图,进入设置,配置 Encoding 为 GB2312格式即可:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Ciellee/article/details/130488747
今日推荐