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
部分。
下方的PrintChar
、PrintString
、PrintNum
是专门用来处理对应类型的输出格式的函数。printf.c
printf
函数提供了printf
的定义和处理框架,即利用C语言的边长参数va_list
对每一个输出部分读取后调用lp_Print
函数进行处理。
myoutput
函数调用printcharc
来输出字符到面板,也就是把字符写入到面板读取的地址。
_panic
函数是通过printf
函数完成了特定的对错误信息的输出。
readelf
kerelf.h
定义了elf文件的格式,即三个结构体
Elf32_Ehdr
、Elf32_Shdr
、Elf32_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函数。
最新文章
- javascipt的【函数表达式】
- python day6 面向对象
- 配置Python+selenium+firefox自动化测试
- linux系统:rm-rf执行以后,怎么办?我来教你恢复文件。
- Working with LOBs in Oracle and PHP
- iReport —— 使用 JavaBean 作为数据源
- DB2 insert into 三种写法
- maven01 hello maven
- 2014.3.11-C语言学习小结
- PHP导出一个txt文本文件
- Git点滴记录
- java matlab 混合编程 Failed to find the required library mclmcrrt9_2.dll on java.library.path.
- [darknet]查看错误结果 sight of wrong
- 泊爷带你学go -- 经典的继承与接口 简直吊炸天 !
- nacos 使用记
- JSOUP如何POST只含JSON格式的数据
- 发布阶段 github和360移动助手及总结
- 【xsy2913】 enos 动态dp
- 文档撰写思路与排版(hadoop)
- [转]php使用 memcache 来存储 session