X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/c4510182f3c02e390184bee518940e325f064b20..refs/heads/nov/revmap:/README.md
diff --git a/README.md b/README.md
index 35db086..2fce0e9 100644
--- a/README.md
+++ b/README.md
@@ -3,104 +3,236 @@
- ç®ä½ä¸æ | English
+ ç®ä½ä¸æ | English
-# LunaixOS Project
-LunaixOS - ä¸ä¸ªç®åçï¼è¯¦ç»çï¼POSIXå
¼å®¹çï¼ä½æ¿ï¼ï¼ï¼å¸¦ææµéä¸ªäººé£æ ¼çæä½ç³»ç»ãå¼åè¿ç¨ä»¥è§é¢æç¨å½¢å¼å¨Bilibiliåç°ï¼[ãä»é¶å¼å§èªå¶æä½ç³»ç»ç³»åã](https://space.bilibili.com/12995787/channel/collectiondetail?sid=196337)ã
+# The LunaixOS Project
-## å½åè¿åº¦ä»¥åæ¯æçåè½
+LunaixOS - ä¸ä¸ªç®åçï¼è¯¦ç»çï¼POSIXå
¼å®¹çï¼ä½æ¿ï¼ï¼ï¼å¸¦ææµéä¸ªäººé£æ ¼çæä½ç³»ç»ï¼ç± Lunaix å
æ ¸é©±å¨ãå¼åè¿ç¨ä»¥è§é¢æç¨å½¢å¼å¨Bilibiliåç°ï¼[ãä»é¶å¼å§èªå¶æä½ç³»ç»ç³»åã](https://space.bilibili.com/12995787/channel/collectiondetail?sid=196337)ã
-该æä½ç³»ç»æ¯æx86æ¶æï¼è¿è¡å¨ä¿æ¤æ¨¡å¼ä¸ï¼éç¨å®å
æ ¸æ¶æï¼ç®åä»
æ¯æåæ ¸å¿ãå
åç»æéç¨ç»å
¸ç3:1ååï¼å³ä½3GiBä¸ºç¨æ·å°å空é´ï¼0x400000 ~ 0xBFFFFFFFï¼ï¼å
æ ¸å°å空é´éæ å°è³é«1GiBï¼0xC0000000 ~ 0xFFFFFFFFï¼ãå
åç详ç»å¸å±å¯åè[LunaixOSå
åå°å¾](docs/img/lunaix-os-mem.png)
+## 1. ä¸äºå®ç¨èµæº
-å¨ä¸è¿°å表ä¸ï¼åååºç®åææ¯æçæç¨åè½åç¹æ§ãå表项æç
§é¡¹ç®æ¶é´æ³è¿è¡ååºæåã
+妿ææç 读 Lunaix å
æ ¸ä»£ç åå
¶ä¸çè®¾è®¡ï¼ææ¬²å¼å§å±äºèªå·±çOSå¼åä¹éï¼ä»¥ä¸èµæå¯è½ä¼å¯¹æ¤æç¨ã
+
++ [å
æ ¸ææ¡£ï¼Luna's Tourï¼](docs/lunaix-internal.md)
++ [LunaixOSæºä»£ç åææç¨](docs/tutorial/0-æç¨ä»ç»åç¯å¢æå»º.md)
++ [ä½è
ä¿®æ¹çQEMU](https://github.com/Minep/qemu) (æ·»å äºä¸äºé¢å¤ç¨äºè°è¯çåè½)
+
+## 2. å½åè¿åº¦ä»¥åæ¯æçåè½
+
+Lunaixå
æ ¸å
·ææ¯æå¤ç§ä¸åçæä»¤éæ¶æçè½åï¼ç®åæ¯æå¦ä¸ï¼
+
++ x86_32
++ x86_64
+
+Lunaixå
¨é¨ç¹æ§ä¸è§ï¼
+ 使ç¨Multibootè¿è¡å¼å¯¼å¯å¨
+ + Multiboot 1
+ + Multiboot 2 (WIP)
+ APIC/IOAPICä½ä¸ºä¸æç®¡çå¨å计æ¶å¨
+ ACPI
+ èæå
å
-+ å
å管ç䏿éå页ï¼Demand Pagingï¼
-+ é®çè¾å
¥
-+ å¤è¿ç¨
-+ 44个常è§çLinux/POSIXç³»ç»è°ç¨ï¼[éå½1](#appendix1)ï¼
-+ ç¨æ·æ¨¡å¼
+ + æ¶æä¸æ§è®¾è®¡
+ + æéå页
+ + Copy-on-Write
++ å
å管ç
++ è¿ç¨æ¨¡å
++ 61个常è§çLinux/POSIXç³»ç»è°ç¨ï¼[éå½1](#appendix1)ï¼
++ ç¨æ·/å
æ ¸æé离
+ ä¿¡å·æºå¶
+ PCI 3.0
+ PCIe 1.1 (WIP)
-+ Serial ATA AHCI
-+ æä»¶ç³»ç» (WIP)
-
-## ç®å½ç»æ
-
-| | |
-|-----|------|
-| [lunaix-os](lunaix-os/) | LunaixOSæºä»£ç |
-| [slides](slides/) | è§é¢ä¸æç¨çå¹»ç¯çåè¡¥å
ææ |
-| [reference-material](reference-material/)| æ åï¼ææ¯ææ¡£ååèæç® |
-
-## ç¼è¯ä¸æå»º
++ å设å¤IOä¸é©±å¨
+ + åIOéç¨ç¼åæ±
+ + Serial ATA AHCI
+ + ATA设å¤
+ + ATAPIå°è£
çSCSIåè®®
++ æä»¶ç³»ç»ï¼POSIX.1-2008, section 5 & 10ï¼
+ + èææä»¶ç³»ç»
+ + å
æ ¸ææä»¶ç³»ç»ï¼twifs, Lunaixèªå·±çsysfsï¼
+ + è®¾å¤æä»¶ç³»ç»ï¼devfs, Lunaixèªå·±çudevï¼
+ + è¿ç¨æä»¶ç³»ç»ï¼procfsï¼
+ + ISO9660
+ + ECMA-119
+ + IEEE P1282ï¼Rock Ridgeæå±ï¼
+ + ext2
+ + Revision 0
+ + Revision 1 ï¼é¢å¤ç¹æ§ä¸æ¯æï¼
++ è¿ç¨GDB串å£è°è¯ (COM1@9600Bd)
++ ç¨æ·ç¨åºå è½½ä¸æ§è¡
++ éç¨è®¾å¤æ½è±¡å±
+ + æ¶æä¸æ§çè®¾å¤æ¯æä½äºï¼`lunaix-os/hal`
+ + 16550 UART
+ + ACPI ï¼ä¸å®å
¨å®ç°ï¼
+ + æ¶æè¦åçè®¾å¤æ¯æä½äºï¼`lunaix-os/arch//hal`
+ + x86
+ + APIC/IOAPIC ç»å
+ + MC146818 RTC
+ + i8042 PS/2
+ + RNGï¼ä½¿ç¨`rdrand`ï¼
+ + [Devicetree](https://www.devicetree.org/)
++ éç¨å¾å½¢è®¾å¤æ½è±¡å± (Draft)
+ + åèï¼`lunaix-os/hal/gfxa`
++ èæç»ç«¯è®¾å¤æ¥å£ï¼POSIX.1-2008, section 11ï¼
+ + åèï¼`lunaix-os/hal/term`
++ çº¿ç¨æ¨¡å
+ + ç¨æ·çº¿ç¨æ¯æï¼pthreadç³»åï¼
+ + å
æ ¸çº¿ç¨æ¯æ
++ æ¢å å¼å
æ ¸è®¾è®¡
+ + å
æ ¸æä¸ä¸æåæ¢
+ + å
æ ¸æå¼å¸¸æèµ·/æ»éèªå¨æ£æµæºå¶
+
+## 3. ç®å½ç»æ
+
+| | |
+| ----------------------------------------- | ---------------------------- |
+| [lunaix-os](lunaix-os/) | LunaixOSæºä»£ç |
+| [slides](slides/) | è§é¢ä¸æç¨çå¹»ç¯çåè¡¥å
ææ |
+| [reference-material](reference-material/) | æ åï¼ææ¯ææ¡£ååèæç® |
+
+## 4. ç¼è¯ä¸æå»º
+
+**ï¼å¦ææ³è¦ç«å»æå»ºå¹¶è¿è¡ï¼è¯·åè4.7ï¼**
æå»ºè¯¥é¡¹ç®éè¦æ»¡è¶³ä»¥ä¸æ¡ä»¶ï¼
-+ gcc (ç®æ å¹³å°: i686-elf)
-+ binutils
++ gcc å·¥å
·é¾
+ make
+ xorriso
+ grub-mkrescue
-**注æï¼gccä¸è½æ¯æ¬æºèªå¸¦çï¼å¿
é¡»è¦ä»æºç ç¼è¯ï¼å¹¶é
ç½®ç®æ å¹³å°ä¸ºï¼`i686-elf`ï¼ä»¥è¿è¡äº¤åç¼è¯ãé
ç½®è¿ç¨å¯åè[éå½äºï¼ç¼è¯gccä½ä¸ºäº¤åç¼è¯å¨](#appendix2)ã**
+### 4.1 ä½¿ç¨ GNU CC å·¥å
·é¾
+
+æ£å¦å大夿°å
æ ¸ä¸æ ·ï¼Lunaix æ¯ä¸ä¸ªæ··åäº C åæ±ç¼ç产ç©ãè¿å°±æå³çä½ å¾è¦ä½¿ç¨ä¸äºæ åçCç¼è¯å¨æ¥æå»ºLunaixãå¨è¿éï¼ææ¨èä½¿ç¨ GNU CC å·¥å
·é¾æ¥è¿è¡æå»ºãå 为Lunaix å¨ç¼åæ¶ä½¿ç¨äºå¤§éçGNU CC ç¸å
³ç¼è¯å¨å±æ§ä¿®é¥° (`__attribute__`) ãåè¥ä½¿ç¨å
¶ä»å·¥å
·é¾ï¼å¦LLVMï¼æå¯¹æ¤å°±ä¸è½ååºä»»ä½ä¿è¯äºã
-åè¥æ¡ä»¶æ»¡è¶³ï¼é£ä¹å¯ä»¥ç´æ¥æ§è¡`make all`è¿è¡æå»ºï¼å®æåå¯å¨çæç`build`ç®å½ä¸æ¾å°å¯å¼å¯¼çisoã
+å¦æä½ ä½¿ç¨çæ¯åºäº x86 æä»¤éçLinuxç³»ç»ï¼ä¸è®ºæ¯64ä½è¿æ¯32ä½ï¼**å
¶æ¬æºèªå¸¦çgcc就足以ç¼è¯Lunaix**ã å½ç¶äºï¼å¦æè¯´ä½ ç平尿¯å
¶ä»éx86çï¼ä½ ä¹å¯ä»¥æå®ä½¿ç¨æä¸ªé对x86_32çgccå¥ä»¶æ¥è¿è¡äº¤åç¼è¯ââå¨`make`æ¶éè¿`CX_PREFIX`å鿥æå®gccå¥ä»¶çåç¼ãå¦ä¸ä¾æç¤ºï¼æä»¬å¯ä»¥å¨ä»»æå¹³å°ä¸ï¼å¦risc-vï¼åç¬ä½¿ç¨ä¸ä¸ªé¢åx86_32çgccæ¥è¿è¡äº¤åç¼è¯ï¼
+
+```
+make CX_PREFIX=i686-linux-gnu- all
+```
+
+### 4.2 Dockeréå
+
+对äºå¼åç¯å¢ï¼æ¬é¡¹ç®ä¹æä¾äºDockeréåå°è£
ãå¼ç®±å³ç¨ï¼æ éé
ç½®ï¼é常éåæäººæææ¶è
ã详ç»ä½¿ç¨æ¹æ³è¯·è½¬å°ï¼[Lunaix OSDK项ç®](https://github.com/Minep/os-devkit)ã
+
+### 4.3 æå»ºé项
æ¬é¡¹ç®æ¯æçmakeå½ä»¤ï¼
-| å½ä»¤ | ç¨é |
-|---|---|
-| `make all` | æå»ºéåï¼`-O2`ï¼ |
-| `make all-debug` | æå»ºéåè°è¯ç¨çéåï¼`-Og`ï¼ |
-| `make run` | 使ç¨QEMUè¿è¡buildç®å½ä¸çéå|
-| `make debug-qemu` | æå»ºå¹¶ä½¿ç¨QEMUè¿è¡è°è¯ |
-| `make debug-bochs` | æå»ºå¹¶ä½¿ç¨Bochsè¿è¡è°è¯ |
-| `make debug-qemu-vscode` | ç¨äºvscodeæ´å |
-| `make clean` | å é¤buildç®å½ |
-
-## è¿è¡ä»¥åIssue
-
-è¿è¡è¯¥æä½ç³»ç»éè¦ä¸ä¸ªèæç£çéåï¼å¯ä»¥ä½¿ç¨å¦ä¸å½ä»¤å¿«éå建ä¸ä¸ªï¼
-
-```bash
-qemu-img create -f vdi machine/disk0.vdi 128M
+| å½ä»¤ | ç¨é |
+| ------------------------ | ----------------------------------------------- |
+| `make all` | æå»ºå
æ ¸ELFéå |
+| `make rootfs` | æå»ºæ ¹æä»¶ç³»ç»éåï¼å°ä¼å°è£
`usr/`ä¸çç¨åº |
+| `make clean` | å é¤æå»ºç¼åï¼ç¨äºéæ°æå»º |
+| `make config` | é
ç½®Lunaix |
+
+ä¸makeå½ä»¤é
å¥çç¯å¢åéï¼Lunaixçmakefileä¼èªå¨æ£æµè¿äºç¯å¢åéï¼ä»¥æ´æ¹æå»ºè¡ä¸º
+
++ `MODE={debug|release}` 使ç¨debugæ¨¡å¼æå»ºï¼-Ogï¼æè
release模å¼ï¼-O2ï¼
++ `ARCH=` 为æå®çæä»¤éæ¶æç¼è¯Lunaixã æä½¿ç¨çé
ç½®é项å为é宿¶æé»è®¤ï¼è¯¥ç¯å¢åé
+ åå¨çç®çå°±æ¯æ¹ä¾¿ç¨æ·è¿è¡å¿«éç¼è¯ï¼èæ éé»ç Lunaixçç§ç§é
置项ã
+
+### 4.4 Lunaixçåè½é
ç½®
+
+Lunaixæ¯ä¸ä¸ªå¯é
ç½®çå
æ ¸ï¼å
è®¸ç¨æ·å¨ç¼è¯åéæ©åºå½å
å«æç§»é¤çåè½ã
+
+使ç¨`make config`æ¥è¿è¡åºäºå½ä»¤è¡ç交äºé
ç½®ãéç¨TUIåç°ï¼ææç±»ä¼¼äºmenuconfig.
+
+妿å 为æç§åå ï¼TUIç颿 æ³åç°ï¼é£ä¹å°ä¼é»è®¤ä½¿ç¨shellå½¢å¼çåç°ï¼
+
+ææçé
置项æç
§ç±»ä¼¼äºæä»¶æ çå½¢å¼ç»ç»ï¼å¦å个é
置项为ä¸ä¸ªâæä»¶âï¼å¤ä¸ªé
ç½®é¡¹ç»æçé
ç½®ç»ä¸ºä¸ä¸ªç®å½ï¼åç°å½¢å¼ä¸ºæ¹æ¬å·`[]`å
裹起æ¥ç项ç®ãå¨æç¤ºç¬¦ä¸è¾å
¥`usage`å¹¶å车å¯ä»¥æ¥çå
·ä½çä½¿ç¨æ¹æ³ã
+
+ä¸ä¸ªæå¸¸ç¨çé
ç½®å¯è½å°±æ¯`architecture_support/arch`äºï¼ä¹å°±æ¯é
ç½®Lunaixæé¢åçæä»¤éãæ¯å¦ï¼ç¼è¯ä¸ä¸ªå¨x86_64å¹³å°ä¸è¿è¡çLunaixï¼å¨æç¤ºç¬¦ä¸è¾å
¥ï¼**注æçå·ä¸¤ä¾§çç©ºæ ¼ï¼è¿æ¯ä¸è½çç¥ç**ï¼ï¼
+
```
+/architecture_support/arch = x86_64
+```
+
+ä¹åè¾å
¥`exit`ä¿åå¹¶éåºãè忣叏ç¼è¯ã
-å¦æä½ æ³è¦ä½¿ç¨å«çç£çéåï¼éè¦ä¿®æ¹`configs/make-debug-tool`
+### 4.5 设置å
æ ¸åæ°
+
+å¨ make çæ¶åéè¿`CMDLINE`åéå¯ä»¥è®¾ç½®å
æ ¸å¯å¨åæ°å表ã该å表å¯ä»¥å
å«å¤ä¸ªåæ°ï¼éè¿ä¸ä¸ªæå¤ä¸ªç©ºæ ¼æ¥åå²ãæ¯ä¸ªåæ°å¯ä»¥ä¸ºé®å¼å¯¹ `=` æè
æ¯å¼å
³æ å¿ä½ ``ãç®å Lunaix æ¯æä»¥ä¸åæ°ï¼
+
++ `console=` 设置系ç»ç»ç«¯çè¾å
¥è¾åºè®¾å¤ï¼tty设å¤ï¼ãå
¶ä¸ `` æ¯è®¾å¤æä»¶è·¯å¾ ï¼æ³¨æï¼è¿éçè®¾å¤æä»¶è·¯å¾æ¯é对Lunaixï¼èéLinuxï¼ãå
³äºLunaixOSè®¾å¤æä»¶ç³»ç»çä»ç»å¯åè Lunaix Wikiï¼WIPï¼
++ ï¼åè 4.6ï¼
+
+妿`CMDLINE`æªæå®ï¼åå°ä¼è½½å
¥é»è®¤åæ°ï¼
-æ¾å°è¿ä¸è¡ï¼
```
--drive id=disk,file="machine/disk0.vdi",if=none \
+console=/dev/ttyFB0
```
-ç¶åæ`machine/disk0.vdi`æ¿æ¢æä½ çç£çè·¯å¾ã
+å
¶ä¸ï¼`/dev/ttyFB0` æååºäºVGAææ¬æ¨¡å¼çtty设å¤ï¼ä¹å°±æ¯å¹³æ¶å¯å¨QEMUæ¶çå°çé»è²çªå£ã
+
+å½ç¶ï¼è¯»è
ä¹å¯ä»¥ä½¿ç¨ `/dev/ttyS0` æ¥ä½ä¸ºé»è®¤tty设å¤ï¼æ¥éªè¯ Lunaix ççµæ´»æ§ä¸å
¼å®¹æ§ãè¯¥è·¯å¾æå第ä¸ä¸ªä¸²å£è®¾å¤ãå¯ä»¥éè¿telnetåè®®å¨`12345`端å£ä¸è¿è¡è®¿é®ââ端å£å·å¯ä»¥èªè¡ä¿®æ¹QEMUå¯å¨åæ°ï¼ä½äºï¼`makeinc/qemu.mkinc`ï¼æ¥åæ´ã
+
+**注æï¼** æ ¹æ®æä½ç³»ç»åé®çå¸å±çä¸åï¼telnet客æ·ç«¯å¯¹ä¸äºå
³é®é®ä½çæ å°ï¼å¦éæ ¼ï¼å车ï¼å¯è½ææå·®å«ï¼å¦æäºçæ¬çLinuxä¼å°éæ ¼é®æ å°ä¸º`0x7f`ï¼ä¹å°±æ¯ASCIIç``å符ï¼èéæä»¬çç¥`0x08`ï¼ãå¦æè¯»è
æ³è¦éè¿ä¸²å£æ¹å¼æç©Lunaixï¼è¯·ä¿®æ¹`usr/init/init.c`éé¢çç»ç«¯åå§å代ç ï¼å°`VERASE`设置为æ£ç¡®çæ å°ï¼ä¿®æ¹æ¹å¼å¯ä»¥åè POSIX termios çä½¿ç¨æ¹å¼ãç±äºLunaixçç»ç«¯æ¥å£çå®ç°æ¯å®å
¨å
¼å®¹POSIXçï¼è¯»è
å¯ä»¥ç´æ¥å»æ¥é
Linuxèªå¸¦ç帮å©`man termios`ï¼æ éä½ä»»ä½ç转æ¢ï¼
+
+
+### 4.6 Lunaixçå¯å¨
+
+ç±äº Lunaix çå®ä½æ¯å
æ ¸ã为äºé¿å
太å¤çç¼è¯æ¶çåç½®è¦æ±ï¼åæ¶ä¸ºäºæé«çµæ´»æ§ï¼æä»¬ç§»é¤äºisoæä»¶çå°è£
åè½ãç®åç Lunaix å°åªä¼ç¼è¯åºä¸ä¸ª ELF æ ¼å¼çäºè¿å¶æä»¶ãç¨æ·å¯ä»¥æ ¹æ®èªå·±çå好ï¼ä½¿ç¨çä¸åçæ¹å¼ï¼ä¸åç bootloader æ¥å¼å¯¼ Lunaix.
-æå¾å¤åæ³å»å建ä¸ä¸ªèæç£çï¼æ¯å¦[qemu-img](https://qemu-project.gitlab.io/qemu/system/images.html)ã
+为äºè½å¤ä½¿å¾ Lunaix è½å¤æ£ç¡®çå¯å¨ï¼ç¨æ·å¿
须设置以ä¸å
æ ¸åæ°ï¼
-å¨å¤§å¤æ°æ
åµä¸ï¼æé½ä¼å°½éä¿è¯æ¬æºè¿è¡æ 误åï¼pushå°ä»åºä¸ãåæ¶ï¼è¯¥ç³»ç»æ¯ç»è¿æ¬æºæµè¯ï¼è½å¤å¨Bochsï¼QEMU (`= 7.0`)ï¼VirtualBox䏿£å¸¸çè¿è¡ï¼ææ¶æ²¡è¯è¿çæºï¼ã妿åç°å¨ä½¿ç¨`make all`ä¹åï¼èææºä¸è¿è¡æ¥éï¼åä¸è¬æ¯ç¼è¯å¨ä¼åé®é¢ãè¿ä¸ªé®é¢ç¬è
ä¸è¬å¾å¿«å°±ä¼ä¿®å¤ï¼å¦æä½ 使ç¨å«ççæ¬çgccï¼ç¬è
çæ¬11.2ï¼ï¼åºç°äºæ¤é®é¢ï¼æ¬¢è¿æissueã请åè[éå½3ï¼Issueçæäº¤](#appendix3)
++ `rootfs=` æææ ¹ç®å½è®¾å¤ï¼å¼ä¸ºè®¾å¤æä»¶è·¯å¾ï¼æåå
嫿 ¹æä»¶ç³»ç»çç£ç设å¤ï¼å¦`/dev/block/sda`ã Lunaixå°ä¼å¨å¯å¨ä¹åèªå¨æå¨è¯¥æä»¶ç³»ç»å°æ ¹ç®å½ãç¼ºå°æ¤é项 Lunaix å°ä¼æç»å¯å¨ï¼å¹¶è¿å
¥ kernel panic ï¼å¨ Lunaix çä¸çéï¼è¿ä¸ªè¢«ç§°ä¹ä¸º Nightmare Moon arrival ï¼
++ `init=` ææ init ç¨åºçä½ç½®ï¼è¯¥ç¨åºå¿
é¡»æ¾å¨ `rootfs` ä¸ãæ¹é项为å¯é设置ï¼å
¶é»è®¤å¼ä¸º `/init`ã init ç¨åºæ¯ Lunaix å¨å¯å¨åæè¿è¡ç第ä¸ä¸ªç¨åºã
-ä¸é¢ååºä¸äºå¯è½ä¼åºç°çé®é¢ã
+### 4.7 æµè¯ä¸ä½éª Lunaix
-#### é®é¢#1ï¼ QEMUä¸8042æ§å¶å¨æç¤ºæ¾ä¸å°ã
-è¿æ¯QEMUé
ç½®ACPIæ¶çä¸ä¸ªbugï¼å¨7.0.0çä¸ä¿®å¤äºã
+æ³è¦å¿«éä½éªï¼è¯·è·é以䏿¥éª¤ï¼
-#### é®é¢#2ï¼å¤è¿ç¨è¿è¡æ¶ï¼å¶å°ä¼åºç°General Protectioné误ã
+1. å³å®ä¸ä¸ªä½ æ³è¦ä½éªçæ¶æï¼å¦ `x86_64`ã ï¼æ¯æï¼`x86_64`, `i386`ï¼ä¸ºäºåè¿°æ¹ä¾¿ï¼è¿ä¸ªæ¶æå¨ä¸æè¢«æä»£ä¸º``
+2. æ£æ¥ä½ æ¯å¦å®è£
äºï¼ `qemu-system-`ï¼`gdb`ï¼`python3`ï¼`telnet`ï¼`gcc`
+3. è¿è¡ `make ARCH= user` æ¥ç¼è¯èªå¸¦çç¨æ·ç¨åº
+4. è¿è¡ `make ARCH= rootfs` æ¥æå
æ ¹æä»¶ç³»ç»éåãï¼éè¦æ¬æºç³»ç»æ¯æ `dd`ï¼`mkfs.ext2`, `mount -o loop`, `mktemp`ï¼
+5. è¿è¡ `ARCH= live_debug.sh` æ¥å¯å¨
-è¿å¾å¤§æ¦çæ¯åºç°äºç«ææ¡ä»¶ãè½ç¶æ¯ç¸å½ä¸å¯è½çãä½å¦æåºç°äºï¼è¿æ¯è¯·æissueã
+è¯¥èæ¬èªå¨æç
§é»è®¤çé项æå»ºLunaixï¼èåè°ç¨ `scripts/qemu.py` æ ¹æ®é
ç½®æä»¶çæQEMUå¯å¨åæ°ï¼é
ç½®æä»¶ä½äº`scripts/qemus/`ï¼
-#### é®é¢#3ï¼Bochsè¿è¡æ¶ï¼æç¤ºæ¾ä¸å°AHCIæ§å¶å¨
+ç±äºè¯¥èæ¬ç主è¦ç¨éæ¯æ¹ä¾¿ä½è
è¿è¡è°è¯ï¼æä»¥å¨QEMUçªå£æå¼åè¿éè¦è¿è¡ä»¥ä¸å¨ä½ï¼
-æ£å¸¸ï¼**å 为Bochs䏿¯æSATA**ã请使ç¨QEMUæVirtualBoxã
+1. 使ç¨telnetè¿æ¥å°`localhost:12345`ï¼è¿éæ¯Lunaixè¿è¡æ åè¾å
¥è¾åºæä½¿ç¨çUARTæ å°ï¼QEMU为guestæä¾UARTå®ç°ï¼å¹¶å°å
¶å©ç¨telnetåè®®éå®åå°å®¿ä¸»æºï¼
+2. å¨GDBçªå£ä¸è¾å
¥`c`ç¶ååè½¦ï¼æ¤æ¶Lunaixå¼å§è¿è¡ãè¿æ ·åçç®çæ¯å
许å¨QEMUè¿è¡æ¨¡æåï¼äºå
æå¥½æå
´è¶£çæç¹ã
-## åèæç¨
+## 5. è¿è¡ï¼åæ¯ä»¥å Issue
-**没æï¼ï¼** æ¬æç¨ä»¥å该æä½ç³»ç»å为ååï¼æ²¡æåºäºä»»ä½å¸é¢ä¸ç°è¡çæä½ç³»ç»å¼åæç¨ï¼ä¸å¹¶éæ¯åºäºä»»ä½ç弿ºå
æ ¸çäºæ¬¡å¼åã
+### 5.1 代ç ç¨³å®æ§
+
+䏻忝ä¸è¬æ¯ç¨³å®çãå 为å¨å¤§å¤æ°æ
åµä¸ï¼æé½ä¼å°½éä¿è¯æ¬æºè¿è¡æ 误åï¼pushå°è¯¥åæ¯ä¸ãæææ£å¨å¼åçåè½è¯·åèå½åæ´»è·çPull Requestã
+
+妿䏻忝çè¿è¡åºç°äºæ¤é®é¢ï¼æ¬¢è¿æissueã请åè[éå½3ï¼Issueçæäº¤](#appendix3)
+
+## 6. è°è¯ Lunaix å
æ ¸
+
+é¤äº[éå½4ï¼ä¸²å£GDBè¿ç¨è°è¯](#appendix4)æè¿°çä¸ç§ç¨äºå®æºè°è¯çæ¹å¼ä»¥å¤ãLunaixOSè¿æä¾äºLunaDBGè°è¯å¥ä»¶ãè¿æ¯ä¸ä¸ªGDB客æ·ç«¯æä»¶ï¼å
å«äºå¯¹GDBåçå½ä»¤éçä¸äºæ©å
ï¼ä¸»è¦ç¨äºæ¹åä¸ç®åå
æ ¸è°è¯çè¿ç¨ãç®åå
å«ä»¥ä¸å 个å½ä»¤ï¼
+
++ `vmrs [pid]` å举è¿ç¨``çå
ååºåå¾ï¼Memory Regionsï¼ï¼å¦æ``æªæå®ï¼åé»è®¤ä¸ºæ£å¨è¿è¡çè¿ç¨ï¼smp=1ï¼ã
++ `proc [pid]` æå°è¿ç¨``çè¿ç¨æ§å¶åç¶æï¼å¦æ``æªæå®ï¼åé»è®¤ä¸ºæ£å¨è¿è¡çè¿ç¨ï¼smp=1ï¼ã
++ `sched [-l]` æ¥çè°åº¦å¨ä¿¡æ¯ï¼æ¥åä¸¤ä¸ªåæ°ï¼
+ + `threads` æå°ææä¾ç¶å¨è°åº¦å¨ä¸ææ³¨åç线ç¨
+ + `procs` æå°ææä¾ç¶å¨è°åº¦å¨ä¸ææ³¨åçè¿ç¨
+ + å¯éå¼å
³ `-l` å³å®æ¯å¦ä»¥é¿å表æå°ï¼æ´è¯¦ç»çä¿¡æ¯ï¼
+
+该æä»¶å¯ä»¥éè¿è¿è¡ä»¥ä¸å½ä»¤æ¥è¿è¡å®è£
ï¼
+
+```shell
+./scripts/gdb/install_lunadbg
+```
+
+## 7. åèæç¨
+
+#### 没æï¼ï¼
+
+æ¬æç¨ä»¥å该æä½ç³»ç»çææçæ¶æè®¾è®¡ä¸å®ç°**å为åå**ã
+
+对æ¤ï¼ä½è
å¯ä»¥ä¿è¯ï¼è¯¥é¡¹ç®æ¯åå°äºä¸ä¸ª âæ²¡æâï¼
+
++ **没æ** åèä»»ä½ç°è¡çï¼å
³äºæä½ç³»ç»å¼åçï¼æç¨æä¹¦ç±ã
++ **没æ** åèä»»ä½å¼æºå
æ ¸çæºä»£ç ï¼å
æ¬Linuxï¼
++ **没æ** åºäºä»»ä½å¼æºå
æ ¸çäºæ¬¡å¼åè¡ä¸ºã
为äºå¶ä½LunaixOSï¼ä½è
èè´¹å¤§éæ¶é´åç²¾åé»ç ææ¯ææ¡£ï¼æåï¼ç论书ç±ä»¥åç°è¡å·¥ä¸æ åï¼ä»èå°½éä¿è¯äºç¥è¯ç䏿æ§ãï¼è¿æ ·ä¸æ¥ï¼è¯»è
åå¬ä¼ä»¬ä¹ç®æ¯æ¿å°äºäºæçç¥è¯ï¼è䏿¯ä¸æï¼åæï¼çè³næçç¥è¯ï¼ã
@@ -109,6 +241,7 @@ qemu-img create -f vdi machine/disk0.vdi 128M
å½ç¶ï¼æ¨ä¹å¯ä»¥åè以ä¸å表æ¥äºè§£ç°é¶æ®µçLunaixOSé½ä½¿ç¨äºåªäºèµæï¼æ¬å表ä¼éçå¼åè¿åº¦æ´æ°ï¼ï¼
#### æåï¼æ åï¼ææ¯ææ¡£
+
+ [Intel 64 and IA-32 Architecture Software Developer's Manual (Full Volume Bundle)](https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html)
+ [ACPI Specification (version 6.4)](https://uefi.org/sites/default/files/resources/ACPI_Spec_6_4_Jan22.pdf)
+ IBM PC/AT Technical Reference
@@ -120,31 +253,36 @@ qemu-img create -f vdi machine/disk0.vdi 128M
+ PCI Express Base Specification, Revision 1.1
+ PCI Firmware Specification, Revision 3.0
+ Serial ATA - Advanced Host Controller Interface (AHCI), Revision 1.3.1
-+ Serial ATA: HIgh Speed Serialized AT Attachment, Revision 3.2
++ Serial ATA: High Speed Serialized AT Attachment, Revision 3.2
+ SCSI Command Reference Manual
+ ATA/ATAPI Command Set - 3 (ACS-3)
++ [ECMA-119 (ISO9660)](https://www.ecma-international.org/publications-and-standards/standards/ecma-119/)
++ Rock Ridge Interchange Protocol (RRIP: IEEE P1282)
++ System Use Sharing Protocol (SUSP: IEEE P1281)
++ Tool Interface Standard (TIS) Portable Formats Specification (Version 1.1)
**å
责声æï¼PCIç¸å
³çæ åæç»è§£éæå½PCI-SIGææãæ¤å¤æä¾ç坿¬ä»
ä¾ä¸ªäººå¦ä¹ 使ç¨ãä»»ä½åç¨ç®çé¡»åPCI-SIGè´ä¹°ã**
#### ç论书ç±
+
+ *Computer System - A Programmer's Perspective Third Edition (CS:APP)* (Bryant, R & O'Hallaron, D)
+ *Modern Operating System* (Tanenbaum, A)
-+ ãæ±ç¼è¯è¨ãï¼çç½ï¼ - ç¨äºå
¥é¨Intelè¯æ³çx86æ±ç¼ï¼å¯¹äºAT&Tè¯æ³ï¼æ¨èé
读CS:APPï¼
-+ ~~ãå¾®æºåç䏿¥å£ææ¯ã - ç¨äºå¤§è´äºè§£x86æ¶æçå¾®æºä½ç³»ï¼æ´å ç»è´çäºè§£å¯ä»¥é
读Intel Manualï¼~~ ï¼å·²è¿æ¶ï¼æ¨èé
读CS:APPï¼
#### ç½ç«
-+ [OSDev](https://wiki.osdev.org/Main_Page) - æä¸æå
«çåèï¼å¾å¤è¿æ¥äººçç»éªãä½è
主è¦ç¨äºä¸å¤èµææ¥è¯¢ä»¥åæ¶éï¼ææ¯æç®ï¼æåï¼æ åçç²ç¥æ»ç»ï¼ä»¥åå¼åç¯å¢/å·¥å
·é¾çæå»ºã
+
++ [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设å¤ç¼å·æ¥è¯¢
#### å
¶ä»
+
+ Linux Manual - ç¨äºæ¥è¯¢*nix APIçä¸äºå
·ä½è¡ä¸ºã
+## éå½1ï¼å®ç°ç POSIX ç³»ç»æ¥å£
-## éå½1ï¼æ¯æçç³»ç»è°ç¨
+LunaixOS æä¾å¯¹ä»¥ä¸POSIXçç³»ç»æ¥å£çå®ç°ãå
æ ¸å®ä¹çç³»ç»è°ç¨å·å¯ä»¥åè [LunaixOSç³»ç»è°ç¨è¡¨](docs/lunaix-syscall-table.md) ã
-**Unix/Linux/POSIX**
1. `sleep(3)`
1. `wait(2)`
1. `waitpid(2)`
@@ -158,7 +296,7 @@ qemu-img create -f vdi machine/disk0.vdi 128M
1. `_exit(2)`
1. `sigreturn(2)`
1. `sigprocmask(2)`
-1. `signal(2)`
+1. `sigaction(2)`
1. `kill(2)`
1. `sigpending(2)`
1. `sigsuspend(2)`
@@ -166,19 +304,19 @@ qemu-img create -f vdi machine/disk0.vdi 128M
2. `write(2)`
2. `open(2)`
2. `close(2)`
-2. `mkdir(2)`â»
+2. `mkdir(2)`
2. `lseek(2)`
2. `readdir(2)`
-2. `readlink(2)`â»
-2. `readlinkat(2)`â»
-2. `rmdir(2)`â»
-2. `unlink(2)`â»
-2. `unlinkat(2)`â»
+2. `readlink(2)`
+2. `readlinkat(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)`â»
+2. `symlink(2)`
2. `chdir(2)`
2. `fchdir(2)`
2. `getcwd(2)`
@@ -189,90 +327,45 @@ qemu-img create -f vdi machine/disk0.vdi 128M
2. `setxattr(2)`â»
2. `fgetxattr(2)`â»
2. `fsetxattr(2)`â»
+2. `ioctl(2)`
+2. `getpgid(2)`
+2. `setpgid(2)`
+2. `mmap(2)`
+2. `munmap(2)`
+2. `execve(2)`
+3. `poll(2)` (via `pollctl`)
+3. `epoll_create(2)` (via `pollctl`)
+3. `epoll_ctl(2)` (via `pollctl`)
+3. `epoll_wait(2)` (via `pollctl`)
+4. `pthread_create`
+4. `pthread_self`
+4. `pthread_exit`
+4. `pthread_join`
+4. `pthread_kill`
+4. `pthread_detach`
+4. `pthread_sigmask`
-**LunaixOSèªæ**
-
-1. `yield`
-2. `geterrno`
-3. `realpathat`
( **â»**ï¼è¯¥ç³»ç»è°ç¨ææªç»è¿æµè¯ )
-## éå½2ï¼ç¼è¯gccä½ä¸ºäº¤åç¼è¯å¨
-
-注æï¼gccéè¦ä»æºç æå»ºï¼å¹¶é
置为交åç¼è¯å¨ï¼å³ç®æ å¹³å°ä¸º`i686-elf`ãä½ å¯ä»¥ä½¿ç¨æ¬é¡¹ç®æä¾ç[èªå¨åèæ¬](slides/c0-workspace/gcc-build.sh)ï¼è¿å°ä¼æ¶µçgccåbinutilsæºç çä¸è½½ï¼é
ç½®åç¼è¯ï¼æ²¡ä»ä¹æ¶é´å»æç£¨èæ¬ï¼ç®ååªç¥éå¨ç¬è
çUbuntuç³»ç»ä¸å¯ä»¥è¿è¡ï¼ã
-
-**æ¨è**æå¨ç¼è¯ã以ä¸ç¼è¯æ¥éª¤æ¬è¿èªï¼https://wiki.osdev.org/GCC_Cross-Compiler
-
-**é¦å
å®è£
æå»ºä¾èµé¡¹ï¼**
-```bash
-sudo apt update &&\
- apt install -y \
- build-essential \
- bison\
- flex\
- libgmp3-dev\
- libmpc-dev\
- libmpfr-dev\
- texinfo
-```
+## éå½2ï¼Issueçæäº¤
-**å¼å§ç¼è¯ï¼**
-1. è·å[gcc](https://ftp.gnu.org/gnu/gcc/)å[binutils](https://ftp.gnu.org/gnu/binutils)æºç
-2. è§£åï¼å¹¶å¨å级ç®å½ä¸ºgccåbinutilæ°å»ºä¸é¨çbuildæä»¶å¤¹
+åè¥Lunaixçè¿è¡åºç°ä»»ä½é®é¢ï¼è¿è¯·æç
§ä»¥ä¸çæè¿°ï¼å¨Issueé颿ä¾è¯¦ç»çä¿¡æ¯ã
-ç°å¨åè®¾ä½ çç®å½ç»æå¦ä¸ï¼
-```
-+ folder
- + gcc-src
- + binutils-src
- + gcc-build
- + binutils-build
-```
-
-3. ç¡®å®gccåbinutilå®è£
çä½ç½®ï¼å¹¶è®¾ç½®ç¯å¢åéï¼`export PREFIX=<å®è£
è·¯å¾>` ç¶å设置PATHï¼ `export PATH="$PREFIX/bin:$PATH"`
-4. è®¾ç½®ç®æ å¹³å°ï¼`export TARGET=i686-elf`
-5. è¿å
¥`binutils-build`è¿è¡é
ç½®
-```bash
-../binutils-src/configure --target="$TARGET" --prefix="$PREFIX" \
- --with-sysroot --disable-nls --disable-werror
-```
-ç¶å `make && make install`
-
-6. ç¡®ä¿ä¸è¿°ç`binutils`å·²ç»æ£å¸¸å®è£
ï¼æ§è¡ï¼`which i686-elf-as`ï¼åºè¯¥ä¼ç»åºä¸ä¸ªä½äºä½ å®è£
ç®å½ä¸çè·¯å¾ã
-6. è¿å
¥`gcc-build`è¿è¡é
ç½®
-```bash
-../gcc-src/configure --target="$TARGET" --prefix="$PREFIX" \
- --disable-nls --enable-languages=c,c++ --without-headers
-```
-ç¶åç¼è¯å®è£
ï¼å峿§è½ï¼å¤§çº¦10~20åéï¼ï¼
-```bash
-make all-gcc &&\
- make all-target-libgcc &&\
- make install-gcc &&\
- make install-target-libgcc
-```
-8. éªè¯å®è£
ï¼æ§è¡`i686-elf-gcc -dumpmachine`ï¼è¾åºåºè¯¥ä¸ºï¼`i686-elf`
-
-**å°æ°ç¼è¯å¥½çGCCæ°¸ä¹
æ·»å å°`PATH`ç¯å¢åé**
++ å¯ç¨äºå¤ç°é®é¢çæè¿°åæå¼ï¼å¦Lunaixè¿è¡å¹³å°ç软硬件é
ç½®ï¼
++ é误çç¶æè¿°
++ LunaixOSå¨panicæ¶æå°çè°è¯ä¿¡æ¯ï¼å¦æ æ³å¤å¶ï¼å¯ä»¥æªå¾ï¼
-è½ç¶è¿æ¯ä¸ä¸ªå¸¸è¯æ§çæä½ï¼ä½èèå°è®¸å¤äººé½ä¼å¿½ç¥è¿ä¸ä¸ªé¢å¤çæ¥éª¤ï¼å¨è¿éç¹æ¤ååºæç¤ºã
+## éå½3ï¼ä¸²å£GDBè¿ç¨è°è¯
-è¦æ³å®ç°è¿ä¸ç¹ï¼åªéè¦å¨shellçé
ç½®æä»¶çæ«å°¾æ·»å ï¼`export PATH="<ä¸è¿°çå®è£
è·¯å¾>/bin:$PATH"`ã
+**ï¼è¯¥åè½æ£å¨éæï¼ç®åä¸å¯ç¨ï¼**
-è¿ä¸ªé
ç½®æä»¶æ¯åå³äºä½ 使ç¨çshellï¼å¦zshå°±æ¯`${HOME}/.zshrc`ï¼bash忝`${HOME}/.bashrc`ï¼æè
ä½ å«éº»ç¦çï¼æå¾åºåï¼ä½ ä¹å¯ä»¥ç´æ¥ä¿®æ¹å
¨å±ç`/etc/profile`æä»¶ï¼ä¸å³æ°¸é¸ï¼ä½ä¸æ¨èè¿æ ·åï¼ã
+LunaixOSå
æ ¸éæäºæåºæ¬çGDBè¿ç¨è°è¯æå¡å¨ãå¯éè¿ä¸²å£COM1å¨9600æ³¢ç¹çä¸ä¸ä¹å»ºç«é¾æ¥ã使¯ï¼å¨å°GDBä¸å
æ ¸é¾æ¥èµ·æ¥ä¹åï¼è¿éè¦è®©å
æ ¸å¤å¨è°è¯æ¨¡å¼ä¸ã
-è³äºå
¶ä»çæ
åµï¼ç±äºè¿ä¸ªæ¥éª¤å
¶å®å¨ç½ä¸æ¯éå¤å¯æ¥çï¼æä»¥å°±ä¸å¨è¿éèµè¿°äºã
+è¦è¿å
¥è°è¯æ¨¡å¼ï¼éè¦å¾ä¸²å£ï¼æ³¢ç¹çå¦ä¸ï¼åå
¥åè串 `0x40` `0x63` `0x6D` `0x63`ãæ¤æ¶ï¼å¦æå±å¹åºé¨åºç°ä¸æ¡å红è²èæ¯ç`DEBUG` åæ ·ï¼é£ä¹å°±è¯´æLunaixOSå·²å¤å¨è°è¯æ¨¡å¼ä¸ã
-## éå½3ï¼Issueçæäº¤
+注æï¼å¨è¿ä¸ªæ¶åï¼LunaixOSä¼å¼å§å¨`COM1`ä¸çå¬GDBå议信æ¯ï¼å¹¶ä¸æåä¸åçæ´»å¨ï¼å¦è°åº¦ï¼ä»¥å对å¤é¨ä¸æçä¸åååºï¼ãç¨æ·æ¤æ¶éè¦å°GDBä¸å
¶æè½½ï¼å¹¶ä½¿ç¨GDBç工使µæ¥æç¤ºå
æ ¸ä¸ä¸æ¥çå¨ä½ã
-ç±äºç®åLunaixOS没æä¸ä¸ªå®å强大çå
æ ¸è¿½è¸ªåè½ãåè¥Lunaixçè¿è¡åºç°ä»»ä½é®é¢ï¼è¿è¯·æç
§ä»¥ä¸çæè¿°ï¼å¨Issueé颿ä¾è¯¦ç»çä¿¡æ¯ã
+å¨ç®åï¼ä¸ºäºé²æ¢ä»£ç è¿äºèè¿ï¼LunaixOSå®ç°çæ¯GDBè¿ç¨åè®®è¦æ±çæå°æå¡ç«¯å½ä»¤åéï¼`g`, `G`, `p`, `P`, `Q`, `S`, `k`, `?`, `m`, `M`, `X`ã足以满足大é¨åçè°è¯éæ±ã
-æå¥½æä¾ï¼
-+ å¯ç¨äºå¤ç°é®é¢çæè¿°åæå¼ï¼å¦Lunaixè¿è¡å¹³å°ç软硬件é
ç½®ï¼
-+ é误çç¶æè¿°
-+ ï¼å¦å¯è½ï¼è¿è¡æªå¾
-+ éè¯¯æ¶æ¯ï¼å¦æç»åºï¼
-+ å¯åå¨ç¶æçdump
-+ ï¼å¦å¯è½ï¼æä¾é误åçæ¶ï¼EIPéè¿çæä»¤ï¼ç²¾ç¡®å°å½æ°ï¼ãå¦æä½¿ç¨`make all-debug`ï¼ä¼æä¾`build/kdump.txt`ï¼ä½ å¯ä»¥å¨è¿éé¢å®ä½ãæè
ä¹å¯ä»¥ç´æ¥`objdump`
-+ ï¼å¦å¯è½ï¼èæå
åæ å°ä¿¡æ¯ï¼QEMUä¸å¯ä½¿ç¨`info mem`æ¥çï¼ã
\ No newline at end of file
+å½ç»æè°è¯çæ¶åï¼è¯·ä½¿ç¨GDBç`kill`æä»¤è¿è¡è¿æ¥çæå¼ã注æï¼è¿ä¸ªæä»¤ä¼ä½¿å¾LunaixOSæ¢å¤æææåçæ´»å¨ï¼è¿å
¥æ£å¸¸çè¿è¡åºåï¼ä½å¹¶ä¸ä¼éåºè°è¯æ¨¡å¼ãGDBçæè½½è¯·æ±ä¾ç¶å¨LunaixOSä¸äº«ææé«ä¼å
æã妿éè¦éåºè°è¯æ¨¡å¼ï¼éè¦å¾ä¸²å£åå
¥åè串ï¼`0x40` `0x79` `0x61` `0x79`ã