X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/21fc45696e24471453a14ff496c8de5fe3cad6a8..f09e806d5032150564df39a2f7b1192c4d84cf15:/README.md diff --git a/README.md b/README.md index 1c48cd4..7e16318 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,11 @@
- ç®ä½ä¸æ | English + ç®ä½ä¸æ | English
-# LunaixOS Project +# LunaixOS Project + LunaixOS - ä¸ä¸ªç®åçï¼è¯¦ç»çï¼POSIXå ¼å®¹çï¼ä½æ¿ï¼ï¼ï¼å¸¦ææµéä¸ªäººé£æ ¼çæä½ç³»ç»ãå¼åè¿ç¨ä»¥è§é¢æç¨å½¢å¼å¨Bilibiliåç°ï¼[ãä»é¶å¼å§èªå¶æä½ç³»ç»ç³»åã](https://space.bilibili.com/12995787/channel/collectiondetail?sid=196337)ã ## å½åè¿åº¦ä»¥åæ¯æçåè½ @@ -22,24 +23,40 @@ LunaixOS - ä¸ä¸ªç®åçï¼è¯¦ç»çï¼POSIXå ¼å®¹çï¼ä½æ¿ï¼ï¼ï¼å¸¦æ + å å管ç䏿éå页ï¼Demand Pagingï¼ + é®çè¾å ¥ + å¤è¿ç¨ -+ 33个常è§çLinux/POSIXç³»ç»è°ç¨ï¼[éå½1](#appendix1)ï¼ ++ 50个常è§çLinux/POSIXç³»ç»è°ç¨ï¼[éå½1](#appendix1)ï¼ + ç¨æ·æ¨¡å¼ + ä¿¡å·æºå¶ + PCI 3.0 + PCIe 1.1 (WIP) + Serial ATA AHCI -+ æä»¶ç³»ç» (WIP) ++ æä»¶ç³»ç» + + èææä»¶ç³»ç» + + ISO9660 + + åç + + Rock Ridgeæå± ++ è¿ç¨GDB串å£è°è¯ (COM1@9600Bd) ++ ç¨æ·ç¨åºå è½½ä¸æ§è¡ ++ 卿龿¥ (WIP) + +å·²ç»æµè¯è¿çç¯å¢ï¼ + ++ QEMU (>=7.0.0) ++ Bochsï¼SATAåè½ä¸æ¯æï¼ ++ Virtualbox ++ Dell G3 3779 ## ç®å½ç»æ -| | | -|-----|------| -| [lunaix-os](lunaix-os/) | LunaixOSæºä»£ç | -| [slides](slides/) | è§é¢ä¸æç¨çå¹»ç¯çåè¡¥å ææ | -| [reference-material](reference-material/)| æ åï¼ææ¯ææ¡£ååèæç® | +| | | +| ----------------------------------------- | ---------------------------- | +| [lunaix-os](lunaix-os/) | LunaixOSæºä»£ç | +| [slides](slides/) | è§é¢ä¸æç¨çå¹»ç¯çåè¡¥å ææ | +| [reference-material](reference-material/) | æ åï¼ææ¯ææ¡£ååèæç® | ## ç¼è¯ä¸æå»º +### ç¯å¢æå»º + æå»ºè¯¥é¡¹ç®éè¦æ»¡è¶³ä»¥ä¸æ¡ä»¶ï¼ + gcc (ç®æ å¹³å°: i686-elf) @@ -50,20 +67,29 @@ LunaixOS - ä¸ä¸ªç®åçï¼è¯¦ç»çï¼POSIXå ¼å®¹çï¼ä½æ¿ï¼ï¼ï¼å¸¦æ **注æï¼gccä¸è½æ¯æ¬æºèªå¸¦çï¼å¿ é¡»è¦ä»æºç ç¼è¯ï¼å¹¶é ç½®ç®æ å¹³å°ä¸ºï¼`i686-elf`ï¼ä»¥è¿è¡äº¤åç¼è¯ãé ç½®è¿ç¨å¯åè[éå½äºï¼ç¼è¯gccä½ä¸ºäº¤åç¼è¯å¨](#appendix2)ã** +### Dockeréå + +对äºå¼åç¯å¢ï¼æ¬é¡¹ç®ä¹æä¾äºDockeréåå°è£ ãå¼ç®±å³ç¨ï¼æ éé ç½®ï¼é常éåæäººæææ¶è ã详ç»ä½¿ç¨æ¹æ³è¯·è½¬å°ï¼[Lunaix OSDK项ç®](https://github.com/Minep/os-devkit)ã + +### æå»ºé项 + åè¥æ¡ä»¶æ»¡è¶³ï¼é£ä¹å¯ä»¥ç´æ¥æ§è¡`make all`è¿è¡æå»ºï¼å®æåå¯å¨çæç`build`ç®å½ä¸æ¾å°å¯å¼å¯¼çisoã æ¬é¡¹ç®æ¯æç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 +| å½ä»¤ | ç¨é | +| ------------------------ | ----------------------------------------------- | +| `make all` | æå»ºéåï¼`-O2`ï¼ä½ç¦ç¨CSEç¸å ³çä¼å项 **â»** ï¼ | +| `make instable` | æå»ºéåï¼`-O2`ï¼å¼å¯CSEç¸å ³ä¼åï¼ | +| `make all-debug` | æå»ºéåè°è¯ç¨çéåï¼`-Og`ï¼ | +| `make run` | 使ç¨QEMUè¿è¡buildç®å½ä¸çéå | +| `make debug-qemu` | æå»ºå¹¶ä½¿ç¨QEMUè¿è¡è°è¯ | +| `make debug-bochs` | æå»ºå¹¶ä½¿ç¨Bochsè¿è¡è°è¯ | +| `make debug-qemu-vscode` | ç¨äºvscodeæ´å | +| `make clean` | å é¤buildç®å½ | + +**â»ï¼ç±äºå¨`-O2`模å¼ä¸ï¼GCCä¼è¿è¡CSEä¼åï¼è¿å¯¼è´LunaixOSä¼åºç°ä¸äºé叏奿ªã离谱çbugï¼ä»èå½±åå°åºæ¬è¿è¡ãå ·ä½åå æå¾ è°æ¥ã** + +## è¿è¡ï¼åæ¯ä»¥åIssue è¿è¡è¯¥æä½ç³»ç»éè¦ä¸ä¸ªèæç£çéåï¼å¯ä»¥ä½¿ç¨å¦ä¸å½ä»¤å¿«éå建ä¸ä¸ªï¼ @@ -74,6 +100,7 @@ qemu-img create -f vdi machine/disk0.vdi 128M å¦æä½ æ³è¦ä½¿ç¨å«çç£çéåï¼éè¦ä¿®æ¹`configs/make-debug-tool` æ¾å°è¿ä¸è¡ï¼ + ``` -drive id=disk,file="machine/disk0.vdi",if=none \ ``` @@ -82,26 +109,24 @@ qemu-img create -f vdi machine/disk0.vdi 128M æå¾å¤åæ³å»å建ä¸ä¸ªèæç£çï¼æ¯å¦[qemu-img](https://qemu-project.gitlab.io/qemu/system/images.html)ã -å¨å¤§å¤æ°æ åµä¸ï¼æé½ä¼å°½éä¿è¯æ¬æºè¿è¡æ 误åï¼pushå°ä»åºä¸ãåæ¶ï¼è¯¥ç³»ç»æ¯ç»è¿æ¬æºæµè¯ï¼è½å¤å¨Bochsï¼QEMU (`= 7.0`)ï¼VirtualBox䏿£å¸¸çè¿è¡ï¼ææ¶æ²¡è¯è¿çæºï¼ã妿åç°å¨ä½¿ç¨`make all`ä¹åï¼èææºä¸è¿è¡æ¥éï¼åä¸è¬æ¯ç¼è¯å¨ä¼åé®é¢ãè¿ä¸ªé®é¢ç¬è ä¸è¬å¾å¿«å°±ä¼ä¿®å¤ï¼å¦æä½ 使ç¨å«ççæ¬çgccï¼ç¬è çæ¬11.2ï¼ï¼åºç°äºæ¤é®é¢ï¼æ¬¢è¿æissueã请åè[éå½3ï¼Issueçæäº¤](#appendix3) +䏻忝ä¸è¬æ¯ç¨³å®çãå 为å¨å¤§å¤æ°æ åµä¸ï¼æé½ä¼å°½éä¿è¯æ¬æºè¿è¡æ 误åï¼pushå°è¯¥åæ¯ä¸ãè³äºå ¶ä»ç忝ï¼åæ¯ä½ä¸ºæ è®°æè æ¯å¼åä¸çåè½ãåè æ è®°ç¨åæ¯ä¸è¬ä¼å¾å¿«å æï¼åè å¼å忝ä¸è½ä¿è¯ç¨³å®æ§ï¼è¿äºåæ¯çä»£ç æå¯è½æ²¡æç»è¿æµè¯ï¼ä½å¯ä»¥ä½ä¸ºLunaixå½åå¼åè¿åº¦çåèã + +è¯¥ç³»ç»æ¯ç»è¿èææºåçæºæµè¯ã妿åç°å¨ä½¿ç¨`make all`ä¹åï¼èææºä¸è¿è¡æ¥éï¼åä¸è¬æ¯ç¼è¯å¨ä¼åé®é¢ãè¿ä¸ªé®é¢ç¬è ä¸è¬å¾å¿«å°±ä¼ä¿®å¤ï¼å¦æä½ 使ç¨å«ççæ¬çgccï¼ç¬è çæ¬11.2ï¼ï¼åºç°äºæ¤é®é¢ï¼æ¬¢è¿æissueã请åè[éå½3ï¼Issueçæäº¤](#appendix3) ä¸é¢ååºä¸äºå¯è½ä¼åºç°çé®é¢ã -#### é®é¢#1ï¼ QEMUä¸8042æ§å¶å¨æç¤ºæ¾ä¸å°ã +#### é®é¢#1ï¼ QEMUä¸8042æ§å¶å¨æç¤ºæ¾ä¸å° è¿æ¯QEMUé ç½®ACPIæ¶çä¸ä¸ªbugï¼å¨7.0.0çä¸ä¿®å¤äºã -#### é®é¢#2ï¼å¤è¿ç¨è¿è¡æ¶ï¼å¶å°ä¼åºç°General Protectioné误ã +#### é®é¢#2ï¼å¤è¿ç¨è¿è¡æ¶ï¼å¶å°ä¼åºç°General Protectioné误 è¿å¾å¤§æ¦çæ¯åºç°äºç«ææ¡ä»¶ãè½ç¶æ¯ç¸å½ä¸å¯è½çãä½å¦æåºç°äºï¼è¿æ¯è¯·æissueã -#### é®é¢#3ï¼Bochsè¿è¡æ¶ï¼æç¤ºæ¾ä¸å°AHCIæ§å¶å¨ +#### é®é¢#3ï¼Bochsæ æ³è¿è¡ï¼æç¤ºæ¾ä¸å°AHCIæ§å¶å¨ æ£å¸¸ï¼**å 为Bochs䏿¯æSATA**ã请使ç¨QEMUæVirtualBoxã -#### é®é¢#4ï¼é®ççä¸ä¸æ¹åé®ï¼ç¨äºæ»å±ï¼å¨VirtualBox䏿æ¶ä¸å¥½ä½¿ - -å¯ä»¥è¯è¯`Shift+<æ¹åé®>`ï¼è¿ä¸ªé®é¢çè§£å³éè¦éåé®ç驱å¨çç¶ææºãæä¼æ¾æ¶é´å»åï¼æ¯ç«è¿ä¸æ¯çç乿¥ã - ## åèæç¨ **没æï¼ï¼** æ¬æç¨ä»¥å该æä½ç³»ç»å为ååï¼æ²¡æåºäºä»»ä½å¸é¢ä¸ç°è¡çæä½ç³»ç»å¼åæç¨ï¼ä¸å¹¶éæ¯åºäºä»»ä½ç弿ºå æ ¸çäºæ¬¡å¼åã @@ -113,6 +138,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 @@ -124,31 +150,38 @@ 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) - æä¸æå «çåèï¼å¾å¤è¿æ¥äººçç»éªãä½è 主è¦ç¨äºä¸å¤èµææ¥è¯¢ä»¥åæ¶éï¼ææ¯æç®ï¼æåï¼æ åçç²ç¥æ»ç»ï¼ä»¥åå¼åç¯å¢/å·¥å ·é¾çæå»ºã + [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çä¸äºå ·ä½è¡ä¸ºã ++ Linux Manual - ç¨äºæ¥è¯¢*nix APIçä¸äºå ·ä½è¡ä¸ºã ## éå½1ï¼æ¯æçç³»ç»è°ç¨ -### Unix/Linux/POSIX +**Unix/Linux/POSIX** + 1. `sleep(3)` 1. `wait(2)` 1. `waitpid(2)` @@ -173,33 +206,50 @@ qemu-img create -f vdi machine/disk0.vdi 128M 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. `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. `symlink(2)`â» 2. `chdir(2)` 2. `fchdir(2)` 2. `getcwd(2)` - -### LunaixOSèªæ +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)` +2. `mmap(2)` +2. `munmap(2)` +2. `execve(2)` + +**LunaixOSèªæ** 1. `yield` 2. `geterrno` 3. `realpathat` +4. `syslog` + +( **â»**ï¼è¯¥ç³»ç»è°ç¨ææªç»è¿æµè¯ ) ## éå½2ï¼ç¼è¯gccä½ä¸ºäº¤åç¼è¯å¨ 注æï¼gccéè¦ä»æºç æå»ºï¼å¹¶é 置为交åç¼è¯å¨ï¼å³ç®æ å¹³å°ä¸º`i686-elf`ãä½ å¯ä»¥ä½¿ç¨æ¬é¡¹ç®æä¾ç[èªå¨åèæ¬](slides/c0-workspace/gcc-build.sh)ï¼è¿å°ä¼æ¶µçgccåbinutilsæºç çä¸è½½ï¼é ç½®åç¼è¯ï¼æ²¡ä»ä¹æ¶é´å»æç£¨èæ¬ï¼ç®ååªç¥éå¨ç¬è çUbuntuç³»ç»ä¸å¯ä»¥è¿è¡ï¼ã -**æ¨è**æå¨ç¼è¯ã以ä¸ç¼è¯æ¥éª¤æ¬è¿èªï¼https://wiki.osdev.org/GCC_Cross-Compiler +**æ¨è**æå¨ç¼è¯ã以ä¸ç¼è¯æ¥éª¤æ¬è¿èªï¼