通过在 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的主要内容,如果未能解决你的问题,请参考以下文章