桂林电子科技大学操作系统课程设计(二)

桂林电子科技大学操作系统课程设计(project1)

一、项目设计目的 熟悉ELF文件格式,了解GeekOS系统如何将ELF格式的可执行程序装入到内存,建立内核进程并运行的实现技术。

二、项目设计要求

1、修改/geekos/elf.c文件:在函数Parse_ELF_Executable( )中添加代码,分析ELF格式的可执行文件(包括分析得出ELF文件头、程序头,获取可执行文件长度,代码段、数据段等信息),并填充Exe_Format数据结构中的域值。

2、在Linux环境下编译系统得到GeekOS镜像文件。

3、编写一个相应的bochs配置文件。

4、在bochs中运行GeekOS系统显示结果。

三、步骤

1、配置elf.c源文件,如下所示:

int Parse_ELF_Executable(char *exeFileData, ulong_t exeFileLength,struct Exe_Format *exeFormat)
{
    int i;
    elfHeader *head=(elfHeader*)exeFileData;
    programHeader *proHeader=(programHeader *)(exeFileData+head->phoff);
    KASSERT(exeFileData!=NULL);
    KASSERT(exeFileLength>head->ehsize+head->phentsize*head->phnum);
    KASSERT(head->entry%4==0);
    exeFormat->numSegments=head->phnum;
    exeFormat->entryAddr=head->entry;
    for(i=0;i<head->phnum;i++)
    {
        exeFormat->segmentList[i].offsetInFile=proHeader->offset;
        exeFormat->segmentList[i].lengthInFile=proHeader->fileSize;
        exeFormat->segmentList[i].startAddress=proHeader->vaddr;
        exeFormat->segmentList[i].sizeInMemory=proHeader->memSize;
        exeFormat->segmentList[i].protFlags=proHeader->flags;
        proHeader++;
    }
    return 0;
}
2.配置/build/.bochsrc文件,如下所示:
romimage:file=$BXSHARE/BIOS-bochs-latest
megs: 8
boot: a
floppya: 1_44=fd.img, status=inserted
ata0-master:type=disk, mode=flat, path="diskc.img", cylinders=0
log: ./bochs.out

3.按前一步骤配置segmet.h头文件下的参数,配置floppy.c 文件下的

static int Floppy_Get_Num_Blocks(struct Block_Device *dev)
{
    struct Floppy_Drive *drive=NULL; //初始化变量
    struct Floppy_Parameters *params;
    KASSERT(dev->unit >= 0 && dev->unit <= 1);
    drive = &s_driveTable[dev->unit];
    params = drive->params;
    KASSERT(params != 0);
    return params->cylinders * params->heads * params->sectors;
}
四、运行结果

这里写图片描述

谢谢大家!!!
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值