OS-lab1

OS-lab1

boot

boot文件夹中只有start.S文件,这个文件用于初始化内核。关掉中断,设置内核栈,并跳转到main函数。

init

  • init.c

    执行初始化操作。

  • main.c

    主函数,调用init.c完成初始化等任务。

lib

  • print.c

    lp_Print函数主要是解析字符串,完成printf函数主要功能。函数开头通过宏定义定义了OUTPUT函数,这个函数是调用myoutput函数,完成输出一个字符的功能。接下来首先解析输出格式,也就是找到%,对应for循环;然后判断前导零、对齐等参数,对应分支语句;接着按照判断出来的格式对应输出,对应switch部分。
    下方的PrintCharPrintStringPrintNum是专门用来处理对应类型的输出格式的函数。

  • printf.c

    printf函数提供了printf的定义和处理框架,即利用C语言的边长参数va_list对每一个输出部分读取后调用lp_Print函数进行处理。
    myoutput函数调用printcharc来输出字符到面板,也就是把字符写入到面板读取的地址。
    _panic函数是通过printf函数完成了特定的对错误信息的输出。

readelf

  • kerelf.h

    定义了elf文件的格式,即三个结构体Elf32_EhdrElf32_ShdrElf32_Phdr,以及其他的一些文件类型等信息的定义。

  • types.h

    通过typedef重定义了一些数据类型。

  • readelf.c

    is_elf_format函数用于检查文件是否为elf格式。
    readelf函数用来解析elf文件。首先调用is_elf_format判断文件是否为elf格式;再通过循环输出文件的section header的信息。

  • main.c

    这个文件通过调用readelf函数来检查readelf函数的实现。

tools

里面只有一个链接文件,通过在里面定义.data、.bss等定义了内核文件的内存布局。

实验流程

lab1主要完成三个任务,第一个是完成tools里的链接文件和boot里的start.S文件使得内核能够编译运行。第二个任务是完成readelf内的readelf.c文件,实现一个简单的解析elf格式的功能。第三个任务是完成lib中的print.c,实现printf函数。

你可能感兴趣的:(OS-lab1)