Linux 0.01 源代码目录分布

本文详细解析Linux 0.01的源代码,涵盖boot.s和head.s的执行过程,包括加载系统、中断向量表和全局描述符表的设置。此外,介绍了fs、include、init、kernel、lib、mm和tools目录的功能,以及对tty终端设备的说明。
摘要由CSDN通过智能技术生成
目录名 所属文件
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()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值