咱们也不是OEM厂商,也没有Intel内部代码。如何能研究BIOS代码呢?

思路要打开,你并不是第一个造车的人。那么有没有开源BIOS项目?还真有coreboot,又名linuxboot。

那么其实很多BIOS关键点,都是可以从开源项目中学习到的。

BIOS第一条指令放在哪里?

读过IA32/64文档的同学,可以明显的看见IA开机第一条指令在0xFFFF,FFF0。这是文档。作为一个合格的嵌入式工程师,那必须落地为安,要见代码才能放心。必须先找scatter file/linker scripts,随便你叫啥

coreboot\src\arch\x86\bootblock.ld

BIOS初始化代码

那么.reset代码段到底是什么? 

coreboot\src\cpu\x86\reset16.S

这里是典型的用数据表示代码,其实这是个jump机器码。继续追踪入口代码_start16bit,不追击到C语言不罢休。

coreboot\src\cpu\x86\entry16.S

刚上电是实模式,进来先关中断也是情理之中。

一顿配置之后,看来是冲进保护模式了bootblock_protected_mode_entry 

看来汇编代码还得走一会儿。

coreboot\src\cpu\x86\entry32.S 

保护模式下继续

 

 看来快到C语言代码了,这函数名也能看出来bootblock_pre_c_entry

coreboot\src\soc\amd\common\block\cpu\noncar\pre_c.S

BIOS post_code

这里我突然对post_code感兴趣起来,这不就是主板上哪个数码管显示数字么?!

coreboot\src\console\post.c

好吧!汇编调用C语言函数

Port 80h POST Codes for Intel® Desktop Boards

这回真的到C语言了,之后的代码就自己看了,师傅领进门,修行在个人 

coreboot\src\soc\intel\alderlake\bootblock\bootblock.c

Logo

更多推荐