RING0 RING1 RING2 RING3这是Intel CPU将特权级别所分的4个级别,Windows只使用其中的两个级别RING0跟RING3,RING0只给操作系统用,普通应用程序执行RING0指令,Windows会显示“非法指令”,这是CPU的特权级别作保护。而RING3不管是谁都可以用,也就是级别最低,也就是一般的应用程序,是不能直接和硬件打交道的。要和硬件直接交互只有RING0 层。当我们的应用程序要控制硬件时,程序从用户态进入内核态,然后由操作系统通过CPU向控制总线发出指令,从而控制硬件。当我们想要读取数据时,操作系统通过CPU的地址总线找到硬件地址,然后在通过CPU的数据总线读取数据,返回给应用程序。
一般来说在baidu搜索操作系统是如何控制硬件的?得到的答案是:硬件驱动程序。(妥妥的)。
希望不要再看到这样的答案。
那么硬件驱动程序是如何控制硬件的呢?
我最近在看linux的源码,在驱动源码里面可以看到对许多pin脚的定义。每个pin脚都有自己的名字。
这里有个疑问,代码里面对pin脚的定义,编译执行以后,硬件是怎么知道该定义是对自己的控制。是不是硬件出厂的时候对gpio口已经定义好了他的名字,这些gpio口是不是有类似寄存器的元件,储存该gpio口的名字,要不然怎么能够通过代码进行控制。
这问题太深奥了。
估计详细说的话 得说整本书了