diff --git a/README.md b/README.md index fbb99a1e4f0516d1a2db13b0356702a1f1b7dd63..668171808233db13fd6a6b364c7c236e8a2db86a 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@  -#### 项目整体设计文档 ` doc_jkxsos设计文档 ` +#### 项目整体设计文档 ` doc_jkxsos设计文档.pdf ` ï¼ˆæ–‡æ¡£ä¸»è¦æè¿°å†…æ ¸åœ¨fu740å¹³å°ä¸Šçš„设计与实现) #### 模å—å¼€å‘相关文档å˜äºŽ `/docs` @@ -22,9 +22,9 @@ ## Our Work -jkxs-OS致力于开å‘一个能在RISCV-64处ç†å™¨ä¸Šè¿è¡Œçš„å®å†…æ ¸æ“作系统。我们以清åŽå¤§å¦å´ä¸€å‡¡åŒå¦çš„æ•™å¦é¡¹ç›®rCore-Tutorialä¸ºåŸºç¡€ï¼Œåœ¨å…¶ä»£ç æ¡†æž¶ä¸Šè¿›è¡Œè¿ä»£å¼€å‘。 +jkxs-OS致力于开å‘一个能在RISCV-64处ç†å™¨ä¸Šè¿è¡Œçš„å®å†…æ ¸æ“作系统。我们以清åŽå¤§å¦çš„æ•™å¦é¡¹ç›®rCore-Tutorialä¸ºåŸºç¡€ï¼Œåœ¨å…¶ä»£ç æ¡†æž¶ä¸Šè¿›è¡Œè¿ä»£å¼€å‘。 -之所以选择rCore-Tutorial,一是它的开å‘è¯è¨€â€”—Rust在系统编程领域具有得天独厚的优势,它天然地ä¿è¯äº†ç¨‹åºçš„内å˜å®‰å…¨å’Œçº¿ç¨‹å®‰å…¨ï¼Œèƒ½å¤Ÿå¸®åŠ©æˆ‘ä»¬è§„é¿å†…æ ¸å¼€å‘ä¸çš„诸多潜在问题;二是rCore-Tutorialæ˜¯ä¸€ä¸ªè¾ƒä¸ºå®Œæ•´çš„ç³»ç»Ÿï¼Œå…·æœ‰è‰¯å¥½çš„å¯æ‹“展性,基于rCore-Tutorialå¼€å‘能够é¿å…“é‡å¤é€ è½®åâ€çš„麻烦,节çœäº†åœ¨çº¿ç¨‹ä¸Šä¸‹æ–‡åˆ‡æ¢ã€é¡µè¡¨è®¿é—®ç‰å¤§é‡ç»†èŠ‚çš„å®žçŽ°ä¸Šéœ€è¦èŠ±è´¹çš„æ—¶é—´ï¼Œä½¿æˆ‘ä»¬èƒ½å°†æ›´å¤šçš„ç²¾åŠ›æŠ•å…¥åˆ°å†…æ ¸æ€§èƒ½çš„ä¼˜åŒ–ã€å¥å£®æ€§çš„增强ã€ç”¨æˆ·ä½“验的æå‡ç‰çŽ¯èŠ‚ä¸Šï¼Œåšå‡ºæ›´æœ‰æ„ä¹‰ã€æ›´å…·æœ‰åˆ›æ–°æ€§çš„工作。 +基于rCore-Tutorialå¼€å‘能够é¿å…“é‡å¤é€ è½®åâ€çš„麻烦,节çœäº†åœ¨å¤§é‡ç»†èŠ‚çš„å®žçŽ°ä¸Šéœ€è¦èŠ±è´¹çš„æ—¶é—´ï¼Œä½¿æˆ‘ä»¬èƒ½å°†æ›´å¤šçš„ç²¾åŠ›æŠ•å…¥åˆ°å†…æ ¸æ€§èƒ½çš„ä¼˜åŒ–ã€å¥å£®æ€§çš„增强ã€ç”¨æˆ·ä½“验的æå‡ç‰çŽ¯èŠ‚ä¸Šï¼Œåšå‡ºæ›´æœ‰æ„ä¹‰ã€æ›´å…·æœ‰åˆ›æ–°æ€§çš„工作。 对于基于riscv-64体系结构的æ“ä½œç³»ç»Ÿå†…æ ¸å®žçŽ°ï¼Œä¸Šä¸€å±Šä»£è¡¨å“ˆå°”æ»¨å·¥ä¸šå¤§å¦ï¼ˆæ·±åœ³ï¼‰å‚赛的UltraOS队ä¼å·²ç»è¿›è¡Œäº†ç›¸å½“多的探索。作为本科生å°ç»„独立开å‘完æˆçš„项目,UltraOSæ— ç–‘æ˜¯æ°å‡ºçš„。它ä¸ä»…å®žçŽ°äº†å¤§èµ›çš„å…¨éƒ¨åŠŸèƒ½è¦æ±‚ï¼Œè¿˜å¯¹ç³»ç»Ÿæ€§èƒ½è¿›è¡Œäº†é’ˆå¯¹æ€§çš„ä¼˜åŒ–ï¼Œä¸”å…·æœ‰è¯¸å¤šäº®ç‚¹ï¼ˆåˆ›é€ æ€§çš„Monitor调试模å—ã€åˆå§‹è¿›ç¨‹å’Œshell的回收ã€kmem设计ã€ç›¸å½“完善的文档ç‰ï¼‰ã€‚UltraOS的精妙设计给我们æä¾›äº†è®¸å¤šçµæ„Ÿï¼Œæœ‰äº†UltraOSçš„é‡è¦æŽ¢ç´¢ï¼Œå¯ä»¥è¯´æˆ‘们已ç»â€œç«™åœ¨äº†å·¨äººçš„肩膀上â€ã€‚ä¸è¿‡ï¼Œæˆ‘们ä¸å¸Œæœ›jkxs-OSä»…ä»…æˆä¸ºä¸€ä¸ªâ€œUltraOS的翻版â€ï¼›æˆ‘们希望jkxs-OS能够比“巨人â€ç«™å¾—更高ã€çœ‹çš„æ›´è¿œâ€”—具体æ¥è¯´ï¼Œå°±æ˜¯æ‹¥æœ‰æ¯”UltraOS更完善的硬件支æŒã€æ›´å¥½çš„æ€§èƒ½ã€æ›´ä¼˜é›…çš„è®¾è®¡ã€æ›´å®Œå–„çš„æ–‡æ¡£ã€æ›´å¥½çš„用户体验。 @@ -76,3 +76,15 @@ jkxs-OS致力于开å‘一个能在RISCV-64处ç†å™¨ä¸Šè¿è¡Œçš„å®å†…æ ¸æ“作 + 基于æ¤ï¼Œæˆ‘ä»¬å®žçŽ°äº†ä¸€ä¸ªåŠŸèƒ½æ›´åŠ å¼ºå¤§ã€ä¸”用户体验更好的shell。它ä¸ä»…解决了上下左å³é”®æŒ‰ä¸‹æ—¶å‘½ä»¤å‡ºé”™ã€å…‰æ ‡è·‘飞ç‰é—®é¢˜ï¼Œè¿˜æ”¯æŒtab命令补全ã€å‘½ä»¤åކå²å›žæº¯ç‰åŠŸèƒ½ï¼Œä¸ºè°ƒè¯•å¸¦æ¥æžå¤§ä¾¿åˆ©ã€‚ + 我们实现了一套较为完整的日志系统,用户å¯é€‰æ‹©æœ€å°æ—¥å¿—输出ç‰çº§ï¼Œå¹¶é€šè¿‡debug!,info!,warning!,error!ç‰å®æ‰“å°ä¸åŒè¾“出ç‰çº§çš„æ—¥å¿—ä¿¡æ¯ã€‚日志系统能为ä¸åŒç‰çº§çš„输出信æ¯è®¾ç½®ä¸åŒçš„颜色,且能显示输出è¯å¥æ‰€åœ¨æ–‡ä»¶çš„åç§°å’Œæ‰€åœ¨è¡Œæ•°ï¼Œä½¿å†…æ ¸è¾“å‡ºæ›´åŠ æ¸…æ™°ã€ç›´è§‚,更利于调试。 +<br> + +## 未æ¥è®¡åˆ’ + +计划|优先级 +-|- +æ›´å…¨é¢çš„æ”¯æŒbusybox shç‰|高 +支æŒImbench,并进行性能测试|高 +基于性能测试进行性能优化|高 +æå‡å¤šæ ¸è¿è¡Œçš„稳定性:修å¤å¥‡å¦™bug|高 +æé«˜SDcard驱动的稳定性|ä¸ +åŸºäºŽç¡¬ä»¶å¹³å°æ‹“å±•å†…æ ¸çš„åŠŸèƒ½ï¼šç½‘å¡ç‰|低 \ No newline at end of file diff --git "a/doc_jkxsos\350\256\276\350\256\241\346\226\207\346\241\243.pdf" "b/doc_jkxsos\350\256\276\350\256\241\346\226\207\346\241\243.pdf" index a9c52ba3f261b725fc262d9ae2b6db7a45f9365e..3801eb1e10ff34cd04138a5e838fca19278f5964 100644 Binary files "a/doc_jkxsos\350\256\276\350\256\241\346\226\207\346\241\243.pdf" and "b/doc_jkxsos\350\256\276\350\256\241\346\226\207\346\241\243.pdf" differ diff --git a/fat32_fs/FAT32.md b/docs/FAT32.md similarity index 100% rename from fat32_fs/FAT32.md rename to docs/FAT32.md diff --git "a/fat32_fs/FAT32\344\274\230\345\214\226.md" "b/docs/FAT32\344\274\230\345\214\226.md" similarity index 100% rename from "fat32_fs/FAT32\344\274\230\345\214\226.md" rename to "docs/FAT32\344\274\230\345\214\226.md" diff --git "a/docs/image/\345\244\232\346\240\270\345\220\257\345\212\250/\347\212\266\346\200\201\350\275\254\346\215\242.png" "b/docs/image/\345\244\232\346\240\270\345\220\257\345\212\250/\347\212\266\346\200\201\350\275\254\346\215\242.png" new file mode 100644 index 0000000000000000000000000000000000000000..206ad2eb87e8102d30b905aa5ac816ea8b97d334 Binary files /dev/null and "b/docs/image/\345\244\232\346\240\270\345\220\257\345\212\250/\347\212\266\346\200\201\350\275\254\346\215\242.png" differ diff --git "a/docs/\345\244\232\346\240\270\345\220\257\345\212\250.md" "b/docs/\345\244\232\346\240\270\345\220\257\345\212\250.md" new file mode 100644 index 0000000000000000000000000000000000000000..47ec24adfdb3c7c42b64269f4e443c71e85100b7 --- /dev/null +++ "b/docs/\345\244\232\346\240\270\345\220\257\345\212\250.md" @@ -0,0 +1,132 @@ +# å¤šæ ¸å¯åЍ + +#### 旧版rust-sbi + +qemu旧版rust-sbi并未在Mæ€åœ¨æ ¸æ‹¦æˆªï¼Œæœ¬å®žçްå‚考rcore在Sæ€è¿›è¡Œå¤šæ ¸æ‹¦æˆªã€‚区分为åˆå§‹åŒ–æ ¸ 与 å…¶ä½™æ ¸ ã€‚å…¶ä½™æ ¸å¿…é¡»ç‰å¾…åˆå§‹åŒ–æ ¸å®Œæˆä¸€äº›å¿…须的åˆå§‹åŒ–åŽï¼Œå…¶ä½™æ ¸æ‰èƒ½è¿›è¡Œç®€å•çš„åˆå§‹åŒ–。(使用一个原åbool值进行控制) + +# 从rust-sbi 到 opensbi + +### OpenSBI- 远程平å°/本地hifiveå¹³å°/qemu + +由于远程平å°ä»…能使用opensbi所以需è¦è¿›è¡Œé€‚é…,而且一跳转到0x8020_0000åŽç›´æŽ¥å¡æ»(å› ä¸ºä¹‹å‰é»˜è®¤0å·æ ¸ä¸ºä¸»æ ¸ï¼Œä½†å†·å¯åŠ¨çš„æ ¸æ˜¯ä»»æ„çš„)。 + +本地qemu使用opensbi,å‘çŽ°æ°¸è¿œåªæœ‰ä¸€ä¸ªæ ¸èƒ½è¿›å…¥åˆ°sæ€ã€‚ + +###### GDB调试SBI: + +直接使用opensbi官方releaseçš„bin进行debug,symbol-file的对应关系并ä¸å¥½ã€‚需本地编译opensbi,并在GDBä¸add-symble-fileæ·»åŠ SBI-elf文件。 + +opensbi编译: `make CROSS_COMPILE=riscv64-linux-gnu- PLATFORM=generic` + +GDB调试å‘现,目å‰å¤„于处ç†å™¨æ ¸çš„ å·²ç»æš‚åœçŠ¶æ€ + +``` +(gdb) i threads + Id Target Id Frame +* 1 Thread 1.1 (CPU#0 [halted ]) 0x0000000080009630 in ?? () + 2 Thread 1.2 (CPU#1 [running]) 0x0000000080009630 in ?? () + 3 Thread 1.3 (CPU#2 [halted ]) 0x0000000080009630 in ?? () + 4 Thread 1.4 (CPU#3 [running]) core::sync::atomic::atomic_load ( + dst=0x8050a4e0 <os::AP_CAN_INIT> "\000", order=core::sync::atomic::Ordering::Relaxed) + at /rustc/9ad5d82f822b3cb67637f11be2e65c5662b66ec0/library/core/src/sync/atomic.rs:2365 +``` + +``` +(gdb) where +#0 sbi_hsm_hart_wait (hartid=<optimized out>, scratch=0x80043060) + at /home/dhz/workspace/opensbi-1.0/lib/sbi/sbi_hsm.c:121 +#1 sbi_hsm_init (scratch=scratch@entry=0x80043000, hartid=hartid@entry=0, cold_boot=cold_boot@entry=0) + at /home/dhz/workspace/opensbi-1.0/lib/sbi/sbi_hsm.c:206 +#2 0x00000000800006f6 in init_warm_startup (hartid=0, scratch=0x80043000) + at /home/dhz/workspace/opensbi-1.0/lib/sbi/sbi_init.c:360 +#3 init_warmboot (hartid=0, scratch=0x80043000) + at /home/dhz/workspace/opensbi-1.0/lib/sbi/sbi_init.c:436 +#4 sbi_init (scratch=0x80043000) at /home/dhz/workspace/opensbi-1.0/lib/sbi/sbi_init.c:500 +#5 0x00000000800003c4 in _start_warm () at /home/dhz/workspace/opensbi-1.0/firmware/fw_base.S:501 + + +(gdb) i r mie +mie 0x8 8 +(gdb) i r mip +mip 0x8 8 +(gdb) i r mstatus +mstatus 0x0 SD:0 VM:00 MXR:0 PUM:0 MPRV:0 XS:0 FS:0 MPP:0 HPP:0 SPP:0 MPIE:0 HPIE:0 SPIE:0 UPIE:0 MIE:0 HIE:0 SIE:0 UIE:0 + +``` + +ä¸Šè¿°å…¶ä»–ä¸‰ä¸ªæ ¸è¿è¡Œåˆ°æœªçŸ¥å¦‚下 + +``` +### opensbi-1.0/lib/sbi/sbi_hsm.c:121 + +119 /* Wait for hart_add call*/ +120 while (atomic_read(&hdata->state) !=SBI_HSM_STATE_START_PENDING) { +121 wfi(); +122 }; +``` + +在qemuä¸ä½¿ç”¨sbi_get_hart_statusæŸ¥çœ‹æ ¸çŠ¶æ€æ—¶å‘现其返回值也为0(started状æ€ï¼‰ 。 + +``` +#define SBI_HSM_STATE_STARTED 0x0 +#define SBI_HSM_STATE_STOPPED 0x1 +#define SBI_HSM_STATE_START_PENDING 0x2 +#define SBI_HSM_STATE_STOP_PENDING 0x3 +#define SBI_HSM_STATE_SUSPENDED 0x4 +#define SBI_HSM_STATE_SUSPEND_PENDING 0x5 +#define SBI_HSM_STATE_RESUME_PENDING 0x6 + + +### 通过sbiæŸ¥çœ‹æ ¸çŠ¶æ€ +[ INFO ] "src/main.rs" @ 76 : (Boot Core) Riscv hartid 3 run +[wakeup_other_cores] hartid: 0 status:1 +[ DEBUG ] "src/multicore/mod.rs" @ 45 : sbi_hart_start hartid: 0 -> ret: 0 +[wakeup_other_cores] hartid: 1 status:1 +[ DEBUG ] "src/multicore/mod.rs" @ 45 : sbi_hart_start hartid: 1 -> ret: 0 +[wakeup_other_cores] hartid: 2 status:1 +[ DEBUG ] "src/multicore/mod.rs" @ 45 : sbi_hart_start hartid: 2 -> ret: 0 +``` + +æ ¸é—´è½¬åŒ–çŠ¶æ€å›¾å¦‚下: + + + +所以åªç”¨ä½¿ç”¨ sbi_hart_start 唤醒 ï¼ˆè™½ç„¶å½“å‰æ ¸çжæ€å·²ç»ä¸º0/started) + +综上得出目å‰çš„解决方法: + +之å‰å¤šæ ¸å¯åŠ¨çš„æ–¹æ³•(在sæ€æ‹¦æˆªæ ¸ã€ä½¿ç”¨ipi)ä¸è¡Œï¼Œéœ€è¦ä½¿ç”¨SBIæ ¸çŠ¶æ€ç®¡ç†æ‰©å±•(hsm)的处ç†å™¨æ ¸å¯åŠ¨å‡½æ•°ç›´æŽ¥ä»¥Sæ€ä»ŽæŸä¸ªå†…å˜åœ°å€å¼€å§‹æ‰§è¡Œä»¥å¯åЍ + +需è¦ä½¿ç”¨å®Œæ•´çš„ecall, æ¤å‰å†…æ ¸åªä½¿ç”¨äº†sbi-legacy的功能 + +### 当å‰è¿˜æœªè§£å†³çš„一个问题 + +SBI hart start return value (hart_start返回值/æ ¸çŠ¶æ€ç›¸å…³é—®é¢˜ï¼‰ + +本地hifiveè¿è¡ŒçŽ¯å¢ƒï¼ŒåŸºäºŽuboot通过nfså°†å†…æ ¸é•œåƒåŠ è½½åˆ°å†…å˜0x8020_0000处。然åŽè·³è½¬åˆ°0x8020_0000执行。 + +与远程æäº¤å¹³å°çŽ¯å¢ƒç±»ä¼¼ ,区别在于SDcard内容ä¸åŒã€‚本地SDcardå‰åŠéƒ¨åˆ†å˜å‚¨äº†Ubootç‰æ•°æ®ï¼Œä»Ž10274å¼€å§‹æ‰æ˜¯æˆ‘们所需的文件系统。 + +hifive上è¿è¡Œçš„问题: + +大部分时候除了boot hardå¤–ï¼Œåªæœ‰ä¸¤ä¸ªæ ¸èƒ½è¢«å”¤é†’ï¼Œç¬¬å››ä¸ªæ ¸å¿ƒåœ¨sbi_hart_start之åŽè¿”回-6(表示该hartå·²ç»start)。 + +ä¸”åœ¨å°‘éƒ¨åˆ†æ—¶é—´å››ä¸ªæ ¸å¿ƒå…¨éƒ¨å¯åŠ¨çš„æ—¶å€™æžå¤§æ¦‚çŽ‡ä¼šå¡æ»ï¼ˆæœªçŸ¥ï¼ŒåŽŸå› åº”è¯¥æ¯”è¾ƒå¤æ‚,目å‰å¹¶æœªæ•´æ˜Žç™½ï¼‰ + +ç›®å‰çš„è§£å†³æ–¹æ³•æ˜¯ï¼Œåœ¨ç¬¬å››ä¸ªæ ¸å”¤é†’å¤±è´¥æ—¶è¾“å‡ºlog,然åŽä¸ç®¡å®ƒã€‚ä»…ä¿è¯ç¨³å®šä¸‰æ ¸è¿è¡Œç¨³å®š + +### åœ¨å¤šæ ¸å¯åŠ¨æ–¹é¢ï¼ŒçœŸå®žä¸Šæ¿å与qemu仿真环境有较大的ä¸åŒï¼ï¼ï¼ + +qemu上æ¯ä¸ªæ ¸å¿ƒéƒ½æ˜¯å¯åЍåŽï¼Œç›´æŽ¥è·³è½¬åˆ°0x8000_0000以Mæ€ä»ŽOpensbi开始è¿è¡Œå’Œåˆå§‹åŒ–, + +hifiveå¹³å°ä¸Šå·²ç»å®Œæˆäº†æ‰€æœ‰æ ¸å¿ƒçš„åˆå§‹åŒ–ï¼Œä¸”å››ä¸ªæ ¸éƒ½åœ¨è¿è¡ŒUboot(应该)。Opensbiæ˜¯ç›´æŽ¥è¢«åŠ è½½åˆ°ä¸€å®šåŒºåŸŸçš„å†…å˜ä¸æä¾›å†…æ ¸æ‰€éœ€çš„è¿è¡Œæ—¶æœåŠ¡ã€‚ + +在hifiveå¹³å°ä¸Šçš„å†…æ ¸è¿è¡Œï¼š + + ç”±UbootåŠ è½½å†…æ ¸é•œåƒåˆ°ä»¥0x8020_0000开始的一端内å˜åŒºåŸŸï¼Œç„¶åŽä¼šè·³è½¬åˆ°0x8020_0000æ‰§è¡Œå†…æ ¸é•œåƒï¼ˆåªæœ‰ä¸€ä¸ªæ ¸è·³è½¬è¿‡åŽ»ï¼‰ã€‚å…¶ä»–æ ¸å¿ƒçš„çŠ¶æ€é€šè¿‡sbi_get_hart_status查看å‘现都为1(stop状æ€ï¼‰ã€‚调用sbi_hart_startæŒ‡å®šå…¶ä½™æ ¸åˆ°å†…æ ¸å…¥å£è¿›è¡Œæ‰§è¡Œæ—¶ä¼šæ¯”è¾ƒç¨³å®šçš„æœ‰ä¸€ä¸ªæ ¸æ‰§è¡Œsbiè°ƒç”¨å¤±è´¥ï¼ŒåŽŸå› æ˜¯(-6)è¯¥æ ¸å·²ç»å¤„于start状æ€ã€‚todo + +å‚考 : Rust-sbi官方文档 + + 官方仓库 https://github.com/riscv-non-isa/riscv-sbi-doc + + sbiæ‰‹å†Œä¸‹è½½åœ°å€ https://github.com/riscv-non-isa/riscv-sbi-doc/releases/download/v1.0.0/riscv-sbi.pdf