如何用linux系统编写c程序:如何为mac系统编写自定义引导程序

我在汇编中写了一个小的引导加载程序,它使用 BIOS 中断,它在我的电脑上工作得很好。我的问题是,有没有可能使它在 Mac / Apple 系统上工作。我知道苹果在这个意义上不使用 BIOS,并且他们正在锁定很多东西。但是可以在 mac 上使用实时的 ubuntu 棒,所以是否可以在 mac 上从启动开始运行汇编程序?

非常感谢!

2

我的问题是,有没有可能使它在 Mac / Apple 系统上工作。

总是有可能的。例如,有人可能会将系统模拟器(例如 Bochs,Qemu)移植到 UEFI(因此它看起来像一个 UEFI 应用程序),能够模拟具有 BIOS 的完全不同的计算机。

在实践中,您需要为 UEFI 编写一个新的引导加载程序。

请注意,您还应该假设 UEFI 是“传统行李搬运”计划的第一步(并假设英特尔的“2020 年后没有 BIOS,甚至不只是一个兼容性模块”声明,因为英特尔计划将“传统行李”从芯片组等中剔除;这将阻止其他人编写的固件继续支持 BIOS)。举一个简单的例子(已经存在),尝试将 USB / PS 芯片锁定为 2 的 Apple 机器没有 PS / 2 键盘控制器设备,并且没有

大多数情况下;有一大堆假设(例如关于内存映射,以及 A20 门,PIC 芯片,PIT 芯片,PS / 2 键盘控制器,“BIOS 兼容”视频卡 ROM,VGA 硬件寄存器等的存在),这些假设对于 UEFI 来说是不正确的,或者对于 UEFI 来说不是面向未来的。因此,您还应该审核引导加载程序引导失败的 UEOS,以识别并根除所有的(可能是错误的)“传统假设”

0

Mac 固件不提供旧版 BIOS 模式 AFAIK。

您必须将代码重写为 32 或 64 位 UEFI 应用程序,使用 UEFI“系统调用”而不是int 0x10等 BIOS 调用。当然,您仍然可以将其编写为汇编,并且它仍将在 CPU 上本机运行。

Assembly 不仅仅意味着具有 BIOS 调用的 16 位实模式。

BIOSint-任何接口在 PC 上也已经过时,但是 PC 固件通常具有向后压缩模式,您可以启用该模式将 CPU 切换回实模式并提供这些软件接口。(在从磁盘加载 512 字节的引导加载程序之前,固件本身可能在启动期间切换到 32 或 64 位模式。)

这就是在 PC 上运行旧版 BIOS 代码时发生的情况。

根据https://www.ubuntu.com/download/desktop,常规的 x86-64 Ubuntu 可引导磁盘映像可以在 PC 和 Mac 上运行,大概都使用 UEFI。

或者可能不是,根据http://www.rodsbooks.com/ubuntu-efi/在 Mac 上引导 Ubuntu 通常会通过 Mac firmare兼容性支持模块(CSM),该模块在 Mac 上提供 BIOS 仿真。(显然对于某些引导 Windows 的方式也很有用,这就是为什么它首先存在的原因。)不过,该页面似乎已经过时;Windows 通常也可以在现代 PC 上使用 UEFI 启动。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(335)
糖类抗原ca15-3:在Archlinux中删除DST_Root_CA_X3
上一篇
Linux中运行python:如何在Linux上运行Python脚本
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(76条)