orange's一个操作系统的实现的前五章文件组织整理
Orange's一个操作系统的实现的前五章文件组织整理Tree:|---Makefile||---a.img (虚拟软盘)||---bochsrc (bochs虚拟机配置)||___boot| |----boot.asm (编译为boot.bin文件后被BIOS加载到内存,然后在a.img中\| |
Tree:
|---Makefile
|
|---a.img (虚拟软盘)
|
|---bochsrc (bochs虚拟机配置)
|
|___boot
| |----boot.asm (编译为boot.bin文件后被BIOS加载到内存,然后在a.img中\
| | 寻找loader.bin,并加载到内存和转交控制权)
| |
| |____include
| | |----fat12hdr.inc (FAT12文件有关内容,以及基于FAT12头的一些常量定义)
| | |----load.inc (LOADER.BIN被加载的位置 KERNEL.BIN被加载的段地址和偏移\
| | | 页目录开始地址和页表开始地址)
| | +----pm.inc (存储段描述符类型值说明 系统段描述符类型值说明\
| | 分页机制使用的常量说明 宏(描述符和门)
| |
| +----loader.asm (加载内核(ELF文件)到内存,跳入保护模式(设置堆栈,打开分页机制),\
| 向内核交出控制权)
|___include
| |----const.h (定义函数类型PUBLIC和PRIVATE,GDT和IDT中描述符的个数)
| |----global.h
| | |---- EXTERN int isp_pos;
| | |---- EXTERN u8 gdt_ptr[6]; /* 0~15:Limit 16~47:Base */
| | |---- EXTERN DESCRIPTOR gdt[GDT_SIZE];
| | |---- EXTERN u8 idt_ptr[6]; /* 0~15:Limit 16~47:Base */
| | +---- EXTERN GATE idt[IDT_SIZE];
| |
| |----protect.h (定义存储段描述符/系统段描述符DESCRIPTOR)
| |----proto.h
| | |---- PUBLIC void disp_str(char * info);
| | |---- PUBLIC void disp_color_str(char * info, int color);
| | |---- PUBLIC void init_prot();
| | +----PUBLIC void init_8259A();
| |
| |----string.h
| +----type.h (定义u8,u16,u32数据类型)
|
|___kernel
| |----global.c 包含头文件
| | |---- #include "const.h"
| | |---- #include "protect.h"
| | |---- #include "proto.h"
| | +---- #include "global.h"
| |
| |----i8259.c 设置8259A
| | |---- #include "type.h"
| | |---- #include "const.h"
| | |---- #include "protect.h"
| | |---- #include "proto.h"
| | |---- PUBLIC void init_8259A()
| | +---- PUBLIC void spurious_irq(int irq)
| |
| |----kernel.asm
| | +----实现中断和异常
| |
| |----protect.c 定义异常处理函数
| | |----#include "type.h"
| | |----#include "const.h"
| | |----#include "protect.h"
| | |----#include "global.h"
| | |----#include "proto.h"
| | |----PRIVATE void init_idt_desc(unsigned char vector, \
| | | u8 desc_type,int_handler handler, unsigned char privilege)
| | +----中断处理函数
| |
| +----start.c 初始化IDT
| |---- #include "type.h"
| |---- #include "const.h"
| |---- #include "protect.h"
| |---- #include "proto.h"
| |---- #include "string.h"
| |---- #include "global.h"
| +---- PUBLIC void cstart()
|
|
|___lib
|----klib.c 定义函数
| |---- PUBLIC char* itoa(char *str,int num)
| +---- PUBLIC void disp_int(int input)
|
|----kliba.asm 定义函数(要用关键字global把这些函数导出来)
| |---- void disp_str(char * info)
| |---- void disp_color_str(char*info,int color)
| |---- void out_byte(u16 port,u8 value)
| +---- u8 in_byte(u16 port)
|
+----string.asm 定义函数(要用关键字global把这些函数导出来)
+---- void* memcpy(void* es:p_dst, void* ds:p_src, int size)
参考链接:http://thornbird-life.blogbus.com/logs/83508544.html
更多推荐
所有评论(0)