编写自己的BIOS

时间:2012-06-05 00:14:40

标签: assembly x86 bios

我并不疯狂,只是重新发明轮子:D
我写过boot-loaders,mouse&键盘迷你驱动程序,迷你操作系统等。

我总是试图避免DOS中断,只使用BIOS,尝试前进一个统一的迷你操作系统,但突然我决定编写自己的BIOS :)

传说说:
我是高级程序员,然后是低级程序员。有一天,我将成为机器语言程序员!

BIOS是用汇编语言编写的吗?我该如何闪光?机制是什么?我可以开始编辑我当前的BIOS吗?

5 个答案:

答案 0 :(得分:24)

BIOS可以用汇编语言编写但不一定是,某些部分需要获取系统调用的参数,因为它们与调用约定的编译器不匹配。

你如何闪光?从主板到主板各不相同,我将从一个开源虚拟机开始并为此编写一个BIOS。或者创建一个您编写BIOS的虚拟机。该机制因供应商而异,通常你启动dos(dos并没有死,它在PC世界中非常活跃,特别是主板开发和嵌入式系统)。我不会乱用一块真正的主板,如果你还不知道所有这些问题的答案,那么如果你采取这条道路的话,你就会把它们弄成许多主板。

您可以尝试为您的主板进行BIOS升级并对其进行反向工程(尽管可能会有点击协议表明您不会)。如果你搞清楚,你可以加载它并破解。我不会去那里,你会弄清楚你的系统。

写一个bios真的是你追求的吗?相当古老的学校,就像编写6502代码一样有趣。有许多低级问题更有用,也很有趣。

如果你可以写作asm,写作机器代码并不那么困难,你可以去做有趣的事情。 x86是可怕的,你应该花一些时间学习其他系统及其asm和机器代码(并为它们编写操作系统)。 ARM主宰世界,不依赖于bios。有人告诉我,为了在非x86系统上获得视频卡,你仍然需要在x86 bios上的x86中进行操作,可以找出如何在不需要运行x86 bios的情况下调出主流视频卡。看一个模拟器运行bios并看看它做了什么,弄清楚在没有bios的情况下替换init上的电源...编写指令集模拟器或反汇编器是除了编写机器代码之外的下一步,我不会浪费甚至虽然在x86上的第二次,我可以建议一个备选列表(或者你可以使用我编写或收集的模拟器)。

如果x86 bios是您想要的方式,那么最佳途径是为qemu,virtualbox或其他虚拟机编写,替换或破解bios。用您的BIOS替换该BIOS可能会替换某个目录中的文件或使用命令行选项指定备用BIOS。一旦你有丰富的经验,那么如果仍然有主板上有传统的biose,也许你可以破解你的编程方式(需要购买几种每种类型的主板,因为你会砖一些)。有这么多的嵌入式系统可以在20美元到200美元之间获得相同水平的经验,如果没有像样的原理图和文档,那么破解PC主板是没有意义的。您可以挖掘原始PC,其中记录了原理图和bios列表,并且如果您的BIOS无法启动(并且不会破坏主板),则可以插入BIOS,这不是砖块,您可以重新编程或替换BIOS芯片。可能想要使用微控制器作为一个假的BIOS,因为找到合适的硬件来重新编程更多的bios芯片可能更难找到工作的原始PC ...有一个amiga社区可能会更有趣,并会很乐意让你改进/调整他们的BIOS,比如把现代硬件放在传统的系统调用之后。

答案 1 :(得分:1)

FWIW Modbin是一个DOS程序,顾名思义修改BIN图像,特别是为了对现有BIOS代码进行简单和极端的更改。

如果你可以获得一个旧主板(许多人被扔掉仍在工作)我会鼓励你玩BIOS。它的内容丰富而有趣,如果有人如此倾向而你似乎是:)曾经有一段时间我从mobos下载了BIOS图像,这些图像具有相同或相似的芯片组,但由不同的制造商生产...有时候具有相当大的优势,包括在最初的主板制造商放弃球或不断上升之后继续获得BIOS更新的简单优势,以及功能和性能导向选项和更改。

这导致了" HOT Flashing"这是拉起一个插座的BIOS芯片,以便引脚刚刚接触并且一旦启动,拉动那个并替换一个坏的(通常是我有一个),同时仍然运行并使用缓存的BIOS功能保持闪存系统活跃。对于我们这些极客劝说的有趣的东西,让我有信心为OS / 2编写设备驱动程序

答案 2 :(得分:1)

如果您想为IBM PC兼容计算机编写BIOS(这是当今大多数台式机的PC,虽然CPU指令集有更多扩展,以及一些不同的BUS接口),那么我建议你看一下通过 IBM PC IBM PC XT { {3}} 即可。特别是IBM PC AT手册,因为这是事实上的标准。

这些手册包含IBM在其计算机上使用的完整BIOS的程序列表,它们使用汇编语言。您可能需要稍微查看这些手册(尤其是IBM PC AT)才能找到它们,因为有些内容没有直接列在目录中,但它们就在那里。希望这些BIOS可以帮助您入门。

答案 3 :(得分:0)

除了让电脑正常运行之外,还有其他方法可以刷新BIOS。但它需要一些硬件。不过应该不会很贵。

您可以尝试类似这样的技术: http://hackaday.com/2010/11/18/build-your-own-soic-progamming-clip/

我今天看到的这个话题: https://conference.hitb.org/hitbsecconf2015ams/sessions/how-many-million-bioses-would-you-like-to-infect/

它更详细地解释了它,虽然你可能没有寻找感染,但是有些技术可以用于编写bios,其中编程剪辑就是其中之一。

答案 4 :(得分:0)

BIOS可以用您喜欢的任何一种语言编写,尽管较低级的语言可以为您提供更多控制权。汇编代码和机器代码几乎相同,不同之处在于微代码接口和您键入的内容。对于机器代码,您只能输入2个字符,而汇编会为您提供字母数字。当我需要每隔几个小时启动一次计算机并且没有找到能够启动该功能的BIOS时,便开始寻找自定义BIOS。

要刷新BIOS,请遵循制造商准则。 BIOS现在已被UEFI取代(以提高安全性)。 结帐:https://www.pcworld.com/article/187437/how-to-update-your-bios.html

x86和amd64指令参考:https://www.felixcloutier.com/x86/
x86指令及其扩展名:https://en.wikipedia.org/wiki/X86_instruction_listings
i386指令参考:https://css.csail.mit.edu/6.858/2014/readings/i386.pdf
x86汇编指南:https://www.cs.virginia.edu/~evans/cs216/guides/x86.html
英特尔指令集参考:https://software.intel.com/sites/default/files/managed/a4/60/325383-sdm-vol-2abcd.pdf