当前位置: 技术问答>linux和unix
保护模式下怎么和硬件打交道 ?
来源: 互联网 发布时间:2015-12-24
本文导语: 我问这个问题是站在开发操作系统的角度上来问的,大家不要告诉我通过系统调用来和硬件打交道。我想知道的是系统调用是怎么和硬件打交道的?是调用BIOS,还是直接操作端口?还是其它的方式?好像在保护模式...
我问这个问题是站在开发操作系统的角度上来问的,大家不要告诉我通过系统调用来和硬件打交道。我想知道的是系统调用是怎么和硬件打交道的?是调用BIOS,还是直接操作端口?还是其它的方式?好像在保护模式下不是调用BIOS,在保护模式下中断调用是用到IDT。那究竟是怎么访问硬件的呢?是把实模式下的BIOS搬到保护模式下吗?还是直接操作硬件端口?如果是直接操作端口,比方说显卡,会不会不同的显卡端口不同?怎么能保持兼容呢?VESA VBE 3.0 是个BIOS软件接口规范,如果在保护模式下不用BIOS,那这些规范不是没有什么作用了?是不是都通过驱动来和硬件打交道?驱动是怎么和硬件打交道的?是调用BIOS还是操作端口?
不好意思,比较菜,望高人指点迷津。
不好意思,比较菜,望高人指点迷津。
|
一般都是直接通过I/O方式,也有些BIOS中断有保护模式扩展,可以调用
32bits Operating System--Developped by WY.lslrt http://www.wyos.net
32bits Operating System--Developped by WY.lslrt http://www.wyos.net
|
linux driver就是干这个的啊
|
linux driver
比方说显卡,会不会不同的显卡端口不同?
不会。你写的设备驱动最后还是要注册到OS上。比如显卡挂到PCI DRIVER 上。
设备驱动在linux 下分char ,block, network,usb,pci等。都有一套它的规范。
比方说显卡,会不会不同的显卡端口不同?
不会。你写的设备驱动最后还是要注册到OS上。比如显卡挂到PCI DRIVER 上。
设备驱动在linux 下分char ,block, network,usb,pci等。都有一套它的规范。
|
linux 2.6下面有个分配DMA的函数
传进去的有一个指针用来获得物理地址,返回一个指针就是这个物理地址对应的虚拟地址
使用时,这年物理地址指针只能给DMA寄存器用,更新DMA内存里面的数据就要用这个返回的虚拟地址
传进去的有一个指针用来获得物理地址,返回一个指针就是这个物理地址对应的虚拟地址
使用时,这年物理地址指针只能给DMA寄存器用,更新DMA内存里面的数据就要用这个返回的虚拟地址
|
LZ需要去了解中断原理,中断是电子的,非保护模式下用向量,保护模式下用IDT,原理一样的,中断程序处理IO,IO是Cpu单独指令或者是内存统一编址
|
我的理解是,设备在加载驱动时,通过request_region等操作,把设备内存(IO)映射到内核内存(基地址方式吧),然后直接操作内核内存。属于对设备IO的操作,没有通过bios调用