社区
驱动开发/核心开发
帖子详情
驱动、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
打赏
收藏
驱动、IO Port、IRQ和硬件它们是如何联系起来的
谁明白驱动、IO Port、IRQ和硬件它们是如何联系起来的吗? 硬件和IRQ的关系是可以动态设置的,那只能是通过IO Port来设置,但IO Port又是动态确定的,那操作系统如何分配IO Port呢?操作系统如何确定硬件的类型的呢?我们可以通过int指令来调用BIOS中的程序,如读取硬盘,那BIOS又是如何确定硬盘的IO Port呢?我手上的资料无法回答这些问题,Google也不管用,哪位高手可告诉我看哪些资料可以明白这些。 万分感谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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同学,哪本操作系统的书上能把这些个说清楚啊,我不要泛泛的概论,我知道具体的,从程序员的角度。
io
port
和
io
mem
1)cat /proc/
io
mem看到的内容:
IO
memory空间的地址资源分配情况,以树状结构显示...
IO
port
空间的地址资源分配情况,以树状结构显示。[源于x86平台的设计思想,目前基本不用了] request_reg
io
n
io
remap # def
linux
驱动
访问
io
端口流程,Linux
驱动
程序开发 - 设备
IO
序言:前面我们提到,设备
驱动
程序的主要功能操作设备,更准确的说就是如何操作设备寄存器或设备内存。不同的计算机体系结构提供了不同的设备操作接口,主要就是
IO
端口映射(
Port
s)或
IO
内存映射(Memory-Map)。例如X86...
[架构之路-46]:目标系统 - 系统软件 - Linux OS
硬件
设备
驱动
-U
IO
用户空间
IO
驱动
框架与用户空间协议栈
u
io
全称为用户空间
IO
(Userspace I/O),是一种在用户空间编写设备
驱动
程序的框架。一般而言,Linux的
驱动
是运行在内核空间的,即设备
驱动
本身是作为内核源码的一部分进行编译的,这样的
驱动
程序能够访问系统的所有...
信号
驱动
io
5.4 信号
驱动
I/O 使用信号
驱动
I/O时,当网络套接字可读后,内核通过发送SIG
IO
信号通知应用进程,于是应用可以开始读取数据。有时也称此方式为异步I/O。但是严格讲,该方式并不能算真正的异步I/O,因为实际读取数据到...
zynq7010 在 linux 系统下
irq
_f2p 中断
驱动
zynq 平台,需要用到 pl (FPGA)端发送中断给 ps端(ARM),发送的中断名称为
IRQ
_F2P[15:0],该中断一共有16个,中断号分别为 61-68, 84-91。本文针对该中断在linux 环境开,开发
驱动
,
驱动
方式采用 u
io
模型。 2 ...
驱动开发/核心开发
21,597
社区成员
21,709
社区内容
发帖
与我相关
我的任务
驱动开发/核心开发
硬件/嵌入开发 驱动开发/核心开发
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章