通过在 OS/bootloader 中传递 bios

Posted

技术标签:

【中文标题】通过在 OS/bootloader 中传递 bios【英文标题】:By passing bios in OS/bootloader 【发布时间】:2012-08-20 20:14:57 【问题描述】:

我并没有真正对任何操作系统或引导加载程序进行编程,但我正在阅读有关 Oses 的内容,并且我对引导加载程序在没有 bios 系统调用的情况下工作的能力很感兴趣,如果我正确理解系统中的大型磁盘启动,更重要的是如果没有 UEFI,您可以访问所有磁盘并从所有分区启动或支持 GPT。

所以任何人都可以说我如何绕过 int 13h 并直接访问磁盘控制器(使用 LBA 并自己解决正确的分区) 谁能告诉我谁将 B8000 地址映射到视频卡上,在保护模式下仍然有效吗?保护模式还存在吗?这些天谁需要向后兼容? 我如何绕过 int 16h (如果我真的想不知道,但如果你知道的话,WTH :-) 为什么不...)并直接使用键盘控制器?

【问题讨论】:

【参考方案1】:

1) BIOS 现在支持 LBA 访问(AH=42h AH=43h Extended_Read_Sectors_From_Drive,Extended Write Sectors to Drive)。您可以像所有现代操作系统一样直接绕过 BIOS,直接对 IDE 控制器进行编程。您可以参考 Boch BIOS 源代码以获取示例 http://bochs.sourceforge.net/cgi-bin/lxr/source/bios/rombios.c 。它应该比 Linux 内核更简单、更不抽象。例如,写入扇区的代码在 6512 行左右。您对 outb 调用感兴趣。

2) B8000 可能是通过 VGA bios 中的模式设置代码映射的,但这是您无需关心的实现细节。它在保护模式下工作,因为它不是由处理器(使用虚拟内存)映射,而是由 IO 子系统映射。保护模式当然仍然存在。

3) 谁需要向后兼容?如果没用的话,早就被英特尔砍掉了,以节省芯片空间。

【讨论】:

感谢#1 和#2,但我认为你在向后兼容性方面是不对的,它用于 486 和 386,因为周围还有 XT 和 286,这些天没有指向它,我有一种预感,英特尔只是坚持使用他们的架构构建块,自从它们成为标准之后,AMD 也是如此......

以上是关于通过在 OS/bootloader 中传递 bios的主要内容,如果未能解决你的问题,请参考以下文章

我的BIOS之行-hob的使用

在 BIOS 中发出哔声

NIO入门之BIO

华硕主板重装系统以后BIOS设置的启动项就没有了,开机就进BIOS,不进系统

电脑开机一直重复进入bios无法进入系统怎么办?

Win10安装4 —— 通过BIOS进入PE