Where Can I Find Information About Ports

来自osdev
Zhang3讨论 | 贡献2022年3月12日 (六) 05:03的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

本文的语气或风格 可能无法反映整个wiki使用的百科全书式语气。 有关建议,请参阅 Wikipedia's article on tone

本页面或章节指其读者或编者使用人称 , 我的, 我们 或者 我们的。 用encyclopedic百科全书式的语言风格进行编辑

译者注:这里的端口指的是IO端口(Port),一般CPU通过IO端口操作设备,本文主要解答了自制操作系统时,开发爱好者是怎么知道外部设备:电源、显卡、网卡等应该如何对接的。

问题:我在哪里可以找到有关端口的信息?

我一直在尝试编写内核(从Brandon在osdever网站的教程开始)。 我很幸运地找到了在屏幕上显示数据、从扇区读取数据、读取时间 (CMOS) 和重新启动的端口。 我在哪里可以找到更多信息? 我想进入图形模式,这样我就可以显示图像了。
比较长的问题: 是这样的,我从 教程 开始,编写hello world很容易。 早些时候,我在汇编上工作,并使用BIOS中断编写了一个简单的文本绘制程序。 但是,这一次我面对的是kernel内容,它使用端口来显示数据(“Hello World”)。 我还没有通盘阅读文档。 但是,无论如何,我继续搜索,我能够用磁盘上的一些数据替换“Hello World”,这需要LBA的知识。 我被柱面(cylinder)之类的东西难住了。早先的阅读方式对我不起作用。 在了解了 LBA 端口并理解 Ext2 文档 之后,我能够读取磁盘上的一个小文件。 后来,通过查看其他人的代码,我发现了访问CMOS时间和如何重新启动的代码。
但是,现在当我想添加关机-Shutdown图形模式、网络和其他东西时,会有点痛苦。 我觉得需要一个向导。
请帮忙!
谢谢。


你好,

一般情况下,所有I/O端口要么是传统的ISA设备的一部分(串口并口PS/2键盘软盘-FloppyCMOS芯片组的一部分,要么是PCI设备的一部分。 不管是什么,您都需要特定内容的文档 (例如,对于 “XYZ以太网卡”,您需要 “XYZ以太网卡” 的文档,而不是 “ABC以太网卡” 的文档)。

传统硬件和向后兼容性

在某些情况下,存在用于向后兼容的传统硬件接口 - 例如,大多数视频卡都支持旧的 VGA I/O端口 (直到您将它们置于 “native mode(原生模式)”,以便您可以实际使用其大部分功能)。 在您拥有合适的设备驱动程序之前,这些遗留接口也完全值得支持。 在这种情况下,您需要传统设备的文档(而不是正确/实际设备的文档)。 例如,哪怕对于 “顶级” ATI视频卡,您还是需要IBM的原始 VGA 文档 (或等效信息)。

遗留软件接口

另外,对于某些设备来说,有一个传统的软件接口。 这主要限于视频卡 (VESA/VBE 接口),而其它遗留软件接口太糟糕了 [怎么做] (现在一般不考虑BIOS上的串口并口PS/2键盘软盘硬盘[为什么?],尽管理论上是可能的)。 与“遗留硬件接口”一样,这主要只是一个短期解决方案(基本功能没有额外功能,性能也差[怎么做])。

标准接口

最后,对于某些设备类型,有一个标准接口。 这包括USB控制器(AFAIK只有4种不同的标准) - UHCIEHCIXHCIOHCI)和IDE/ATAPI硬盘控制器(但不是SCSI控制器),其他并不多。 这些标准接口实际上是很好的接口 (不是遗留接口)。

支持设备很难

大多数情况下,要正确支持所有设备(而不使用遗留接口),您需要阅读数千篇文档并编写数千个不同的设备驱动程序 (也没有成千上万的指南这么多,每个设备,其他 “手把手的指导” - 需要您去查找,阅读和理解制造商的文档)。

尽量少用

幸运的是(依本人愚见),对于一个好的操作系统设计,您实际上不需要编写很多设备驱动程序[跟据谁?](可能需要几个常用的驱动程序来启动)。 您只需要真正设计,实现和记录合适的设备驱动程序接口,以便其他程序员以后可以轻松编写设备驱动程序。 例如,您可能会为一张以太网卡编写一个设备驱动程序,并且(希望有一天)可能会有20多人使用您的文档(以及您的第一个设备驱动程序作为参考)为50多张以太网卡实现50多个设备驱动

基本上,我要说的是(个人观点)理智的操作系统开发人员实际上并不编写操作系统。 相反,他们编写 引导加载程序内核文档。 只有在内核文档完全完成之后,他们才会担心设备驱动程序 文件系统应用程序等(除了测试内核和内核接口所需的一些常见/特殊情况)。

问题:关机、图形、网络和其他

但是,现在当我想添加关机,图形模式,网络和其他功能时,它会变得有些痛苦。
关机(APM或ACPI)

对于关机,有两种不同的“传统软件接口”(APMACPI)。 APM 是古老但简单的,而 ACPI 是新的但因其过度复杂,让人颈部痛疼。 要做到软件关机,而没有这些遗留软件接口,您需要查看每个主板/芯片组的文档。

视频(BIOS、VESA/VBE、VGA接口或本机)

对于视频,有2个传统软件接口 (原始的 BIOS Int 0x10接口和 VESA/VBE 扩展),以及一个传统硬件接口 (“ VGA标准”)。 要正确操作,您需要每个视频卡的编程信息(在某些情况下很难获得)。 即使您有很好的信息,现代视频,设备驱动程序也很复杂 (尤其是当你开始研究3D特效,并为着色器语言实现JIT编译器时。 - 例如实现与DirectX 10 相似的功能和性能), 而且,为一块视频卡实现一个好的设备驱动程序很容易就需要一年多的时间。

网卡

对于网卡来说,没有遗留软件接口,也没有遗留硬件接口 - 要正确执行操作,您需要制造商的文档(或等效文档)。

本文来源

这里包含的信息是根据这里论坛上的帖子粗略整理而成的, http://forum.osdev.org/viewtopic.php?f=15&t=17704.