# linux-0.11 **Repository Path**: openlabhub/linux-0.11 ## Basic Information - **Project Name**: linux-0.11 - **Description**: No description available - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-04 - **Last Updated**: 2026-07-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Linux 0.11 Lab 基于 Linux 0.11 内核的教学实验项目。在 QEMU 中编译、运行、调试真实的 Linux 0.11 内核。 ## 项目结构 ``` ├── kernel/ Linux 0.11 内核源码 │ ├── boot/ 引导代码 (bootsect.s, setup.s, head.s) │ ├── init/ 内核入口 (main.c) │ ├── kernel/ 进程管理、系统调用 (fork, exit, sched, signal) │ ├── mm/ 内存管理 (page fault, mmap) │ ├── fs/ Minix 文件系统 │ ├── lib/ 内核库函数 │ └── include/ 头文件 ├── rootfs/ 根文件系统镜像 (硬盘/ramdisk) ├── examples/ 用户态示例 (hello, syscall) ├── qemu/ QEMU 0.10.6 及依赖库 (开箱即用) ├── scripts/ 辅助脚本 + Docker 配置 ├── book/ 内核参考书籍 └── Makefile 构建入口 ``` ## 快速开始 ### 1. 编译内核 ```bash make build # 编译,生成 kernel/Image ``` ### 2. 启动 ```bash make run # QEMU 启动 (ramdisk 根文件系统) make run-disk # QEMU 启动 (硬盘根文件系统,含 GCC 工具链) ``` > `make run` 使用精简的 ramdisk 根文件系统;`make run-disk` 使用硬盘镜像,内含完整工具链可在客户机中编译程序。 ### 3. GDB 调试 在两个终端中分别运行: ```bash # 终端 1: 启动 QEMU (等待 GDB 连接) make gdb # 调试内核 (断点: startup_32 → main) make gdb-disk # 调试内核 (硬盘模式) # 终端 2: GDB 自动连接端口 1234 ``` 调试引导扇区或 setup 代码: ```bash make gdb DST=kernel/boot/bootsect.sym make gdb DST=kernel/boot/setup.sym ``` ### 4. 源码导航 ```bash make tags # 生成 ctags 索引 make cscope # 生成 cscope 索引 make callgraph # 生成 main() 调用图 (SVG) make callgraph FUNC=fork # 生成指定函数的调用图 ``` ## 在客户机中编译程序 使用硬盘启动后,`examples/` 目录会被复制到客户机的 `/usr/root/` 下: ```bash make run-disk # 硬盘启动 ``` 在客户机中: ```bash cd /usr/root/examples/hello gcc -o hello hello.c ./hello cd /usr/root/examples/syscall make ./test ``` ## Docker 开发环境 项目提供 Docker 环境(Ubuntu 16.04 + GCC 4.8),确保编译一致性: ```bash cd scripts/docker ./dockercmd.sh build # 构建镜像 ./dockercmd.sh run # 启动并进入容器 ``` 在容器内直接使用 `make` 命令即可。 ## 命令参考 | 命令 | 说明 | |------|------| | `make build` | 编译内核 | | `make clean` | 清理编译产物 | | `make distclean` | 清理所有产物(含解压的镜像) | | `make run` | QEMU 启动 (ramdisk) | | `make run-disk` | QEMU 启动 (硬盘,含 GCC) | | `make gdb` | GDB 调试 (ramdisk) | | `make gdb-disk` | GDB 调试 (硬盘) | | `make gdb DST=kernel/boot/bootsect.sym` | 调试引导扇区 | | `make tags` | 生成 ctags | | `make cscope` | 生成 cscope | | `make callgraph FUNC=func` | 生成函数调用图 (SVG) | | `make V=1` | 显示详细编译命令 | ## 内核源码阅读 推荐阅读顺序: 1. **boot/bootsect.s** — BIOS 加载引导扇区,打印 "Loading system ..." 2. **boot/setup.s** — 硬件检测,切换到保护模式 3. **boot/head.s** — 设置分页,跳转到 main() 4. **init/main.c** — 内核初始化:内存、中断、设备、进程 5. **kernel/sched.c** — 进程调度(时间片轮转) 6. **kernel/fork.c** — 进程创建(copy_page_tables) 7. **mm/memory.c** — 缺页中断处理 8. **fs/buffer.c** — 块设备缓冲管理 参考书籍:`book/clk011c-3.0.pdf` ## 许可证 GPL v2 — 详见 [COPYING](COPYING)