新手问题,驱动和硬件是如何通讯的

[复制链接]
查看11 | 回复6 | 2021-1-27 05:20:40 | 显示全部楼层 |阅读模式
想了解驱动开发,看了一些linux上驱动开发的文章,但一直有一个疑问没有搞清楚,就是驱动程序是如何和实际的硬件通讯的
比如我是一个硬件商,我做了一个硬件,这个硬件上有一个按钮和一个灯,通过usb接口,或者PS/2接口连接电脑
这个硬件有两个功能
应用程序可以通过驱动得到这个按键按下还是抬起
应用程序可以通过驱动让灯打开或关闭
那么
1)我这个硬件应该怎么实现,需要遵循什么要求
2)我的驱动程序如何与我的硬件联系上,如何通讯


分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:20:40 | 显示全部楼层
比如最简单的led,假设这些led直接与cpu的IO口直接相连,那在led的驱动程序里,只要提供相应IO口置0和置1的方法就行。
应用程序调用驱动提供的借口就能做到开灯,关灯。你说的按键,就肯定有相应的中断(或查询)
回复

使用道具 举报

千问 | 2021-1-27 05:20:40 | 显示全部楼层
问题问的实在太浮躁,没法回答。
你举的例子,根本不是驱动开发啊!只是驱动的使用而已。
什么是驱动?就是驱动USB控制器、GPIO……你这些例子,只是使用驱动的接口去做事情罢了。
底子还完全没有呢,继续加油吧。
回复

使用道具 举报

千问 | 2021-1-27 05:20:40 | 显示全部楼层
设计出来的硬件要有跟总线连接的接口,连接上之后要有暴露出来的可以总线直接访问的地址,这个地址指向硬件的什么就由硬件厂商按照既有标准来实现。这样cpu就可以在枚举之后用硬件获得的地址(有的是直接定死的地址)去跟硬件通信了。
回复

使用道具 举报

千问 | 2021-1-27 05:20:40 | 显示全部楼层
我的理解是:1.用户要访问某个硬件设备,只需要访问对应的文件即可!2.文件就是硬件,硬件就是文件,通过系统调用函数即可访问文件3.linux系统硬件设备对应的文件不是普通的文本文件而是设备文件
回复

使用道具 举报

千问 | 2021-1-27 05:20:40 | 显示全部楼层
1.驱动通过os提供的API,为用户态提供基于文件的read/write接口;
2.驱动通过io指令或者内存映射的方式跟硬件的寄存器打交道,遵守硬件的逻辑规则。
回复

使用道具 举报

千问 | 2021-1-27 05:20:40 | 显示全部楼层
驱动程序和硬件是通过如下方式通信的:
1.硬件上通常包括寄存器和IO空间
2.驱动程序通过特殊指令intb,outb来读写这些寄存器或者io空间,从而实现驱动程序和硬件的通信。
现在的操作系统一般都将硬件的寄存器和IO空间通过地址映射到内存空间,这样驱动程序就可以像读写普通的内存一样来读写硬件的寄存器和IO空间,方便了驱动程序的编写。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行