class="markdown_views prism-kimbie-light">
桂林电子科技大学操作系统课程设计(project1)
一、项目设计目的
熟悉ELF文件格式,了解GeekOS系统如何将ELF格式的可执行程序装入到内存,建立内核进程并运行的实现技术。
二、项目设计要求
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
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;
}
四、运行结果
谢谢大家!!!