目录名 | 所属文件 |
boot | 核心引导代码 |
fs | 文件系统 |
include | 头文件 |
init | Init 进程,系统中执行的第一个进程 |
kernel | 系统调用 |
lib | 库代码 |
mm | 内存管理 |
tools | 内核引导文件的制作工具 |
boot 目录
文件 | 描述 |
boot.s | BIOS 启动的时候加载并执行的代码 |
head.s | 32 bit 的引导代码,调用 init_main() |
boot.s 文件说明
加电自检结束后,boot.s 的代码被加载到 0x7C00 处,然后 boot.s 将自身移动到物理地址的 0x90000 处,接着跳转到该处执行。
boot.s 使用 BIOS 中断在屏幕上打印 “/nLoading system.../n/n”接着读取核心镜像文件到 0x100000 处,然后关闭引导设备,保存光标位置,关闭所有中断,再将系统核心从 0x100000 复制到 0x0000 处。接着载入中断描述符表和全局描述符表。
head.s 文件说明
该文件包含了 32 位系统的初始化代码。初始化代码的物理地址为:0x00000000 ,这个地址也是系统分页目录存放的地址。因此,系统初始化完成后,系统初始化代码将被分页目录的数据替代。
head.s 的具体工作说明:
setup_idt:建立一个 256 个入口的中断向量表,并正确设置中断向量。设置完中断向量后,打开中断。
setup_gdt:建立一个新的 GDT,并正确设置表项。在新的 GDT 中,只有两个表项被装载,这两个表项是在 init.s 中建立的。
setup_paging:通过 cr0 标志位设置为 0 来建立一个页表。建立的页表可以映射机器的前 8M 物理内存。
head.s 由 boot.s 调用执行,当 head.s 执行时,系统运行在 32 位保护模式下。当 head.s 执行时,中断向量表与全局描述符表都已经被正确设置,并且合适的值被装入到 CPU 的帧、栈、堆栈指针寄存器中,然后检查有没有浮点数处理单元,如果没有,就在中断向量表中设置一个软件异常处理程序,便于模式浮点数运算。因为物理地址 0x00000000 实际上是页表数据的存放地址,因此在系统启动的最后阶段,所有的启动代码都被页表数据覆盖,启动代码将执行一个 jmp 指令,跳转到页表后的第一个地址,这个地址就是 _main() 函数的入口地址,这时,系统就执行 init/main.c 中。
fs 目录
fs 包含了文件系统的所有功能:
文件名 文件包含的函数 bitmap.c new_block(),free_block(),new_inode(),free_inode() block_dev.c block_write(),block_read(),ll_rw_block() buffer.c get_hash_table(),get_blk(),sys_sync(),brelse(),bread(),buffer_init()