BIOS代码的研究
咱么也不是OEM厂商,也没有内部代码。如何能研究BIOS代码呢?思路要打开,你并不是第一个造车的人。那么有没有开源BIOS项目。还真有coreboot,又名linuxboot。那么其实很多BIOS关键点,都是可以从开源项目中学习到的。BIOS第一条指令放在哪里?读过IA32/64文档的同学,可以明显的看见IA开机第一条指令在0xFFFF,FFF0。这是文档。作为一个合格的嵌入式工程师,那必须落地为
咱们也不是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
更多推荐
所有评论(0)