关于保护模式下的硬件驱动程序
最近,我正在尝试编写一个简单的操作系统。这是一个大工程。
当我编写代码时,我想知道现代操作系统如何在保护模式下联系硬件
在实模式下,我们只需调用BIOS中断即可完成这项工作。
但我想知道如何在保护模式下实现这个目标。(它使用 in 和 out 指令吗??)
我追踪了一些linux源代码,但仍然找不到合适的代码。
我知道这对很多人来说都是一个基本问题,请帮助我,谢谢。
对我糟糕的英语感到抱歉。
Recently, I'm trying to write a simple OS. This is a big project.
when I'm writing my code, I'm wondering how modern OS contact hardware under protected mode
In real mode, we can just call the bios interrupt to accomplish this job.
But I'm wondering how to accomplish this goal in protected mode.(Is it using in and out instruction??)
I traced some of the linux source code, but still can't find the appropriate code.
I know it is a basic question to many people, plz help me, tks.
and sorry about my poor English.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在保护模式下,CPU可以运行在内核模式或用户模式。在内核模式下,您始终可以访问硬件。调用 BIOS 中断是一种古老的方法,但现代操作系统通常有自己的硬件设备驱动程序,并且不会经常调用 BIOS。如果您知道硬件数据表,则可以使用
in
和out
直接访问硬件。另外,对于现代 PCI 和 PCI Express 设备,它们支持内存映射 IO(X86 CPU 也支持这一点),这意味着您可以使用 mov 来访问硬件。对于 x86,CPU 还允许用户级程序使用 in 和 out 指令访问硬件。你可以在Intel CPU手册上找到它。就设置DPL、CPL吗? (我忘记了正确的名字)。
我想你最好阅读一些有关设备驱动程序的书,例如Linux Device Drivers,第3版。 http://lwn.net/Kernel/LDD3/
In protected mode, the CPU can run in either kernel mode or user mode. In kernel mode, you can always access the hardware. Calling BIOS interrupt is one old method, but a modern OS normally has its own device drivers for the hardware and does not call BIOS too often. If you know the hardware datasheet, you can use
in
, andout
to access the hardware directly. Also, for modern PCI and PCI Express devices, they supported memory mapped IO (X86 CPU also supports this), and it means you can usemov
to access the hardware.For x86, the CPU also allows the user level program to access the hardware using in and out instructions. You can find it on Intel CPU manual. Just set DPL, CPL? (I forgot the correct name).
I guess you'd better read some book about device drivers, such as Linux Device Drivers, 3rd edition. http://lwn.net/Kernel/LDD3/