保护模式下怎么和硬件打交道 ?

lazyfish 2006-11-03 09:56:01
我问这个问题是站在开发操作系统的角度上来问的,大家不要告诉我通过系统调用来和硬件打交道。我想知道的是系统调用是怎么和硬件打交道的?是调用BIOS,还是直接操作端口?还是其它的方式?好像在保护模式下不是调用BIOS,在保护模式下中断调用是用到IDT。那究竟是怎么访问硬件的呢?是把实模式下的BIOS搬到保护模式下吗?还是直接操作硬件端口?如果是直接操作端口,比方说显卡,会不会不同的显卡端口不同?怎么能保持兼容呢?VESA VBE 3.0 是个BIOS软件接口规范,如果在保护模式下不用BIOS,那这些规范不是没有什么作用了?是不是都通过驱动来和硬件打交道?驱动是怎么和硬件打交道的?是调用BIOS还是操作端口?

不好意思,比较菜,望高人指点迷津。
...全文
447 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lazyfish 2006-11-16
  • 打赏
  • 举报
回复
LZ需要去了解中断原理,中断是电子的,非保护模式下用向量,保护模式下用IDT,原理一样的,中断程序处理IO,IO是Cpu单独指令或者是内存统一编址

--------------------------

从硬件的角度上看,你别说中断,整个PC都是电子的。我说的是软件,从操作系统的角度上看,怎么理解?
zengwujun 2006-11-16
  • 打赏
  • 举报
回复
我的理解是,设备在加载驱动时,通过request_region等操作,把设备内存(IO)映射到内核内存(基地址方式吧),然后直接操作内核内存。属于对设备IO的操作,没有通过bios调用
slone 2006-11-10
  • 打赏
  • 举报
回复
LZ需要去了解中断原理,中断是电子的,非保护模式下用向量,保护模式下用IDT,原理一样的,中断程序处理IO,IO是Cpu单独指令或者是内存统一编址
sithui 2006-11-08
  • 打赏
  • 举报
回复
linux 2.6下面有个分配DMA的函数
传进去的有一个指针用来获得物理地址,返回一个指针就是这个物理地址对应的虚拟地址
使用时,这年物理地址指针只能给DMA寄存器用,更新DMA内存里面的数据就要用这个返回的虚拟地址
lazyfish 2006-11-03
  • 打赏
  • 举报
回复
研究过linux内核的高人们,能否告诉我linux是怎么和硬件打交道的?
WYlslrt 2006-11-03
  • 打赏
  • 举报
回复
一般都是直接通过I/O方式,也有些BIOS中断有保护模式扩展,可以调用

32bits Operating System--Developped by WY.lslrt http://www.wyos.net
wfwater 2006-11-03
  • 打赏
  • 举报
回复
linux driver
比方说显卡,会不会不同的显卡端口不同?

不会。你写的设备驱动最后还是要注册到OS上。比如显卡挂到PCI DRIVER 上。
设备驱动在linux 下分char ,block, network,usb,pci等。都有一套它的规范。
bluedreammer 2006-11-03
  • 打赏
  • 举报
回复
linux driver就是干这个的啊

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧