- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在寻找关于BIOS现在如何工作相当一段时间的解释。我已经设计了一个引导加载程序,并在成功初始化IDT和GDT的同时跳入了32位模式,但是这样做的时候,我发现“操作系统”似乎非常简单,并且感觉就像“BIOS”是每台计算机的实际操作系统。
因此,现在我面临着一个新的挑战,即尝试发现BIOS实际上是如何自我初始化,发现有多少可用的RAM以及如何/在何处将附加卡ROM导入RAM。据我了解,处理器不是通过跳转而是自动在16位段:偏移地址0xFFFF:0x0000处开始在RAM内部执行代码。这意味着从技术上讲,由于处理器的启动位置,所有计算机从一开始就必须至少具有1MB的RAM才能启动,并且由于这些知识,我一直假设所有BIOS会在启动之前自动将自身写入RAM。处理器获取其RST信号。我觉得这是不对的,因为我相信可以通过BIOS禁用“影子BIOS”。我到处都在寻找《 BIOS设计指南》,但是我似乎总是空手而归。
作为一名程序员,我知道可能有很多方法可以真正完成我实际要问的事情,并且 hell 中不可能给出一个正当的直截了当的答案,如果我必须更具体一点,那就说我在工作我使用Dell Inspiron 518或至少一台装有G33芯片组的计算机(G33北桥和ICH9南桥),并且我想对初始的Pre-POST程序进行编程,并构建带有所有标准中断的我自己的16位IDT和可能会成功启动其他操作系统(例如Windows 10)的所有所需内容。 BIOS实际上如何知道有多少RAM?它只是在最高的内存区域进行位写入位读取测试,然后从那里下来吗?附加卡ROM甚至如何加载到RAM中?据我了解,BIOS建立了一个非常基本的中断和/或“入口点”列表,附加卡ROM可以利用这些中断和/或“入口点”,并使它们能够“锁存”其他BIOS的中断,例如“$ PMM”? BIOS制造商如何知道BIOS中需要什么确切的 anchor 字符串才能启动Windows之类的操作系统?
任何答案,以及任何推荐的规范和/或任何指南都可以帮助我了解我一直在寻求的知识,将非常有帮助。例如,也许有一个指导说:“在移交给IPL之前,BIOS需要完成的最低限度要求的过程?”甚至是C或Assembly中的源代码示例,它可以告诉我附加卡的ROM镜像实际上是什么或看起来是什么样的,这将非常有帮助。
最佳答案
由于我最熟悉英特尔架构,因此我只能将其答案限于此。
您(以及我)正在查找的文档称为《 BIOS编写器指南》,很遗憾,该文档是 secret 的,并且到目前为止尚未泄漏(AFAIK)。
为了在开放源代码社区中推广其产品,英特尔发布了Firmware Support Package。这被认为类似于固件编写器的库,并且包含用于初始化内存 Controller ,PCH(外围 Controller 中枢,非正式地称为“芯片组”)和CPU1的(二进制)代码。
开源开发人员或通常不起不起与英特尔签署保密协议(protocol)的任何开发人员都可以使用FSP编写自己的固件。
可以逆转FSP(我的许多TODO之一),但是将其用作引用会更快。
当电源打开时,在CPU从复位向量2开始执行之前发生了很多事情,但是要记住的重要一点是芯片组(即PCH)已经允许CPU访问闪存ROM。
实际上,这就是第一条指令的执行方式,因为CPU只能从内存地址空间中提取指令。
因此,只要固件将执行流程保持在映射到闪存ROM的内存区域内(此区域由闪存ROM本身中的闪存描述确定,PCH就会在重置期间读取它并配置内存请求的路由)相应地),其代码即可执行。
由于内存尚未初始化,并且闪存ROM是只读的(没有内存写周期),因此无法使用以下功能:
TempRamInit()
例程(顺便说一句,必须通过跳转来调用它),实际上,它设置了RAM缓存(CAR)。
CD
寄存器中的
CR0
(禁用缓存)位),然后从与L13一样大的内存区域进行虚拟读取(甚至写入)。
CD
时,不会进行任何行替换。我假设这也不会在更高的缓存中来回移动行。
关于post - BIOS如何初始化DRAM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63159663/
在进行 BIOS 开发时,我看到了对英特尔 BIOS 引用设计和英特尔固件支持包 (FSP) 的引用。英特尔是否积极支持两者,或者引用设计正在逐步淘汰以支持 FSP。 最佳答案 为了创建 FSP,引用
我知道有一些程序,比如 lojack 用于安装在 BIOS 上的笔记本电脑,但我仍然有点困惑。在阅读有关 lojack 的信息时,在我看来,在用户登录并尝试访问互联网之前,他们无法完全定位笔记本电脑的
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 8年前关闭。 Improve thi
我对 BIO 例程 BIO_read()/BIO_write() 和 SSL_read()/ 之间的区别感到困惑SSL_write() 当 BIO 是内存 BIO 而不是套接字 BIO 时。 我正在尝
我想知道什么样的序列号wmic bios get serialnumber Windows命令实际上给了你什么? 是你主板的序列号吗?文档对此不清楚。 最佳答案 wmic bios get seria
我正在尝试使用 OpenSSL 在 C++ 中创建一个简单的 FTP/FTPS 客户端实现。我已经设法使用 BIO API 与普通 FTP 一起工作。现在的问题是:一旦我有一个不安全的连接和 BIO
pe启动acpl bios error是一个非常简单解决的问题,一般都是主板不支持支持ACPI造成的,只要禁用一下就可以解决了,想要解决的用户可以来看看详细的内容。 pe启动acpl b
这里是代码的上下文: void THREAD_CC server_thread(void *arg) { BIO *client = (BIO *)arg; ... } 表达式
我正在使用 UEFI EDK2 创建 BIOS。我修改了 FDF 以将驱动程序(UEFI 和旧版本)从主固件卷移动到我严格创建的单独固件卷 (FV) 以保存驱动程序。 在我从主 FV 移动驱动程序之前
我们正在运行 32 位和 64 位的 windows xp pro service pack 3。我们正在使用 WMI 来获取 BIOS 制造商和型号,但我们确实更喜欢使用 Win32 API 或汇编
OpenSSL 中的 BIO 对到底是什么?它的用途是什么?我已经检查过 OpenSSL 文档,但任何细节都很少。 最佳答案 OpenSSL 中的 BIO 类似于文件句柄。您可以使用一对它们来安全地相
在此示例代码中: BIO *bio1 = BIO_new(BIO_s_mem()); BIO *bio2 = BIO_new(BIO_s_mem()); SSL_set_bio(ssl, bio1,
我试图将 QEMU 与我正在构建的内核 ISO 一起使用,但我无法运行测试。 我使用的是 Windows 10 64 位,并添加了 pc-bios如果这很重要,请将文件夹添加到 PATH。 到目前为止
我处于不幸的情况,我需要使用 BIOS 未在 ia32 功能控制 MSR 寄存器中启用的 CPU 功能。 BIOS 确实设置了锁定位,因此我无法自己设置该位。 BIOS (Asus UEFI BIOS
我升级了我的 mac 安装,Mountain Lion 10.8.4,但现在每次我尝试加载 Android AVD 时“Eclipse”都会出错。返回的错误是这样的: qemu: 无法加载 PC BI
下面是一些示例代码,展示了我如何使用 OpenSSL: BIO *CreateMemoryBIO() { if (BIO *bio = BIO_new(BIO_s_mem())) {
BIOS 是用汇编语言编写的,机器只能理解二进制文件。 BIOS 是系统启动时加载到内存中的第一个程序。什么编译BIOS生成二进制文件? 最佳答案 BIOS 工程师用 x86 汇编语言编写 BIOS,
使用 OpenGL VBO 时,您可以交错数据 例如,您甚至可以将顶点数据与供 CPU 而不是 GPU 使用的其他数据交错。 交错是有助于还是阻碍主流独立显卡和集成显卡的性能? 最佳答案 一般的答案是
我目前正在编写一个引导加载程序,旨在加载一个比引导扇区允许的时间更长的程序。但是,每次运行程序(我在Virtualbox和QEMU中都测试过),磁盘读取失败,磁盘重置也失败。 bootloader 被
我正在开发一个操作系统项目,使用 isolinux (syslinux 4.5) 作为引导加载程序,加载我的内核与组织在 0x200000 的多重引导头文件。 据我所知,内核已经处于 32 位保护模式
我是一名优秀的程序员,十分优秀!