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. javascipt的【函数表达式】
  2. python day6 面向对象
  3. 配置Python+selenium+firefox自动化测试
  4. linux系统:rm-rf执行以后,怎么办?我来教你恢复文件。
  5. Working with LOBs in Oracle and PHP
  6. iReport —— 使用 JavaBean 作为数据源
  7. DB2 insert into 三种写法
  8. maven01 hello maven
  9. 2014.3.11-C语言学习小结
  10. PHP导出一个txt文本文件
  11. Git点滴记录
  12. java matlab 混合编程 Failed to find the required library mclmcrrt9_2.dll on java.library.path.
  13. [darknet]查看错误结果 sight of wrong
  14. 泊爷带你学go -- 经典的继承与接口 简直吊炸天 !
  15. nacos 使用记
  16. JSOUP如何POST只含JSON格式的数据
  17. 发布阶段 github和360移动助手及总结
  18. 【xsy2913】 enos 动态dp
  19. 文档撰写思路与排版(hadoop)
  20. [转]php使用 memcache 来存储 session

热门文章

  1. 可迭代对象和迭代器对象以及for循环的本质
  2. 【踩坑记录】docker启动报错mountpoint for cgroup not found
  3. 【一句话】CAP原则
  4. Gateway服务网关 (入门到使用)
  5. JAVA虚拟机04---对象的创建
  6. 源码下载teb
  7. uniapp 分享 绘制海报
  8. react 高效高质量搭建后台系统 系列 —— 结尾
  9. JZOJ 2114. 【GDKOI2011】反恐任务
  10. JZOJ 4212. 【五校联考1day2】我想大声告诉你