zoukankan      html  css  js  c++  java
  • 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函数。

  • 相关阅读:
    练习1-6 验证表达式getchar() != EOF的取值是0还是1。练习1-7 编写一个打印EOF值的程序。C程序设计语言(K&R)_第2版
    【文摘】《原则》——雷.达里奥
    Android-app-CourtCounter
    Android-入门学习笔记-面向对象编程
    Android-app-深圳图书馆信息页
    【可能有问题】Android横屏布局,固定屏幕方向
    Java笔记
    Android-入门学习笔记-交互
    Android studio清理项目构建
    【待修】Git和GitHub学习笔记
  • 原文地址:https://www.cnblogs.com/p-wk/p/13183425.html
Copyright © 2011-2022 走看看