LanOS -- 梳理linux0.12知识点系列
这个工程的目标是梳理《Linux源码剖析》的知识点并从0.12版本的源码中抠出部分代码构建一个
能用现代linux发行版方便编译的迷你系统,从而验证各个知识点
bilibili 视频教程
引用资源
- 《Linux源码剖析》最新的电子版
- linux 0.1x源码
- oldlinux官网
- 《ORANGE'S:一个操作系统的实现》
感谢赵炯博士,感谢于渊老师,感谢川合秀实先生,并致以最高的敬意!
本教程的特点
- 大量参考linux0.12的设计思路建立demo,有助于之后阅读linux源码
- 将尽可能多的linux中汇编实现的代码用c重新实现,提高可读性,降低学习成本
- 使用docker编译,使得编译环境极易搭建
超快速编译方法(依赖docker & 联网)
执行以下命令拉取代码并编译(首次执行make_os.sh会比较慢,因为要拉取docker编译镜像)
git clone https://github.com/freelw/LanOS.git
cd LanOS
./make_os.sh
执行效果
dantadeMacBook-Pro:yard danta$ git clone https://github.com/freelw/LanOS.git
Cloning into 'LanOS'...
remote: Enumerating objects: 517, done.
remote: Counting objects: 100% (517/517), done.
remote: Compressing objects: 100% (322/322), done.
remote: Total 1316 (delta 304), reused 379 (delta 181), pack-reused 799
Receiving objects: 100% (1316/1316), 2.78 MiB | 42.00 KiB/s, done.
Resolving deltas: 100% (788/788), done.
dantadeMacBook-Pro:yard danta$ cd LanOS
dantadeMacBook-Pro:LanOS danta$ ./make_os.sh
builing lan os...
cleaning temp files...
file [a.vfd] is our os image with a simple ramdisk filesystem.
知识点目录
- 如何编译和运行demo
- 梳理linux0.12知识点系列 之 让汇编到C不再遥远
- 梳理linux0.12知识点系列 之 a20地址线
- 梳理linux0.12知识点系列 之 8259A的初始化和时钟中断
- 8259A原理详细说明
- 网上相关资料整理
血与泪
其他说明
Todo
print_str 实现done 20200224print_num 实现done 20200224lan_fs 实现done 20200224exec 实现done 20200224exit 实现done 20200304
最终效果展示
有简单的shell和文件系统,可以执行ls程序
支持exec系统调用,可以执行应用程序
在一个可执行程序运行的过程中,执行另一个程序,说明支持多任务调度
loop程序的实现
最终demo链接
历史demo顺序
- asm_int_80
- asm_call_c
- lds_test
- protect_mode_demo
- protect_mode_cpp_demo
- a20_not_open
- a20_open
- mm
- user_mode_demo
- fork_demo
- cp_on_write
- print_str_demo
- fs_demo
- exec_demo
- shell_demo
- ls_demo
- exit_demo
- common_header_demo