驱动、IO Port、IRQ和硬件它们是如何联系起来的

testcase 2009-11-10 10:59:19
谁明白驱动、IO Port、IRQ和硬件它们是如何联系起来的吗?

硬件和IRQ的关系是可以动态设置的,那只能是通过IO Port来设置,但IO Port又是动态确定的,那操作系统如何分配IO Port呢?操作系统如何确定硬件的类型的呢?我们可以通过int指令来调用BIOS中的程序,如读取硬盘,那BIOS又是如何确定硬盘的IO Port呢?我手上的资料无法回答这些问题,Google也不管用,哪位高手可告诉我看哪些资料可以明白这些。

万分感谢
...全文
447 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
romantic__boy 2010-01-19
  • 打赏
  • 举报
回复
1# 概括的很好 是个高手 帮顶。。。
testcase 2009-11-16
  • 打赏
  • 举报
回复
感谢大家的关注,可能我的问题描述不清,arm9linuxpp比较明白我想知道什么。以下是我目前的进展:

如何确定设备类型、IO PORT和IRQ线?
ISA上的老设备的IO PORT和IRQ线是固定的,这样应该可以通过IO PORT来确定设备类型,而PCI设备是根据设备上的配置空间识别设备,PCI设备的IO PORT和IRQ线是动态分配的。

驱动程序如何与设备关联?
粗看了一下linux上的驱动程序好象是根据主设备号和次设备号来确定关联的设备,但跟PCI上的配置空间对不上。

通过int指令来调用BIOS中的程序,BIOS中的程序中干了什么?
BIOS程序也只是简单的把POST时保存到内存中的值返回给程序。

POST都干了什么?
POST如何确定总线类型,我看到的资料好像是根据CMOS中的数据,而不是通过总线控制器什么的?
arm9linuxpp 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 testcase 的回复:]
感谢大家的关注,可能我的问题描述不清,arm9linuxpp比较明白我想知道什么。以下是我目前的进展:

如何确定设备类型、IO PORT和IRQ线?
ISA上的老设备的IO PORT和IRQ线是固定的,这样应该可以通过IO PORT来确定设备类型,而PCI设备是根据设备上的配置空间识别设备,PCI设备的IO PORT和IRQ线是动态分配的。

驱动程序如何与设备关联?
粗看了一下linux上的驱动程序好象是根据主设备号和次设备号来确定关联的设备,但跟PCI上的配置空间对不上。

通过int指令来调用BIOS中的程序,BIOS中的程序中干了什么?
BIOS程序也只是简单的把POST时保存到内存中的值返回给程序。

POST都干了什么?
POST如何确定总线类型,我看到的资料好像是根据CMOS中的数据,而不是通过总线控制器什么的?
[/Quote]
对于linux下我就不是很清楚,不过你的这个问题很专业,我觉得你要是搞懂了,那么你也就是嵌牛了!
dthxman 2009-11-16
  • 打赏
  • 举报
回复
我的理解是对于cpu来说,对应一张向量表,就是irq的向量表,这是最底层的,完全由硬件完成,这些向量表都是指定了每个irq的硬件地址,即发生硬件中断时,该跳转地址,然后根据这个irq地址,可以选择不同的用途,如有的作为串口中断,自然可以实现com,有的作为io中断,可以用作keyboard,其实,什么驱动对应是由开发设计人员制定的,并不是必须,关键是对应的硬件接口,然后在这之上,加入一套进程调度机制,那么,最简单的操作系统就出现了。
gowyz 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lgy198612 的回复:]
你要是具体的话,就得去看各类操作系统相关的驱动编写指南了。
Linux推荐《linux设备驱动开发详解》
Windows推荐《Windows设备驱动开发详解》、DDK手册和配套代码。

相关平台都有一些行内公认的入门书籍,看后再配合相关源码,不断学习之!



[/Quote]
卢工说的有道理
gowyz 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lgy198612 的回复:]
你要是具体的话,就得去看各类操作系统相关的驱动编写指南了。
Linux推荐《linux设备驱动开发详解》
Windows推荐《Windows设备驱动开发详解》、DDK手册和配套代码。

相关平台都有一些行内公认的入门书籍,看后再配合相关源码,不断学习之!



[/Quote]
卢工说的有道理
tcdzyq 2009-11-13
  • 打赏
  • 举报
回复
关键在于理解驱动程序原理与作用。找本关于驱动程序原理的书看下可能对你有帮助。
ly830817 2009-11-13
  • 打赏
  • 举报
回复
DINGDING
arm9linuxpp 2009-11-13
  • 打赏
  • 举报
回复
我觉得你要是真的弄懂,全面把握这些之间的关系的话,没有什么书能帮助你,你所要做的就是(做一个假定,楼主熟悉某一架构处理器,如ARM,其次楼主在做wince开发):结合这个架构的user`s manual,读汇编代码,里面会有几种工作模式转换,以及exceptionHandler函数;然后读读OAL层的ISR,明白怎么根据中断找到对应驱动的原理,然后找到一个例程,看看IO中断的配置,你就会明白中断产生后系统的执行流程!这样才能明白硬件中断(IO),ISR,驱动以及系统调度的关系.

pla_007 2009-11-11
  • 打赏
  • 举报
回复
你要是具体的话,就得去看各类操作系统相关的驱动编写指南了。
Linux推荐《linux设备驱动开发详解》
Windows推荐《Windows设备驱动开发详解》、DDK手册和配套代码。

相关平台都有一些行内公认的入门书籍,看后再配合相关源码,不断学习之!

[Quote=引用 3 楼 testcase 的回复:]
pla_007同学,哪本操作系统的书上能把这些个说清楚啊,我不要泛泛的概论,我知道具体的,从程序员的角度。
[/Quote]
lgy198612 2009-11-11
  • 打赏
  • 举报
回复
你要是具体的话,就得去看各类操作系统相关的驱动编写指南了。
Linux推荐《linux设备驱动开发详解》
Windows推荐《Windows设备驱动开发详解》、DDK手册和配套代码。

相关平台都有一些行内公认的入门书籍,看后再配合相关源码,不断学习之!


xpj1983 2009-11-11
  • 打赏
  • 举报
回复
俺也正再学习呢,呵呵呵,天天向上。。。
mxm1986 2009-11-10
  • 打赏
  • 举报
回复
关注,我当时想看wince的驱动也没搞明白~~~感觉上层和底层完全是两个世界~~~
pla_007 2009-11-10
  • 打赏
  • 举报
回复
随便找本操作系统概论的书,上面都会有讲到。


简单说一些:

如果是单独连接的外部设备,就称为端口(串口)
如果是多个外部设备共用的,就称为总线(PCI、USB总线==)
总线再往上是相应的控制器,控制器都有固定(标准化)的IO地址。
中断,分为内/外、可/不可屏蔽中断,是通过中断向量来完成的。
驱动程序,就是用来与上述这些打交道的,将上面的抽象出来,做成一个个“类”,方便你使用。
gelu1040 2009-11-10
  • 打赏
  • 举报
回复
看《微机原理》或者《计算机组成原理》
testcase 2009-11-10
  • 打赏
  • 举报
回复
pla_007同学,哪本操作系统的书上能把这些个说清楚啊,我不要泛泛的概论,我知道具体的,从程序员的角度。

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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