Orange's一个操作系统的实现的前五章文件组织整理

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


Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐