作者:孙靖(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...)|编辑