ãã¼ãããã®OSèªä½å ¥éãã Rust ã§ãã (第17ç« )
ãã¤ã®éã«ããã®ã·ãªã¼ãºã10è¨äºãè¶ ãã¦ãã¾ããã æ¬è¨äºã§11è¨äºç®ã§ãã é£æãããã¤ãè¶ãããªãã¨ãæçµç« ã¾ã§ç¶ããããããªæ°ããã¦ãã¾ããã é å¼µã£ã¦ããã¾ãããã
- ã·ãªã¼ãºæåã®è¨äº: 「ゼロからのOS自作入門」を Rust でやる (第1章~第4章) - gifnksmの雑多なメモ
- åå: 「ゼロからのOS自作入門」を Rust でやる (第14章~第16章) - gifnksmの雑多なメモ
- é¢é£è¨äºä¸è¦§: ゼロからのOS自作入門 カテゴリーの記事一覧 - gifnksmの雑多なメモ
第17ç«
FATãã¡ã¤ã«ã·ã¹ãã ãæ±ããããã«ããç« ã§ãã ãã®ç« ã§ã¯FATãã¡ã¤ã«ã·ã¹ãã ã®ã«ã¼ããã£ã¬ã¯ããªã®ãã¡ã¤ã«ä¸è¦§ãåºåã§ããããã«ãã¾ãã
FAT ãã¡ã¤ã«ã·ã¹ãã ãã«ã¼ãã«ããåç §ã§ããããã«ãã (day17a)
ãã¼ãããã®OSèªä½å ¥éãã§ã¯ãã¡ã¤ã«ã·ã¹ãã ã®å®è£ ã«ãããããããã¯ããã¤ã¹ããã®èªã¿æ¸ãã¯ãµãã¼ããã¦ãã¾ããã 代ããã«ãã¡ã¢ãªã®ä¸é¨åããããã¯ããã¤ã¹ã¨è¦ãªããã¡ã¢ãªä¸ã«ãã¡ã¤ã«ã·ã¹ãã ãæ§ç¯ãã¾ãã
C++ çå®è£ ã§ã¯ UEFI ã®ãããã¯ããã¤ã¹èªã¿åãæ©è½ã使ãã OS ã®ãã¼ãã¤ã¡ã¼ã¸ã®å é é¨åãã¡ã¢ãªä¸ã«ã³ãã¼ãããã¨ã§ã¡ã¢ãªä¸ã«ãã¡ã¤ã«ã·ã¹ãã ãæ§ç¯ãã¦ãã¾ããã
Rust çå®è£
ã§ã¯ããã¼ããã¼ãã¼ã¯ bootloader
ã¯ã¬ã¼ããå©ç¨ãã¦ãããã UEFI ã«æãå
¥ããã®ã¯é¢åã§ã (bootloader
ã¯ã¬ã¼ãã fork ããªãã¨ãããªã)ã
ä»åã¯ãbuild.rs
ã§å¿
è¦ãªãã¡ã¤ã«ãå«ãã FATã¤ã¡ã¼ã¸ãã¡ã¤ã«ãä½æãããã¤ããªãã¼ã¿ã¨ãã¦ã«ã¼ãã«æ¬ä½ã«ãªã³ã¯ããããã«ãã¾ããã
ã«ã¼ãã«ã®ãã¤ããªãµã¤ãºã16MiBå¢å ãã¾ããã許容ç¯å²ã§ãããã
build.rs
ã®å¦çã®æµãã¯ä»¥ä¸ã®éãã§ãã
- FAT ãã¡ã¤ã«ã·ã¹ãã ã®ã¤ã¡ã¼ã¸ãã¡ã¤ã«ãä½æ
llvm-objcopy
ã§ä¸è¨ã¤ã¡ã¼ã¸ãã¡ã¤ã«ã®å 容ãå«ããªãã¸ã§ã¯ããã¡ã¤ã«ãä½æ (_binary_fs_fat_start
ã¨ããã·ã³ãã«ã§ãã¡ã¤ã«ã·ã¹ãã ã«ã¢ã¯ã»ã¹ã§ããããã«ãã)llvm-ar
ã§ä¸è¨ãªãã¸ã§ã¯ããã¡ã¤ã«ãå«ãéçã©ã¤ãã©ãªãä½æããææç©ã«ãªã³ã¯ãããã cargo ã«æ示ãã
å½åã¯16Miè¦ç´ ã®ãã¤ãé
åãå®ç¾©ãã Rust ã½ã¼ã¹ã³ã¼ããåºåããã«ã¼ãã«å´ã½ã¼ã¹ã³ã¼ããã include!()
ããæ¹å¼ã試ãã¦ãã¾ããããã«ã¼ãã«ã®ã³ã³ãã¤ã«ãçµãããªããªã£ã¦ãã¾ã£ããããéçã©ã¤ãã©ãªããªã³ã¯ããæ¹å¼ã«å¤æ´ãã¾ããã
FAT ãã¡ã¤ã«ã·ã¹ãã ã®ä½æã«ã¯ fatfs
ã¯ã¬ã¼ã ãå©ç¨ãã¾ããã
ãã¼ãããã®OSèªä½å
¥éãã§ç´¹ä»ããã¦ãã mkfs.fat
ã mount.
ã使ãæ¹æ³ã¨ç°ãªããroot 権éãä¸è¦ã«ãªãã®ãè¯ãã§ããã
ã«ã¼ããã£ã¬ã¯ããªã®ãã¡ã¤ã«ãä¸è¦§ãã (day17b)
åç¯ã§è¿½å ãããã¡ã¤ã«ã·ã¹ãã ããã«ã¼ããã£ã¬ã¯ããªã®ãã¡ã¤ã«ä¸è¦§ãåå¾ã表示ããã³ãã³ã ls
ã追å ãã¾ãã
C++çã¨åãããã«å®è£ ããã°è¯ããã¨æããããçµæ§å¼ã£ãããã¾ããã ã¨ããã®ãããã¼ãããã®OSèªä½å ¥éãã§ã¯ãã¡ã¤ã«ã·ã¹ãã ã FAT32 ã§ãããã¨ãåæã¨ããããã®ã§ããã ä»å Rust çã§ã«ã¼ãã«ã«ãªã³ã¯ããããã¡ã¤ã«ã·ã¹ãã 㯠FAT16 ã§ãã£ããããæ§é ä½ã¡ã³ãã®ã¢ã¯ã»ã¹æ¹æ³ãªã©ã大ããç°ãªã£ã¦ããããã§ãã FAT ã®ä»æ§ä¸ FAT32 ã«ã§ããã®ã¯ããªã¥ã¼ã ãµã¤ãºã 32MiB 以ä¸ã®å ´åã®ã¿ã§ãä»åä½æãã 16MiB ã®ãã¡ã¤ã«ã·ã¹ãã 㯠FAT12 ã FAT16 ã«ããããå¾ãªãã£ãããã§ãã
ä»æ¹ããªãã®ã§ã FAT12/FAT16/FAT32 ã«å¯¾å¿ã§ããããã«ãã¾ããã å®è£ ã«ãããã以ä¸ã®ãµã¤ãã大ãã«åèã«ããã¦é ãã¾ããã
- Microsoft Extensible Firmware Initiative FAT32 File System Specification
- FATãã¡ã¤ã«ã·ã¹ãã ã®ããã¿ã¨æä½æ³
ãã¡ã¤ã«ã·ã¹ãã ã®è©³ç´°ã¯ã§ããã ã fat
ã¢ã¸ã¥ã¼ã«ã«éããããã«ãã¦ã terminal
ã¢ã¸ã¥ã¼ã«ããã¯è©³ç´°ããã¾ãæèããªãã¦è¯ãããã«ãããã¨ãã¦ãã¾ãã
ã¾ã æ½è±¡åã¯ååã§ã¯ãªãæããªã®ã§ãããããæ©è½ã追å ããªãã綺éºã«ãã¦ãããããªãã¨æãã¾ãã
ã¾ã¨ã
æ¯è¼ççãç« ã§ãããã FAT12/16 ã§ã®ãã¡ã¤ã«ã¢ã¯ã»ã¹æ¹æ³ã調ã¹ãªããã³ã¼ãã£ã³ã°ããå¿ è¦ããããªããªã大å¤ã§ããã æ¬¡ç« ã¯ã¤ãã«ã¢ããªã±ã¼ã·ã§ã³ãå®è¡ã§ããããã«ãªãã¾ãã ã¦ã¼ã¶ã¼ã©ã³ãã®ããã°ã©ã ã rust ã§æ¸ããããã®ã§ãããæããã¦ãã¾ãããã®ã§ããããï¼ æ¬¡ç« ãã楽ãã¿ã«ã
- ã·ãªã¼ãºæåã®è¨äº: 「ゼロからのOS自作入門」を Rust でやる (第1章~第4章) - gifnksmの雑多なメモ
- åå: 「ゼロからのOS自作入門」を Rust でやる (第14章~第16章) - gifnksmの雑多なメモ
- é¢é£è¨äºä¸è¦§: ゼロからのOS自作入門 カテゴリーの記事一覧 - gifnksmの雑多なメモ