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中了

  • 相关阅读:
    《ASP.NET Core跨平台开发从入门到实战》Web API自定义格式化protobuf
    .NET Core中文分词组件jieba.NET Core
    .NET Core 2.0及.NET Standard 2.0
    Visual Studio 2017 通过SSH 调试Linux 上.NET Core
    Visual Studio 2017 ASP.NET Core开发
    Visual Studio 2017正式版离线安装及介绍
    在.NET Core 上运行的 WordPress
    IT人员如何开好站立会议
    puppeteer(二)操作实例——新Web自动化工具更轻巧更简单
    puppeteer(一)环境搭建——新Web自动化工具(同selenium)
  • 原文地址:https://www.cnblogs.com/windmissing/p/3788672.html
Copyright © 2011-2022 走看看