X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/afa79169f3bfa3212ed099456200d308a26e078d..50cc83db21e08850cb869b02f24ef19cf52d32d5:/README.md
diff --git a/README.md b/README.md
index 1799f1e..aa08848 100644
--- a/README.md
+++ b/README.md
@@ -22,11 +22,21 @@ LunaixOS - ä¸ä¸ªç®åçï¼è¯¦ç»çï¼POSIXå
¼å®¹çï¼ä½æ¿ï¼ï¼ï¼å¸¦æ
+ å
å管ç䏿éå页ï¼Demand Pagingï¼
+ é®çè¾å
¥
+ å¤è¿ç¨
-+ 17个常è§çLinux/POSIXç³»ç»è°ç¨ï¼[éå½1](#appendix1)ï¼
++ 47个常è§çLinux/POSIXç³»ç»è°ç¨ï¼[éå½1](#appendix1)ï¼
+ ç¨æ·æ¨¡å¼
+ ä¿¡å·æºå¶
+ PCI 3.0
+ PCIe 1.1 (WIP)
++ Serial ATA AHCI
++ æä»¶ç³»ç» (WIP)
++ è¿ç¨GDB串å£è°è¯ (COM1@9600Bd)
+
+å·²ç»æµè¯è¿çç¯å¢ï¼
+
++ QEMU (>=7.0.0)
++ Bochsï¼SATAåè½ä¸æ¯æï¼
++ Virtualbox
++ Dell G3 3779
## ç®å½ç»æ
@@ -53,7 +63,8 @@ LunaixOS - ä¸ä¸ªç®åçï¼è¯¦ç»çï¼POSIXå
¼å®¹çï¼ä½æ¿ï¼ï¼ï¼å¸¦æ
æ¬é¡¹ç®æ¯æçmakeå½ä»¤ï¼
| å½ä»¤ | ç¨é |
|---|---|
-| `make all` | æå»ºéåï¼`-O2`ï¼ |
+| `make all` | æå»ºéåï¼`-O1`ï¼ |
+| `make instable` | æå»ºéåï¼`-O2`ï¼**â»** |
| `make all-debug` | æå»ºéåè°è¯ç¨çéåï¼`-Og`ï¼ |
| `make run` | 使ç¨QEMUè¿è¡buildç®å½ä¸çéå|
| `make debug-qemu` | æå»ºå¹¶ä½¿ç¨QEMUè¿è¡è°è¯ |
@@ -61,9 +72,28 @@ LunaixOS - ä¸ä¸ªç®åçï¼è¯¦ç»çï¼POSIXå
¼å®¹çï¼ä½æ¿ï¼ï¼ï¼å¸¦æ
| `make debug-qemu-vscode` | ç¨äºvscodeæ´å |
| `make clean` | å é¤buildç®å½ |
+**â»ï¼ç±äºå¨`-O2`模å¼ä¸ï¼GCCä¼è¿è¡å¤§éçä¼åï¼è¿å¯¼è´LunaixOSä¼åºç°ä¸äºé叏奿ªã离谱çbugï¼ä»èå½±åå°åºæ¬è¿è¡ãè°è¯è¿äºbugéè¦å¤§éçæ±æ°´ä¸æ¶é´ï¼å±äºæ¥åç»´æ¤çä»»å¡ãæä»¥ï¼å¨ç®åï¼LunaixOSå°é»è®¤æå¤§çä¼åç¨åº¦è®¾ç½®ä¸ºæ¯è¾å®å
¨ç`-O1`ã`make instable`ä»
ç¨äºæ¹ä¾¿æ¥åç对该é®é¢çè¿ä¸æ¥è°è¯ã**
+
## è¿è¡ä»¥åIssue
-å¨å¤§å¤æ°æ
åµä¸ï¼æé½ä¼å°½éä¿è¯æ¬æºè¿è¡æ 误åï¼pushå°ä»åºä¸ãåæ¶ï¼è¯¥ç³»ç»æ¯ç»è¿æ¬æºæµè¯ï¼è½å¤å¨Bochsï¼QEMU (`= 7.0`)ï¼VirtualBox䏿£å¸¸çè¿è¡ï¼ææ¶æ²¡è¯è¿çæºï¼ã妿åç°å¨ä½¿ç¨`make all`ä¹åï¼èææºä¸è¿è¡æ¥éï¼åä¸è¬æ¯ç¼è¯å¨ä¼åé®é¢ãè¿ä¸ªé®é¢ç¬è
ä¸è¬å¾å¿«å°±ä¼ä¿®å¤ï¼å¦æä½ 使ç¨å«ççæ¬çgccï¼ç¬è
çæ¬11.2ï¼ï¼åºç°äºæ¤é®é¢ï¼æ¬¢è¿æissueã请åè[éå½3ï¼Issueçæäº¤](#appendix3)
+è¿è¡è¯¥æä½ç³»ç»éè¦ä¸ä¸ªèæç£çéåï¼å¯ä»¥ä½¿ç¨å¦ä¸å½ä»¤å¿«éå建ä¸ä¸ªï¼
+
+```bash
+qemu-img create -f vdi machine/disk0.vdi 128M
+```
+
+å¦æä½ æ³è¦ä½¿ç¨å«çç£çéåï¼éè¦ä¿®æ¹`configs/make-debug-tool`
+
+æ¾å°è¿ä¸è¡ï¼
+```
+-drive id=disk,file="machine/disk0.vdi",if=none \
+```
+
+ç¶åæ`machine/disk0.vdi`æ¿æ¢æä½ çç£çè·¯å¾ã
+
+æå¾å¤åæ³å»å建ä¸ä¸ªèæç£çï¼æ¯å¦[qemu-img](https://qemu-project.gitlab.io/qemu/system/images.html)ã
+
+å¨å¤§å¤æ°æ
åµä¸ï¼æé½ä¼å°½éä¿è¯æ¬æºè¿è¡æ 误åï¼pushå°ä»åºä¸ãåæ¶ï¼è¯¥ç³»ç»æ¯ç»è¿èææºåçæºæµè¯ã妿åç°å¨ä½¿ç¨`make all`ä¹åï¼èææºä¸è¿è¡æ¥éï¼åä¸è¬æ¯ç¼è¯å¨ä¼åé®é¢ãè¿ä¸ªé®é¢ç¬è
ä¸è¬å¾å¿«å°±ä¼ä¿®å¤ï¼å¦æä½ 使ç¨å«ççæ¬çgccï¼ç¬è
çæ¬11.2ï¼ï¼åºç°äºæ¤é®é¢ï¼æ¬¢è¿æissueã请åè[éå½3ï¼Issueçæäº¤](#appendix3)
ä¸é¢ååºä¸äºå¯è½ä¼åºç°çé®é¢ã
@@ -75,6 +105,10 @@ LunaixOS - ä¸ä¸ªç®åçï¼è¯¦ç»çï¼POSIXå
¼å®¹çï¼ä½æ¿ï¼ï¼ï¼å¸¦æ
è¿å¾å¤§æ¦çæ¯åºç°äºç«ææ¡ä»¶ãè½ç¶æ¯ç¸å½ä¸å¯è½çãä½å¦æåºç°äºï¼è¿æ¯è¯·æissueã
+#### é®é¢#3ï¼Bochsæ æ³è¿è¡ï¼æç¤ºæ¾ä¸å°AHCIæ§å¶å¨
+
+æ£å¸¸ï¼**å 为Bochs䏿¯æSATA**ã请使ç¨QEMUæVirtualBoxã
+
## åèæç¨
**没æï¼ï¼** æ¬æç¨ä»¥å该æä½ç³»ç»å为ååï¼æ²¡æåºäºä»»ä½å¸é¢ä¸ç°è¡çæä½ç³»ç»å¼åæç¨ï¼ä¸å¹¶éæ¯åºäºä»»ä½ç弿ºå
æ ¸çäºæ¬¡å¼åã
@@ -96,6 +130,10 @@ LunaixOS - ä¸ä¸ªç®åçï¼è¯¦ç»çï¼POSIXå
¼å®¹çï¼ä½æ¿ï¼ï¼ï¼å¸¦æ
+ PCI Local Bus Specification, Revision 3.0
+ 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
++ SCSI Command Reference Manual
++ ATA/ATAPI Command Set - 3 (ACS-3)
**å
责声æï¼PCIç¸å
³çæ åæç»è§£éæå½PCI-SIGææãæ¤å¤æä¾ç坿¬ä»
ä¾ä¸ªäººå¦ä¹ 使ç¨ãä»»ä½åç¨ç®çé¡»åPCI-SIGè´ä¹°ã**
@@ -117,7 +155,7 @@ LunaixOS - ä¸ä¸ªç®åçï¼è¯¦ç»çï¼POSIXå
¼å®¹çï¼ä½æ¿ï¼ï¼ï¼å¸¦æ
## éå½1ï¼æ¯æçç³»ç»è°ç¨
-### Unix/Linux/POSIX
+**Unix/Linux/POSIX**
1. `sleep(3)`
1. `wait(2)`
1. `waitpid(2)`
@@ -135,14 +173,48 @@ LunaixOS - ä¸ä¸ªç®åçï¼è¯¦ç»çï¼POSIXå
¼å®¹çï¼ä½æ¿ï¼ï¼ï¼å¸¦æ
1. `kill(2)`
1. `sigpending(2)`
1. `sigsuspend(2)`
-
-### LunaixOSèªæ
+2. `read(2)`
+2. `write(2)`
+2. `open(2)`
+2. `close(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. `link(2)`â»
+2. `fsync(2)`â»
+2. `dup(2)`
+2. `dup2(2)`
+2. `symlink(2)`â»
+2. `chdir(2)`
+2. `fchdir(2)`
+2. `getcwd(2)`
+2. `rename(2)`â»
+2. `mount(2)`
+2. `unmount` (a.k.a `umount(2)`)â»
+2. `getxattr(2)`â»
+2. `setxattr(2)`â»
+2. `fgetxattr(2)`â»
+2. `fsetxattr(2)`â»
+2. `ioctl(2)`â»
+2. `getpgid(2)`
+2. `setpgid(2)`
+
+**LunaixOSèªæ**
1. `yield`
+2. `geterrno`
+3. `realpathat`
+
+( **â»**ï¼è¯¥ç³»ç»è°ç¨ææªç»è¿æµè¯ )
## éå½2ï¼ç¼è¯gccä½ä¸ºäº¤åç¼è¯å¨
-注æï¼gccéè¦ä»æºç æå»ºï¼å¹¶é
置为交åç¼è¯å¨ï¼å³ç®æ å¹³å°ä¸º`i686-elf`ãä½ å¯ä»¥ä½¿ç¨æ¬é¡¹ç®æä¾çèªå¨åèæ¬ï¼è¿å°ä¼æ¶µçgccåbinutilsæºç çä¸è½½ï¼é
ç½®åç¼è¯ï¼ä¸è½ä¿è¯å
¨å¹³å°å¯ç¨ï¼ç®ååªè¯è¿å¨Ubuntuç³»ç»ä¸å¯ä»¥è¿è¡ï¼ã
+注æï¼gccéè¦ä»æºç æå»ºï¼å¹¶é
置为交åç¼è¯å¨ï¼å³ç®æ å¹³å°ä¸º`i686-elf`ãä½ å¯ä»¥ä½¿ç¨æ¬é¡¹ç®æä¾ç[èªå¨åèæ¬](slides/c0-workspace/gcc-build.sh)ï¼è¿å°ä¼æ¶µçgccåbinutilsæºç çä¸è½½ï¼é
ç½®åç¼è¯ï¼æ²¡ä»ä¹æ¶é´å»æç£¨èæ¬ï¼ç®ååªç¥éå¨ç¬è
çUbuntuç³»ç»ä¸å¯ä»¥è¿è¡ï¼ã
**æ¨è**æå¨ç¼è¯ã以ä¸ç¼è¯æ¥éª¤æ¬è¿èªï¼https://wiki.osdev.org/GCC_Cross-Compiler
@@ -196,12 +268,41 @@ make all-gcc &&\
```
8. éªè¯å®è£
ï¼æ§è¡`i686-elf-gcc -dumpmachine`ï¼è¾åºåºè¯¥ä¸ºï¼`i686-elf`
+**å°æ°ç¼è¯å¥½çGCCæ°¸ä¹
æ·»å å°`PATH`ç¯å¢åé**
+
+è½ç¶è¿æ¯ä¸ä¸ªå¸¸è¯æ§çæä½ï¼ä½èèå°è®¸å¤äººé½ä¼å¿½ç¥è¿ä¸ä¸ªé¢å¤çæ¥éª¤ï¼å¨è¿éç¹æ¤ååºæç¤ºã
+
+è¦æ³å®ç°è¿ä¸ç¹ï¼åªéè¦å¨shellçé
ç½®æä»¶çæ«å°¾æ·»å ï¼`export PATH="<ä¸è¿°çå®è£
è·¯å¾>/bin:$PATH"`ã
+
+è¿ä¸ªé
ç½®æä»¶æ¯åå³äºä½ 使ç¨çshellï¼å¦zshå°±æ¯`${HOME}/.zshrc`ï¼bash忝`${HOME}/.bashrc`ï¼æè
ä½ å«éº»ç¦çï¼æå¾åºåï¼ä½ ä¹å¯ä»¥ç´æ¥ä¿®æ¹å
¨å±ç`/etc/profile`æä»¶ï¼ä¸å³æ°¸é¸ï¼ä½ä¸æ¨èè¿æ ·åï¼ã
+
+è³äºå
¶ä»çæ
åµï¼ç±äºè¿ä¸ªæ¥éª¤å
¶å®å¨ç½ä¸æ¯éå¤å¯æ¥çï¼æä»¥å°±ä¸å¨è¿éèµè¿°äºã
+
## éå½3ï¼Issueçæäº¤
+ç±äºç®åLunaixOS没æä¸ä¸ªå®å强大çå
æ ¸è¿½è¸ªåè½ãåè¥Lunaixçè¿è¡åºç°ä»»ä½é®é¢ï¼è¿è¯·æç
§ä»¥ä¸çæè¿°ï¼å¨Issueé颿ä¾è¯¦ç»çä¿¡æ¯ã
+
æå¥½æä¾ï¼
++ å¯ç¨äºå¤ç°é®é¢çæè¿°åæå¼ï¼å¦Lunaixè¿è¡å¹³å°ç软硬件é
ç½®ï¼
+ é误çç¶æè¿°
+ ï¼å¦å¯è½ï¼è¿è¡æªå¾
+ éè¯¯æ¶æ¯ï¼å¦æç»åºï¼
+ å¯åå¨ç¶æçdump
+ ï¼å¦å¯è½ï¼æä¾é误åçæ¶ï¼EIPéè¿çæä»¤ï¼ç²¾ç¡®å°å½æ°ï¼ãå¦æä½¿ç¨`make all-debug`ï¼ä¼æä¾`build/kdump.txt`ï¼ä½ å¯ä»¥å¨è¿éé¢å®ä½ãæè
ä¹å¯ä»¥ç´æ¥`objdump`
-+ ï¼å¦å¯è½ï¼èæå
åæ å°ä¿¡æ¯ï¼QEMUä¸å¯ä½¿ç¨`info mem`æ¥çï¼ã
\ No newline at end of file
++ ï¼å¦å¯è½ï¼èæå
åæ å°ä¿¡æ¯ï¼QEMUä¸å¯ä½¿ç¨`info mem`æ¥çï¼ã
+
+## éå½4ï¼ä¸²å£GDBè¿ç¨è°è¯
+
+LunaixOSå
æ ¸éæäºæåºæ¬çGDBè¿ç¨è°è¯æå¡å¨ãå¯éè¿ä¸²å£COM1å¨9600æ³¢ç¹çä¸ä¸ä¹å»ºç«é¾æ¥ã使¯ï¼å¨å°GDBä¸å
æ ¸é¾æ¥èµ·æ¥ä¹åï¼è¿éè¦è®©å
æ ¸å¤å¨è°è¯æ¨¡å¼ä¸ã
+
+è¦è¿å
¥è°è¯æ¨¡å¼ï¼éè¦å¾ä¸²å£ï¼æ³¢ç¹çå¦ä¸ï¼åå
¥åè串 `0x40` `0x63` `0x6D` `0x63`ãæ¤æ¶ï¼å¦æå±å¹åºé¨åºç°ä¸æ¡å红è²èæ¯ç`DEBUG` åæ ·ï¼é£ä¹å°±è¯´æLunaixOSå·²å¤å¨è°è¯æ¨¡å¼ä¸ã
+
+注æï¼å¨è¿ä¸ªæ¶åï¼LunaixOSä¼å¼å§å¨`COM1`ä¸çå¬GDBå议信æ¯ï¼å¹¶ä¸æåä¸åçæ´»å¨ï¼å¦è°åº¦ï¼ä»¥å对å¤é¨ä¸æçä¸åååºï¼ãç¨æ·æ¤æ¶éè¦å°GDBä¸å
¶æè½½ï¼å¹¶ä½¿ç¨GDBç工使µæ¥æç¤ºå
æ ¸ä¸ä¸æ¥çå¨ä½ã
+
+å¨ç®åï¼ä¸ºäºé²æ¢ä»£ç è¿äºèè¿ï¼LunaixOSå®ç°çæ¯GDBè¿ç¨åè®®è¦æ±çæå°æå¡ç«¯å½ä»¤åéï¼`g`, `G`, `p`, `P`, `Q`, `S`, `k`, `?`, `m`, `M`, `X`ã足以满足大é¨åçè°è¯éæ±ã
+
+å½ç»æè°è¯çæ¶åï¼è¯·ä½¿ç¨GDBç`kill`æä»¤è¿è¡è¿æ¥çæå¼ã注æï¼è¿ä¸ªæä»¤ä¼ä½¿å¾LunaixOSæ¢å¤æææåçæ´»å¨ï¼è¿å
¥æ£å¸¸çè¿è¡åºåï¼ä½å¹¶ä¸ä¼éåºè°è¯æ¨¡å¼ãGDBçæè½½è¯·æ±ä¾ç¶å¨LunaixOSä¸äº«ææé«ä¼å
æã妿éè¦éåºè°è¯æ¨¡å¼ï¼éè¦å¾ä¸²å£åå
¥åè串ï¼`0x40` `0x79` `0x61` `0x79`ã
+
+### GDBè°è¯æ³¨æäºé¡¹
+
+å¨è°è¯ä¸ï¼è¯·é¿å
使ç¨`info stack`ï¼`bt`æè
任使¶å **æ å±å¼ï¼Stack Unwindingï¼** æè
**æ åæº¯ï¼Stack Backtracingï¼** çæä»¤ãå¦åï¼LunaixOS徿å¯è½ä¼åºç° **ä¸å¯é¢æçè¡ä¸º** ã
\ No newline at end of file