# linux-0.12-1 **Repository Path**: flhs2/linux-0.12-1 ## Basic Information - **Project Name**: linux-0.12-1 - **Description**: 参考《Linux内核完全剖析》linux0.12源码及实验环境 - **Primary Language**: C - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 15 - **Created**: 2024-09-16 - **Last Updated**: 2024-09-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # linux-0.12 源码学习 *参考《Linux内核完全剖析 --基于0.12内核》* linux-0.12目录为修改过的源代码,其中加入了**中文注释**,修改部分代码使其能在现在的环境下**编译**,并且支持**GDB调试**。(无任何修改的源代码 -> [linux-0.12.tar.gz](src/code/linux-0.12.tar.gz)) | 文件夹 | 说明 | | ------------ | -------------------- | | `linux-0.12` | linux-0.12源代码 | | `oslab` | 实验目录 | | `src` | 一些资源和笔记 | ## 一、实验篇 1. ubuntu(>=14.04)的用户可以使用`src/setup`目录下的一键搭建脚本[setup.sh](src/setup/setup.sh); 2. 其他系统(包括ubuntu)的用户可以拉取已创建好的docker镜像作为实验环境,```docker pull ultraji/ubuntu-xfce-novnc:os_learn```; 具体内容请查看 [实验环境搭建及说明](src/note/实验相关/实验环境搭建及说明.md)。
## 二、运行篇 1. 该项目的oslab为实验目录,切到oslab目录下,运行该目录下的run.sh脚本即可运行linux0.12操作系统。 ./run.sh -m  编译生成新的Image镜像; ./run.sh -g  运行bochs模拟器,与gdb联调,如果gdb报“Remote 'g' packet reply is too long”错误,可以使用gdb-13.2目录下的gdb替换/usr/bin/gdb。 2. 在 Visual Studio Code(VS Code) 中调试 本机使用的gdb版本为13.2, 请先确定gdb能和bochs模拟器联调linux0.12操作系统。 在命令行中,进入linux-0.12文件夹目录,重命名 vscode 为 .vscode mv vscode .vscode 切到oslab目录下,运行该目录下的run.sh脚本运行linux0.12操作系统 ./run.sh -r  运行bochs模拟器 在VS Code中打开linux-0.12文件夹目录,打开init/main.c文件,在mian.c下断点,例如在199行下断点,运行>启动调试。 ## 三、踩坑篇 如有错误、疏漏之处,感谢指出。 ### 实验相关 1. [实验环境搭建及说明](src/note/实验相关/实验环境搭建及说明.md) 2. [常见编译问题总结](src/note/实验相关/编译源码的问题记录.md) 3. [0.12内核代码bug修复](src/note/实验相关/0.12内核代码bug修复.md) 4. [Bochs调试技巧](src/note/实验相关/Bochs调试技巧.md) 5. [GDB调试技巧](src/note/实验相关/GDB调试技巧.md) ### 知识积累 1. [C代码阅读提示](src/note/知识积累/C代码阅读提示.md) 2. [汇编中各寄存器的作用](src/note/知识积累/汇编中各寄存器的作用.md) ### 系统总览 1. [内核导言](src/note/系统总览/内核导言.md) ### 建造工具 tools/ 1. [建造工具build的说明](https://ultraji.github.io/post/linux0.12-build.html) 相关文件:`tools/build.c` ### 系统引导 boot/ 1. [Linux0.12的启动过程](src/note/系统引导/Linux0.12的启动过程.md) 相关文件:`bootsect.S、setup.S` ### 文件系统 fs/ 1. [文件系统概述](https://ultraji.github.io/post/linux0.12-filesystem.html) `include/linux/fs.h` 2. [高速缓冲区的实现](https://ultraji.github.io/post/linux0.12-filesystem-buffer.html) 相关文件:`buffer.c` 3. [write和read的实现](https://ultraji.github.io/post/linux0.12-filesystem-rw.html) 相关文件:`block_dev.c、file_dev.c、char_dev.c、pipe.c、read_write.c` ### 内存管理 mm/