【发布时间】:2016-07-04 00:10:07
【问题描述】:
我有一个奇怪的问题,但我对这个话题很感兴趣。
是否有可能直接访问当前基于 x64 的计算机的硬件而无需使用某种 HAL(硬件抽象层)或其他操作系统的挂件(udev、upower、...)?而且我不是在谈论开发某个设备驱动程序,而是在谈论使用 C 或汇编程序或类似的东西进行简单的“Hello World”编程。
我知道诸如多个 cpu 内核和多线程之类的事情使这种编程对于最常见的情况变得毫无意义。但是,我很想知道这是否可能,如果可能,你怎么做?
我的重点在于基于 Linux 的操作系统。据我所知,自 98 / ME 以来,在基于 Microsoft 的操作系统上是不可能的
非常感谢您提前付出的努力和最诚挚的问候, B.
【问题讨论】:
-
int 0x80是 HAL 吗?保护模式操作系统以保护模式运行;仅允许操作系统直接访问硬件。首先,您的"Hello World"将显示在哪里? -
您想直接访问哪个硬件?您可以轻松访问诸如 cpu-register 之类的东西(毕竟它们是硬件),但访问诸如 MMU 之类的东西是特权。
-
简短回答:不。如果你能做到这一点,它就会破坏让操作系统保护你的资源的意义。也就是说,您可以让进程以必要的权限运行访问物理内存(在您要求操作系统将其映射到您的地址空间之后),因此如果您使用控制台,理论上您可以将某些内容打印到 VGA 文本内存中。跨度>
-
ad where) 它将使用控制台显示。广告哪个硬件)它想在汇编中做类似 mov-commands 的事情,所以我想直接访问 CPU 和内存。我不确定是否需要访问某些 I/O 端口才能在控制台上显示某些内容。 ad HAL)据我所知,甚至操作系统也不再直接访问硬件。他们使用 HAL 之类的东西访问硬件,以实现最大的可移植性。如果我编写一个默认的汇编程序并且我正在使用 mov-commands 我正在使用 HAL 而不是直接访问 CPU。但是我想直接访问CPU。
-
如果您想直接访问硬件,您可能会考虑编写设备驱动器。它们只是普通程序,但显然运行在完全不同的环境中。它们没有什么神奇之处,但显然你需要了解制作它们的要求。
标签: c++ c linux assembly hardware-programming