JigLoveSmile的专栏

一个编程学习天地,欢迎各位编程爱好者与我一起领略编程的乐趣,共享其中的乐趣

原创 FAT12磁盘格式 收藏

新一篇: 我累哟~~! | 旧一篇: 搭建开发环境,编写必要工具

作者:孙靖(Jig)
若要转贴或使用本文章介绍的技术,请在你发布的文章或作品中注明出处。

    在写这片文章之前我想了很久,后来发现也许到了这我们就得先把文件系统中底层的函数先搞定,而加载内核的工作我们让C程序来完成。
    好的,下面让我们来研究一下 FAT12 磁盘格式。
    我们先用我们的虚拟机创建一张新软盘(我取名为 Smile.vfd),然后我们直接用我们前面编写的软盘读写工具查看Smile.vfd,在生成的 查看.txt 文件中,我们可以看到以下内容:

表1 
0 扇区
0  eb 3c 90 56 50 43 34 20  20 20 20 00 02 01 01 00   怴PC4        
10  02 e0 00 40 0b f0 09 00  12 00 02 00 00 00 00 00   @           
20  00 00 00 00 00 00 29 d2  07 04 22 4e 4f 20 4e 41        ) "NO NA  
30  4d 45 20 20 20 20 46 41  54 31 32 20 20 20 fa 33  ME    FAT12      
40  c0 8e d0 bc 00 7c 16 07  bb 78 00 36 c5 37 1e 56  缼屑 |粁 6 V  
50  16 53 bf 3e 7c b9 0b 00  fc f3 a4 06 1f c6 45 fe  S |   艵  
60  0f 8b 0e 18 7c 88 4d f9  89 47 02 c7 07 3e 7c fb   |圡鶋G >|  
70  cd 13 72 79 33 c0 39 06  13 7c 74 08 8b 0e 13 7c   ry3 |t |  
80  89 0e 20 7c a0 10 7c f7  26 16 7c 03 06 1c 7c 13    | | ||  
90  16 1e 7c 03 06 0e 7c 83  d2 00 a3 50 7c 89 16 52  ||円 | R  
a0  7c a3 49 7c 89 16 4b 7c  b8 20 00 f7 26 11 7c 8b  || K|   |  
b0  1e 0b 7c 03 c3 48 f7 f3  01 06 49 7c 83 16 4b 7c   |肏黧I| K|  
c0  00 bb 00 05 8b 16 52 7c  a1 50 7c e8 92 00 72 1d     R||钂 r  
d0  b0 01 e8 ac 00 72 16 8b  fb b9 0b 00 be e6 7d f3   璎 r孄  炬}  
e0  a6 75 0a 8d 7f 20 b9 0b  00 f3 a6 74 18 be 9e 7d      螃t緸}  
f0  e8 5f 00 33 c0 cd 16 5e  1f 8f 04 8f 44 02 cd 19  鑏 3劳^ 廌   
100  58 58 58 eb e8 8b 47 1a  48 48 8a 1e 0d 7c 32 ff  XXX腓婫HH |2  
110  f7 e3 03 06 49 7c 13 16  4b 7c bb 00 07 b9 03 00  縻I|K|     
120  50 52 51 e8 3a 00 72 d8  b0 01 e8 54 00 59 5a 58  PRQ  r匕鑄 YZX  
130  72 bb 05 01 00 83 d2 00  03 1e 0b 7c e2 e2 8a 2e  r  円  |忖   
140  15 7c 8a 16 24 7c 8b 1e  49 7c a1 4b 7c ea 00 00  | $| I||    
150  70 00 ac 0a c0 74 29 b4  0e bb 07 00 cd 10 eb f2  p  纓)    腧  
160  3b 16 18 7c 73 19 f7 36  18 7c fe c2 88 16 4f 7c  ;|s | O|  
170  33 d2 f7 36 1a 7c 88 16  25 7c a3 4d 7c f8 c3 f9  3吟6| %||  
180  c3 b4 02 8b 16 4d 7c b1  06 d2 e6 0a 36 4f 7c 8b  么 M| 益6O|  
190  ca 86 e9 8a 16 24 7c 8a  36 25 7c cd 13 c3 0d 0a  蕟閵$| %|    
1a0  4e 6f 6e 2d 53 79 73 74  65 6d 20 64 69 73 6b 20  Non-System disk   
1b0  6f 72 20 64 69 73 6b 20  65 72 72 6f 72 0d 0a 52  or disk errorR  
1c0  65 70 6c 61 63 65 20 61  6e 64 20 70 72 65 73 73  eplace and press  
1d0  20 61 6e 79 20 6b 65 79  20 77 68 65 6e 20 72 65   any key when re  
1e0  61 64 79 0d 0a 00 49 4f  20 20 20 20 20 20 53 59  ady IO      SY  
1f0  53 4d 53 44 4f 53 20 20  20 53 59 53 00 00 55 aa  SMSDOS   SYS  U  
1 扇区
200  f0 ff ff 00 00 00 00 00  00 00 00 00 00 00 00 00                  
210  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00                    
     
好的,我们来仔细看看O扇区的内容。
    0扇区也就是我们的引导扇区,记得我们前面把自己的程序写入这个扇区后再在系统中去查看软区却提示我们没有插入磁盘,那说明软区没有识别我们插入的磁盘,但我们的软盘也没有坏,那唯一的可能就是缺失了某些信息让驱动器无法识别,是的,我们上面0扇区的内容就是那能让系统软区识别插入的软盘的信息。(大家也可以在真实的软盘里,用TC使用biosdisk()函数把0扇区的内容读出,看看是否和我下面列出的内容一样)
 
引导扇区的格式:
 
表2
名称            开始字节       长度      内容         Smile.vfd的内容
BS_jmpBoot      0             3        一个跳转指令          " 怴"
BPB_OEMName     3             8        广商名          "PC4     "
BPB_BytsPerSec  11            2        每扇区字节数          0x200
BPB_SecPerClus  13            1        每簇扇区数            0x1
BPB_RsvdSecCnt  14            2        Boot记录占多少扇区    0x1
BPB_NumFATs     16            1        共有多少FAT表         0x2
BPB_RootEntCnt  17            2        根目录文件数最大值     0xe0
BPB_TotSec16    19            2        扇区总数              0xb40
BPB_Media       21            1        介质描述符            0xf0
BPB_FATSz16     22            2        每FAT扇区数           0x9
BPB_SecPerTrk   24            2        每磁道扇区数           0x12
BPB_NumHeads    26            2        磁头数                0x2
BPB_HiddSec     28            4        隐藏扇区数             0
BPB_TotSec32    32            4        如果BPB_TotSec16=0    0
                                       由这个记录扇区总数
BPB_DrvNum      36            1        中断13的驱动号          0
BPB_Reservedl   37            1        未使用                 0
BPB_BootSig     38            1        扩展引导标记            0x29
BPB_Vo1ID       39            4        卷序列号               " "N"
BPB_Vo1Lab      43            11       卷标             "O NA ME    "
BPB_FileSysType 54            8        文件系统类型        "FAT12   "
引导代码及其它    62            448      代码等等               未知
结束标志         510           2        55 aa                 0xaa55
 
大家仔细耐心的拿 查看.txt 的内容对照上表,看看。
    这就是磁盘的内部信息,(不要小看它哟,我们以后的文件系统就靠它啦)简单的说,我们就是通过他来和下面我们要看到的FAT表等来确定磁盘的当前具体存储情况。(具体说就是磁盘中存了那些文件,分别存在哪些扇区,等信息)我想大家看了以上的内容一定有很感性的认识啦,那我们以后在写引导程序的时候,必须把 “引导代码及其它”以前的信息也写到程序的开头,这样在引导程序写入磁盘后照样能让软区识别软盘。
    好的,让我们来验证一下。开启虚拟的DOS系统,然后加载我们前面用到的 Jig.vfd。然后输入
 
c:>a: 回车
 
看到什么消息?
 
General failure reading drive A
Abort, Retry, Fail 
 
嘿嘿!系统提示你没有找到软盘,当然找不到,因为盘中没有FAT12磁盘格式的相关信息。那好,我们来改进我们前面的 shiyan.asm,把我们上面介绍的内容加进去。好的,编写如下代码:
 
;shiyan2.asm
org 07c00h
 jmp short SHOW  ; Start to boot.
 nop    ; 这个 nop 不可少
 ; 下面是 FAT12 磁盘的头
 BS_OEMName DB 'ForrestY' ; OEM String, 必须 8 个字节
 BPB_BytsPerSec DW 512  ; 每扇区字节数
 BPB_SecPerClus DB 1  ; 每簇多少扇区
 BPB_RsvdSecCnt DW 1  ; Boot 记录占用多少扇区
 BPB_NumFATs DB 2  ; 共有多少 FAT 表
 BPB_RootEntCnt DW 224  ; 根目录文件数最大值
 BPB_TotSec16 DW 2880  ; 逻辑扇区总数
 BPB_Media DB 0xF0  ; 媒体描述符
 BPB_FATSz16 DW 9  ; 每FAT扇区数
 BPB_SecPerTrk DW 18  ; 每磁道扇区数
 BPB_NumHeads DW 2  ; 磁头数(面数)
 BPB_HiddSec DD 0  ; 隐藏扇区数
 BPB_TotSec32 DD 0  ; 如果 wTotalSectorCount 是 0 由这个值记录扇区数
 BS_DrvNum DB 0  ; 中断 13 的驱动器号
 BS_Reserved1 DB 0  ; 未使用
 BS_BootSig DB 29h  ; 扩展引导标记 (29h)
 BS_VolID DD 0  ; 卷序列号
 BS_VolLab DB 'Jig        '; 卷标, 必须 11 个字节
 BS_FileSysType DB 'FAT12   ' ; 文件系统类型, 必须 8个字节 
 
SHOW:
 mov ah, 0x0e
 mov al, 't'
 mov bl, 7
 int 0x10
 
times 510 - ($ - $$)  db 0  ; 填充剩下的空间,使生成的二进制代码恰好为512字节
dw  0xaa55    ; 结束标志
 
OK,用NASM编译成 shiyan2.bin,然后用 writefolly.exe 写入 Smile.vfd 中,然后开启裸机加载 Smile.vfd,看到了没?和前面加载 Jig.vfd 一样,显示了一个字母 't'。然后开启DOS虚拟机,DOS系统启动后加载 Smile.vfd,然后输入命令:
 
c:>a: 回车
a:>
 
看到了没有,这回不是
 
General failure reading drive A
Abort, Retry, Fail 
 
而是跳出了 a:>,说明系统识别出了软盘,呵呵看来我们成功了。好的,现在我们可以继续下面的工作。(其实这个磁盘格式完全可以由我们自己来定,可那样很不现实,因为我们自己定的磁盘格式未必就科学,再则,我们用FAT12格式是DOS系统支持的,所以这也是对我们后面的文件系统的一个技术支持,等我们真的技术过硬时,要是有那份心就自己再去发明种文件格式吧,呵呵)
    下面,我们要来看看直接与我们后面文件系统相关的 FAT 表。
    通过上面的学习,我们可以把磁盘化为下面简单的几部分,如图:
 
表3
┎───────────────┒
┇数据区(长度非固定)          ┇
┠───────────────┨
┇根目录区(长度非固定,需计算)┇
┠───────────────┨
┃FAT2     10-18扇区            ┃
┠───────────────┨
┃FAT1     1-9扇区              ┃
┠───────────────┨
┃引导扇区  0扇区               ┃
┖───────────────┚
 
我们已经详细的了解了 0扇区 的内容,那接下来我们要看看 FAT表 区。
 
    我们看到FAT1,1-9扇区。我们来看看 1 扇区,除了开头几个 0f ff ff 就没什么啦,那我们再看看FAT2,10-18扇区:
 
表4
10 扇区
1400  f0 ff ff 00 00 00 00 00  00 00 00 00 00 00 00 00                  
1410  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00                    
1420  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00                    
1430  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00                    
1440  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00                    
1450  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00                    
1460  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00                    
1470  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00                    
1480  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00                    
1490  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00                    
14a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00                    
14b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00                    
......
 
怎么?和 FAT1 的一样?呵呵,他们就是一样的, FAT2 就是 FAT1 的一个备份(其实我也不知道他为什么要备份,我觉得很少用到)。那FAT表的具体作用是什么?呵呵,其实FAT表就记录了我们前面所说的磁盘中在哪些扇区储存了哪些文件。而我们FAT表的0,1项是不会使用的,所以 f0 ff ff 是每张磁盘中固有的,我们暂时不理会他们。我想说到在这,大家可能会纳闷,你说了是0,1项不用,那为什么会用到 f0 ff ff 3个字节呢?嘿嘿,这个我也没办法,当初FAT12磁盘格式就是这样规定的,每个FAT项占 1个半 字节。
    他的具体算法是这样,比如第0项是由第二字节的后半部和第一字节的组合,而第1项是由第三字节和第二字节的前半部组合。如果我们把前0,1写成 f0 Ff ff,那么第0项就是 ff0, 而第1项是 ffF。为了我们更直观的了解,我们重新创建虚拟盘 Smile.vfd,然后启动虚拟DOS系统。把shiyan2.asm 所在目录设置为DOS的共享文件夹(这个去看看 Vritual PC 的具体用法,我是设置为了 x 盘)。然后转到 x 盘,输入以下命令:
 
x:>copy shiyan2.asm a:shiyan2.asm
 
这样我们就把 shiyan2.asm 拷贝到我们的虚拟软盘 Smile.vfd 中了。(你可以输入dir命令在a盘看看是否有shiyan2.asm)然后退出虚拟机,重新用我们的 writefolly.exe 将 Smile.vfd 的内容写到文本文件中。我们可以看到:
 
表5
1 扇区
200  f0 ff ff 03 40 00 ff 0f  00 00 00 00 00 00 00 00   @           
210  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00                    
220  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00                    
230  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00              
 
看,和空的软盘有区别,后面多了些数字,那这些又是做什么的呢?其实他是 shiyan2.asm 所在的扇区的记录。要了解他,我们必须先去了解一下根目录。
    首先我们要了解怎么计算根目录的长度(根目录不固定需计算)。其实在表2中BPB_RootEntCnt 就给出答案啦,最多为 0xe0 个文件。而我们的 根目录区中的条目格式 如下:
 
表6
名称              偏移字节          长度        功能
DIR_Name         0                0xb         文件名8字节,扩展名3字节
DIR_Attr         0xb              1           文件属性
保留位            0xc              10          保留位
DIR_WrtTime      0x16             2           最后写入时间
DIR_WrtData      0x18             2           最后写入日期
DIR_FstClus      0x1a             2           此条目对应的开始扇区
DIR_FileSize     0x1c             4           文件大小
 
从表6可以计算出根目录中一个条目占32字节,所以整个根目录在占有 0xe0 * 32 / 512 = 14 个扇区。加之根目录从第19个扇区开始,所以我们的数据区是从第 33 扇区开始。特别注意,数据区的第0扇区,被标记为2扇区,这就是为什么我们FAT表的0,1项不用,是和这相对应的。
    好的,有了以上的基础,我们来查看shiyan2.asm在磁盘中存放情况,我们看到根目录区:
 
表7
19 扇区
2600  41 73 00 68 00 69 00 79  00 61 00 0f 00 55 6e 00  As h i y a  Un   
2610  32 00 2e 00 61 00 73 00  6d 00 00 00 00 00 ff ff  2 . a s m       
2620  53 48 49 59 41 4e 32 20  41 53 4d 20 00 00 d0 5e  SHIYAN2 ASM   衈  
2630  b6 34 00 00 00 00 db 05  b6 34 02 00 44 04 00 00          D    
2640  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  
 
对照表6,我们可以看到 shiyan2.asm 在数据区开始扇区为 02 00,即0x02。即数据区的第0扇区(上面说过,数据区的第0扇区被标记为第2扇区),其文件大小为 44 04 00 00,即0x00000444 = 1092字节。呵呵,查看一下对吧?
    我们知道shiyan2.asm是从数据区的第0扇区开始,可shiyan2.asm共1092字节,一个扇区放不下啊。好的,我们再返回来看表5(就是FAT1表啦)。从FAT1表的第二项开始,数字为 03 40 00 ff 0f,即FAT1的第二项为 0x003,第三项为 0x004,第四项为 0xfff。在FAT表中0xfff表示文件结束(而0xff7则表示这是个坏扇区)。由此可以知我们的 shiyan2.asm 储存在数据区的第 0,1,2扇区中(即标记的2,3,4扇区)。特别注意,大家不要看我们这个例子文件是连续存放的,要是你的文件很大,也许DOS系统(当然包括WINDOWS)并不是把文件存在连续的扇区中。所以我们需要FAT表来查找文件存在哪些扇区中。可到这,我却有个想法。我们是通过DOS系统,或WINDOWS系统向软盘中存放文件的,那在写入文件后,他们都对FAT表,根目录进行了更新。所以到时候我们自己的系统在对磁盘进行操作时,也是要对FAT表等进行更新的。那对文件的存放是采用连续的还是不连续的,全由我们自己说的算啦。哈哈想着就是爽,不过就目前来说我们得听DOS系统的,嘿嘿。
    看到这,大家知道怎么在磁盘中去找文件了吧,归纳起来就是:
1.在根目录下去找文件条目,了解文件在数据区的开始存放扇区。
2.在FAT表中,获取文件被存放的扇区。
3.在数据区,根据1,2获取的信息读取文件。
 
    看到这,你一定很高兴。“那我们可以开始我们文件系统的底层啦?”呵呵,还不是时候呢,大家考虑到了怎么在文件夹中找文件?或怎么找文件夹?文件路径怎么弄?下面我们就自己来实验,把它摸索出来。
 
 

停了很久没写啦,最近太忙啦。OK我们来看看文件夹那样的怎么样处理。               

我们知道,一个文件系统其实最重要的就是文件的路径,这样便于文件管理。可在磁盘中是怎么来实现文件夹的呢?那我们只能来实践一下,看看在FAT12磁盘中是怎么实现的。

我们在虚拟机重新创建一张磁盘(我取名为 lujing.vfd),按上文提到的方法我们用DOS命令来建立以下文件夹和文件。

boot.bin
boot
Jig\123\456\boot.bin
Smile\1234567890\boot123456.bin

好的,我们再查看一下此时磁盘里的内容:

表8
19 扇区

2600  4a 49 47 20 20 20 20 20  20 20 20 10 00 00 00 00  JIG              
2610  00 00 00 00 00 00 90 7b  ca 34 02 00 00 00 00 00        恵?       
2620  53 4d 49 4c 45 20 20 20  20 20 20 10 00 00 00 00  SMILE            
2630  00 00 00 00 00 00 93 7b  ca 34 03 00 00 00 00 00        搟?       
2640  41 62 00 6f 00 6f 00 74  00 2e 00 0f 00 28 62 00  Ab o o t .  (b   
2650  69 00 6e 00 00 00 ff ff  ff ff 00 00 ff ff ff ff  i n       
2660  42 4f 4f 54 20 20 20 20  42 49 4e 20 00 00 e6 7b  BOOT    BIN   鎨  
2670  ca 34 00 00 00 00 f5 5e  42 32 06 00 00 02 00 00  ?    鮚B2      
2680  41 62 00 6f 00 6f 00 74  00 00 00 0f 00 dd ff ff  Ab o o t    ?  
2690  ff ff ff ff ff ff ff ff  ff ff 00 00 ff ff ff ff      
26a0  42 4f 4f 54 20 20 20 20  20 20 20 20 00 00 e5 7e  BOOT          鍉  
26b0  ca 34 00 00 00 00 f5 5e  42 32 0a 00 00 02 00 00  ?    鮚B2      
26c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00    

看,我们可以看到“JIG        ”,“SMILE      ”,“BOOT    BIN ”,“BOOT        ”。很有意思把,他们不就是我们在跟目录下创建的文件和文件夹吗?那让我们来看看“Jig\123\456\boot.bin”。我们来依次寻找看这个路径是怎么实现的。我们看到


表9
2600  4a 49 47 20 20 20 20 20  20 20 20 10 00 00 00 00  JIG              
2610  00 00 00 00 00 00 90 7b  ca 34 02 00 00 00 00 00        恵?

表10
2660  42 4f 4f 54 20 20 20 20  42 49 4e 20 00 00 e6 7b  BOOT    BIN   鎨  
2670  ca 34 00 00 00 00 f5 5e  42 32 06 00 00 02 00 00  ?    鮚B2      
   

这里要提提FAT12中根目录格式。每个根目录区中没个条目占32个字节,他格式如下表:

表11
名称                                      偏移(字节)           长度(字节)                   描述
DIR_Name                          0                                0XB                                   文件名8字节,扩展名3字节
DIR_Attr                                0XB                          1                                         文件属性
保留位                                  0XC                           10                                       保留位
DIR_WrtTime                     0X16                         2                                         最后一次写入时间
Dir_WrtData                        0X18                         2                                        最后一次写入日期
Dir_FstClus                        0X1A                          2                                        此条目对应的开始扇区
DIR_FileSize                      0X1C                          4                                        文件大小

我们拿 表9 和 表10,分别来对照 表11。可以看到文件夹“JIG”和文件“BOOT.BIN”的根目录内容和表11规定的一样。而我们要怎么来区分根目录中的那个条目记录的是文件夹,哪个又是文件呢?仔细观察,我们可以发现,其区别只在文件名的名上。我们取前12个字节看“JIG        ”和“BOOT    BIN ”。看到没有?若根目录中的条目是文件夹,他文件名最后跟的是“”,而文件却是“ ”。(我开始还觉得文件长度也是判断的条件,可想想当一个文件内容为空时,我们也一样无法区别他是文件还是文件夹)
    好了,到这我们看 表9。他的开始扇区应该为 “02 00”,即0X0002,而且文件长度为0。那应该是数据区的第一个扇区即33号扇区,那我们去看看:

表12

33 扇区

4200  2e 20 20 20 20 20 20 20  20 20 20 10 00 00 00 00  .                
4210  00 00 00 00 00 00 90 7b  ca 34 02 00 00 00 00 00        恵?       
4220  2e 2e 20 20 20 20 20 20  20 20 20 10 00 00 00 00  ..               
4230  00 00 00 00 00 00 90 7b  ca 34 00 00 00 00 00 00        恵?        
4240  31 32 33 20 20 20 20 20  20 20 20 10 00 00 00 00  123              
4250  00 00 00 00 00 00 96 7b  ca 34 04 00 00 00 00 00        杮?       
4260  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00              
......

我看到这部分:

表13
4240  31 32 33 20 20 20 20 20  20 20 20 10 00 00 00 00  123              
4250  00 00 00 00 00 00 96 7b  ca 34 04 00 00 00 00 00        杮?       

通过“123        ”我们知道这个应该也是文件夹,然后我们看到他的开始扇区是“04 00”那应该是0X0004,即35扇区:

表14

35 扇区

4600  2e 20 20 20 20 20 20 20  20 20 20 10 00 00 00 00  .                
4610  00 00 00 00 00 00 96 7b  ca 34 04 00 00 00 00 00        杮?       
4620  2e 2e 20 20 20 20 20 20  20 20 20 10 00 00 00 00  ..               
4630  00 00 00 00 00 00 96 7b  ca 34 02 00 00 00 00 00        杮?       
4640  34 35 36 20 20 20 20 20  20 20 20 10 00 00 00 00  456              
4650  00 00 00 00 00 00 9c 7b  ca 34 05 00 00 00 00 00        渰?       
4660  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00                    

我们同样看到了“456        ”照上面我们可以找到0X005即第36扇区:

表15

36 扇区

4800  2e 20 20 20 20 20 20 20  20 20 20 10 00 00 00 00  .                
4810  00 00 00 00 00 00 9c 7b  ca 34 05 00 00 00 00 00        渰?       
4820  2e 2e 20 20 20 20 20 20  20 20 20 10 00 00 00 00  ..               
4830  00 00 00 00 00 00 9c 7b  ca 34 04 00 00 00 00 00        渰?       
4840  41 62 00 6f 00 6f 00 74  00 2e 00 0f 00 28 62 00  Ab o o t .  (b   
4850  69 00 6e 00 00 00 ff ff  ff ff 00 00 ff ff ff ff  i n       
4860  42 4f 4f 54 20 20 20 20  42 49 4e 20 00 00 f3 7b  BOOT    BIN   髙  
4870  ca 34 00 00 00 00 f5 5e  42 32 07 00 00 02 00 00  ?    鮚B2      
4880  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00                   

哈哈,看我们找到BOOT.BIN文件啦,从“0X0007”开始,且文件大小为一个扇区大小。由此我们就把“Jig\123\456\boot.bin”这个路径的构成方式给搞清楚啦,我们还可以去找找“Smile\1234567890\boot123456.bin”,肯定也是和前面一样。而且大家可以去看看我们创建的“1234567890”文件夹和“boot123456.bin”文件,由于他们的文件名超过11个字节所以以简要方式存储在磁盘中。“123456~1   ”和“BOOT12~1BIN ”。所以到这也许大家会觉得这多不爽,不支持长文件名。而且我们到时候要让自己的系统显示中文呢。呵呵,这个我也想,我现在也在考虑怎么去解决这个问题。要是实在麻烦我们就先放弃中文和长文件名。不过我觉得自己不会放弃的,中国人写的操作系统不支持在中文把也太不爽啦。

    好了,到此我们就可以去实现自己的文件系统啦,(不要惊讶,到这的确可以根据我们研究所得来做自己的文件系统啦)不过我们还需再仔细考虑一下能不能简化此种文件储存方式和长文件名的实现。
       

 这几天忙翻啦,不过我也已经打好注意,自己定义硬盘格式,我们来实现长文件名的实现(也是为了我们的系统是个支持中文的)我们后面就来做。

发表于 @ 2006年05月23日 11:56:00|评论(loading...)|编辑

新一篇: 我累哟~~! | 旧一篇: 搭建开发环境,编写必要工具

评论:没有评论。

发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © Jig