# 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)
-+ 内核虚拟内存的详细布局
- + [x86_32](docs/img/lunaix-mem-map/lunaix-mem-x86_32.png)
- + [x86_64](docs/img/lunaix-mem-map/lunaix-mem-x86_64.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. 当前进度以及支持的功能
+ 信号机制
+ PCI 3.0
+ PCIe 1.1 (WIP)
-+ 块设备驱动
++ 块设备IO与驱动
+ + 块IO通用缓存池
+ Serial ATA AHCI
+ ATA设备
+ ATAPI封装的SCSI协议
+ ISO9660
+ ECMA-119
+ IEEE P1282(Rock Ridge拓展)
+ + ext2
+ + Revision 0
+ + Revision 1 (额外特性不支持)
+ 远程GDB串口调试 (COM1@9600Bd)
+ 用户程序加载与执行
+ 通用设备抽象层
+ 参考:`lunaix-os/hal/term`
+ 线程模型
+ 用户线程支持(pthread系列)
- + 内核线程支持(抢占式内核设计)
+ + 内核线程支持
++ 抢占式内核设计
+ + 内核态上下文切换
+ + 内核态异常挂起/死锁自动检测机制
## 3. 目录结构
### 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来进行交叉编译:
该脚本的运行需要设置 `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 内核
#### 网站
-+ [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设备编号查询
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)`