zoukankan      html  css  js  c++  java
  • 引入文件系统(二)

    说明:本文中的内容,主要来自于WB. YANG的一本书,书名《writeos-1.0-2-weekly》,建议看原文,提供链接http://download.csdn.net/detail/mishifangxiangdefeng/5869801

    一、    为什么要引入文件系统

    突破启动扇区512字节的限制
    对于512字节以后的内容,以文件的形式存入,可以很好地管理
    具体做法:
    (1)    使用某种文件系统对软盘格式化
    (2)    给启动扇区的代码加上寻找文件的功能
    (3)    加载执行文件
    (4)    启动扇区将系统控制权移给软盘上的文件

    二、    引入什么样的文件系统


    本文实现的是FAT12文件系统
    FAT文件系统存储结构如图所示:

    QQ图片20140614201320
    (1)    FAT1和FAT2,存储的是文件表项,每一项大小为12ibt,指向固定大小的文件“簇”。如果一个文件包含多个文件簇,表项的内容为文件的下一个簇号。
    (2)    根目录,用于根据文件名查找文件的第一个簇。
    (3)    数据区。
    (4)    存储空间分配的单位是簇,一个簇可以包含一个或多个扇区。在本文中,一个簇包含一个扇区。

    三、    怎样引入文件系统


    所谓引入文件系统,就是具体做法中的第1步,即使用FAT12文件系统对软盘格式化。
    所以,先看一下FAT12文件系统的“格式”:

    QQ图片20140614201504

    QQ图片20140614201540
    这是一个称为BPB(BIOS Parameter Block)的数据结构。要把它填入到扇区0中,填对了,格式化的工作基本上完成了。
    (1)    修改代码

    /*start*/
    .text
        jmp LABEL_START                /*Start to boot*/
        nop                            /*nop required*/
    
    /*=========================================================================================
    Name:FAT12 file system
    Time:Chapter 2.2
    Revision:2
    Reason:启动扇区的大小限制为512字节,如果要加载的内容多于512字节,就加不进去了。因此要引入文件系统。让启动扇区将系统控制权转移给文件系统中的某个文件,突破512字节的限制
    Method:软盘格式化的过程就是系统把文件系统信息写入到软盘上的过程。
    MeMo:
        FAT文件系统的主要信息,都被提供在前几个扇区内,其中第 0 号扇区尤其重要。在这个扇区内隐藏着一个叫做BPB(BIOS Parameter Block)的数据结构,一旦我们把这个数据结构写对了,格式化过程也基本完成了
        以下内容就是对BPB数据结构初始化
    =========================================================================================*/
    /*Floppy header of FAT12*/
    BS_OEMName:            .ascii    "windmiss"        /*OEM String, 8 bytes required*/
    BPB_BytsPerSec:        .2byte    512                /*Bytes per sector*/
    BPB_SecPerCluse:    .byte    1                /*Sector per clue*/
    BPB_ResvdSecCnt:    .2byte    1                /*Reversed sector count*/
    BPB_NumFATs:        .byte    2                /*Number of FATs*/
    BPB_RootEntCnt:        .2byte    224                /*Root entries count*/
    BPB_TotSec16:        .2byte    2880            /*Total sector number*/
    BPB_Media:            .byte    0xf0            /*Media descriptor*/
    BPB_FATSz16:        .2byte    9                /*FAT size(sectors)*/
    BPB_SecPerTrk:        .2byte    18                /*Sector per track*/
    BPB_NumHeads:        .2byte    2                /*Number of magnetic heads*/
    BPB_HiddSec:        .4byte    0                /*Number of hidden sectors*/
    BPB_TotSec32:        .4byte    0                /*If TotSec16 equal 0, this works*/
    BS_DrvNum:            .byte    0                /*Driver number of interrupt 13*/
    BS_Reserved1:        .byte    0                /*Reversed*/
    BS_BootSig:            .byte    0x29            /*Boot signal*/
    BS_VolID:            .4byte    0                /*Volume ID*/
    BS_VolLab:            .ascii    "Solrex 0.01"    /*Volume label, 11 bytes required*/
    BS_FileSysType:        .ascii    "FAT12   "        /*File system type, 8 bytes required*/
    
    LABEL_START:
    /*Initial registers, including ds, es, ss*/


    (2)    Make。

    makefile不用修改,make就可以了

    对于这一点,我不太明白,make只是做了编译和链接,最后把可执行文件做成。Img,可是又没有执行可执行文件,为什么就起到效果了呢?

    四、    效果

    将未格式化的boot.img软盘用mount –o loop boot.img mountdir/挂载到目录上,系统会报错。
    格式化以后,再mount,就可以成功。

    现在把boot.img mount到linux上,就可以把其它的可执行文件放到boot.img中了

  • 相关阅读:
    写的有道理的
    20199123 201920202 《网络攻防实践》第2周作业
    20199123 201920202 《网络攻防实践》第3周作业
    20199123 201920202 《网络攻防实践》第1周作业
    20199123《网络攻防实践》假期作业
    RSA,AES加解密算法的实现
    20199123 201920202 《网络攻防实践》第5周作业
    20199123 201920202 《网络攻防实践》第6周作业
    20199123 201920202 《网络攻防实践》第4周作业
    第四周课上实践验收
  • 原文地址:https://www.cnblogs.com/windmissing/p/3788672.html
Copyright © 2011-2022 走看看