Refinement on documentation (#38)
[lunaix-os.git] / README.md
index e8910787ba830d22d0e8ef34070ad8cd41a53df7..43695ee4ed744d5a388f952d0b0007e1a08ae17d 100644 (file)
--- a/README.md
+++ b/README.md
@@ -8,16 +8,14 @@
 
 # The LunaixOS Project
 
-LunaixOS - 一个简单的,详细的,POSIX兼容的(但愿!),带有浓重个人风格的操作系统。开发过程以视频教程形式在Bilibili呈现:[《从零开始自制操作系统系列》](https://space.bilibili.com/12995787/channel/collectiondetail?sid=196337)。
+LunaixOS - 一个简单的,详细的,POSIX兼容的(但愿!),带有浓重个人风格的操作系统,由 Lunaix 内核驱动。开发过程以视频教程形式在Bilibili呈现:[《从零开始自制操作系统系列》](https://space.bilibili.com/12995787/channel/collectiondetail?sid=196337)。
 
 ## 1. 一些实用资源
 
-如果有意研读LunaixOS的内核代码和其中的设计,或欲开始属于自己的OS开发之道,以下资料可能会对此有用。
+如果有意研读 Lunaix 内核代码和其中的设计,或欲开始属于自己的OS开发之道,以下资料可能会对此有用。
 
-+ [最新的LunaixOS源代码分析教程](docs/tutorial/0-教程介绍和环境搭建.md)
-+ [内核虚拟内存的详细布局](docs/img/lunaix-os-mem.png)
-+ [LunaixOS启动流程概览](docs/img/boot_sequence.jpeg)
-+ LunaixOS总体架构概览(WIP)
++ [内核文档(Luna's Tour)](docs/lunaix-internal.md)
++ [LunaixOS源代码分析教程](docs/tutorial/0-教程介绍和环境搭建.md)
 + [作者修改的QEMU](https://github.com/Minep/qemu) (添加了一些额外用于调试的功能)
 
 ## 2. 当前进度以及支持的功能
@@ -45,7 +43,8 @@ Lunaix全部特性一览:
 + 信号机制
 + PCI 3.0
 + PCIe 1.1 (WIP)
-+ 块设备驱动
++ 块设备IO与驱动
+  + 块IO通用缓存池
   + Serial ATA AHCI
     + ATA设备
     + ATAPI封装的SCSI协议
@@ -57,6 +56,9 @@ Lunaix全部特性一览:
   + ISO9660
     + ECMA-119
     + IEEE P1282(Rock Ridge拓展)
+  + ext2
+    + Revision 0
+    + Revision 1 (额外特性不支持)
 + 远程GDB串口调试 (COM1@9600Bd)
 + 用户程序加载与执行
 + 通用设备抽象层
@@ -75,7 +77,10 @@ Lunaix全部特性一览:
   + 参考:`lunaix-os/hal/term`
 + 线程模型
   + 用户线程支持(pthread系列)
-  + 内核线程支持(抢占式内核设计)
+  + 内核线程支持
++ 抢占式内核设计
+  + 内核态上下文切换
+  + 内核态异常挂起/死锁自动检测机制
 
 ## 3. 目录结构
 
@@ -98,7 +103,7 @@ Lunaix全部特性一览:
 
 ### 4.1 使用 GNU CC 工具链
 
-正如同大多数OS一样,LunaixOS 是一个混合了 C 和汇编的产物。这就意味着你得要使用一些标准的C编译器来构建Lunaix。在这里,我推荐使用 GNU CC 工具链来进行构建。因为Lunaix 在编写时使用了大量的GNU CC 相关编译器属性修饰 (`__attribute__`) 。假若使用其他工具链,如LLVM,我对此就不能做出任何保证了。
+正如同大多数内核一样,Lunaix 是一个混合了 C 和汇编的产物。这就意味着你得要使用一些标准的C编译器来构建Lunaix。在这里,我推荐使用 GNU CC 工具链来进行构建。因为Lunaix 在编写时使用了大量的GNU CC 相关编译器属性修饰 (`__attribute__`) 。假若使用其他工具链,如LLVM,我对此就不能做出任何保证了。
 
 如果你使用的是基于 x86 指令集的Linux系统,不论是64位还是32位,**其本机自带的gcc就足以编译Lunaix**。 当然了,如果说你的平台是其他非x86的,你也可以指定使用某个针对x86_32的gcc套件来进行交叉编译——在`make`时通过`CX_PREFIX`变量来指定gcc套件的前缀。如下例所示,我们可以在任意平台上,如risc-v,单独使用一个面向x86_32的gcc来进行交叉编译:
 
@@ -175,13 +180,19 @@ console=/dev/ttyFB0
 
 该脚本的运行需要设置 `ARCH=<isa>` 环境变量,其值需要与编译时制定的值一致。
 
+如:
+
+```sh
+ARCH=x86_64 ./live_debug.sh
+```
+
 ## 5. 运行,分支以及 Issue
 
 ### 5.1 代码稳定性
 
-主分支一般是稳定的。因为在大多数情况下,我都会尽量保证本机运行无误后,push到该分支中。至于其他的分支,则是作为标记或者是开发中的功能。前者标记用分支一般会很快删掉;后者开发分支不能保证稳定性,这些分支的代码有可能没有经过测试,但可以作为Lunaix当前开发进度的参考
+主分支一般是稳定的。因为在大多数情况下,我都会尽量保证本机运行无误后,push到该分支中。所有正在开发的功能请参考当前活跃的Pull Request
 
-该系ç»\9fæ\98¯ç»\8fè¿\87è\99\9aæ\8b\9fæ\9cºå\92\8cç\9c\9fæ\9cºæµ\8bè¯\95ã\80\82å¦\82æ\9e\9cå\8f\91ç\8e°å\9c¨ä½¿ç\94¨`make all`ä¹\8bå\90\8eï¼\8cè\99\9aæ\8b\9fæ\9cºä¸­è¿\90è¡\8cæ\8a¥é\94\99ï¼\8cå\88\99ä¸\80è\88¬æ\98¯ç¼\96è¯\91å\99¨ä¼\98å\8c\96é\97®é¢\98ã\80\82è¿\99个é\97®é¢\98ç¬\94è\80\85ä¸\80è\88¬å¾\88å¿«å°±ä¼\9aä¿®å¤\8dï¼\8cå¦\82æ\9e\9c你使ç\94¨å\88«ç\9a\84ç\89\88æ\9c¬ç\9a\84gccï¼\88ç¬\94è\80\85ç\89\88æ\9c¬11.2ï¼\89ï¼\8cå\87ºç\8e°äº\86æ­¤é\97®é¢\98ï¼\8c欢è¿\8eæ\8f\90issueã\80\82请å\8f\82è\80\83\99\84å½\953ï¼\9aIssueç\9a\84æ\8f\90交](#appendix3)
+å¦\82æ\9e\9c主å\88\86æ\94¯ç\9a\84è¿\90è¡\8cå\87ºç\8e°äº\86æ­¤é\97®é¢\98ï¼\8c欢è¿\8eæ\8f\90issueã\80\82请å\8f\82è\80\83\99\84å½\953ï¼\9aIssueç\9a\84æ\8f\90交](#appendix3)
 
 ## 6. 调试 Lunaix 内核
 
@@ -248,7 +259,7 @@ console=/dev/ttyFB0
 
 #### 网站
 
-+ [OSDev](https://wiki.osdev.org/Main_Page) - 杂七杂八的参考,很多过来人的经验。作者主要用于上古资料查询以及收集;技术文献,手册,标准的粗略总结;以及开发环境/工具链的搭建。当然,上面的内容假设了x86_32架构的生态,对于其他的ISA支持,该网站便失去了其价值了
++ [OSDev](https://wiki.osdev.org/Main_Page) - 适合快速入门,和一些文档手册的总结
 + [FreeVGA](http://www.osdever.net/FreeVGA/home.htm) - 98年的资源!关于VGA编程技术的宝藏网站。
 + GNU CC 和 GNU LD 的官方文档。
 + [PCI Lookup](https://www.pcilookup.com/) - PCI设备编号查询
@@ -287,11 +298,11 @@ LunaixOS 提供对以下POSIX的系统接口的实现。内核定义的系统调
 2. `readdir(2)`
 2. `readlink(2)`
 2. `readlinkat(2)`
-2. `rmdir(2)`
-2. `unlink(2)`
-2. `unlinkat(2)`
+2. `rmdir(2)`
+2. `unlink(2)`
+2. `unlinkat(2)`
 2. `link(2)`※
-2. `fsync(2)`
+2. `fsync(2)`
 2. `dup(2)`
 2. `dup2(2)`
 2. `symlink(2)`