加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux一个例子驱动

发布时间:2020-12-13 23:12:15 所属栏目:Linux 来源:网络整理
导读:我们介绍的驱动称为 short (Simple Hardware Operations and Raw Tests). 所有它做 的是读和写几个 8-位 端口,从你在加载时选择的开始. 缺省地,它使用分配给 PC 并口 的端口范围. 每个设备节点(有一个独特的次编号)存取一个不同的端口. short 驱动不做 任何

我们介绍的驱动称为 short (Simple Hardware Operations and Raw Tests). 所有它做 的是读和写几个 8-位 端口,从你在加载时选择的开始. 缺省地,它使用分配给 PC 并口 的端口范围. 每个设备节点(有一个独特的次编号)存取一个不同的端口. short 驱动不做 任何有用的事情; 它只是隔离来作为操作端口的单个指令给外部使用. 如果你习惯端口 I/O,你可以使用 short 来熟悉它; 你能够测量它花费来通过端口传送数据的时间或者其 他游戏的时间.

?

为 short 在你的系统上运行,必须有存取底层硬件设备的自由(缺省地,并口); 因此,不能有其他驱动已经分配了它. 大部分现代发布设置并口驱动作为只在需要时加载的模块,因此对 I/O 地址的竞争常常不是个问题. 如果,但是,你从 short 得到一个"无法获得 I/O 地址" 错误(在控制台上或者在系统 log 文件),一些其他的驱动可能已经获得这个 端口. 一个快速浏览 /proc/ioports 常常告诉你哪个驱动在捣乱. 同样的告诫应用于另 外 I/O 设备如果你没有在使用并口.

?

从现在开始,我们只是用"并口"来简化讨论. 但是,你能够设置基本的模块参数在加载时 来重定向 short 到其他 I/O 设备. 这个特性允许例子代码在任何 Linux 平台上运行,这里你对一个数字 I/O 接口有权限通过 outb 和 inb 存取( 尽管实际的硬件是内存映射 的,除 x86 外的所有平台). 后面,在"使用 I/O 内存"的一节,我们展示 short 如何用 来使用通用的内存映射数字 I/O.

?

为观察在并口上发生了什么以及如果你有使用硬件的爱好,你可以焊接尽管 LED 到输出 管脚. 每个 LED 应当串连一个 1-K 电阻导向一个地引脚(除非,当然,你的 LED 有内嵌 的电阻). 如果你连接一个输出引脚到一个输入管脚,你会产生你自己的输入能够从输入 端口读到.

?

注意,你无法只连接一个打印机到并口并且看到数据发向 short. 这个驱动实现简单的对 I/O 端口的存取,并且没有进行与打印机需要的来操作数据的握手; 在下一章,我们展示 了一个例子驱动(称为 shortprint ),它能够驱动并口打印机; 这个驱动使用中断,因此我们还是不能到这一点.

?

如果你要查看并口数据通过焊接 LED 到一个 D-型 连接器,我们建议你不要使用管脚 9 和管脚 10,因为我们之后连接它们在一起来运行第 10 章展示的例子代码.

?

只考虑到 short,/dev/short0 写到和读自位于 I/O 基地址的 8-bit 端口( 0x378,除 非在加载时间改变). /dev/short1 写到位于基址 + 1 的 8-位,等等直到基址 + 7.

?

/dev/short0 进行的实际输出操作是基于使用 outb 的一个紧凑循环. 一个内存屏障指令 用来保证输出操作实际发生并且不被优化掉:

?

while (count--) { outb(*(ptr++),port);

wmb();

}

?

你可以运行下列命令来点亮你的 LED: echo -n "any string" > /dev/short0

每个 LED 监视一个单个的输出端口位. 记住只有最后写入的字符,保持稳定在输出管脚 上足够长时间你的眼睛能感觉到. 因此,我们建议你阻止自动插入一个结尾新行,通过传 递一个 -n 选项给 echo.

?

读是通过一个类似的函数,围绕 inb 而不是 outb 建立的. 为了从并口读"有意义的"值,你需要某个硬件连接到连接器的输入管脚来产生信号. 如果没有信号,你会读到一个相同 字节的无结尾的流. 如果你选择从一个输出端口读取,你极可能得到写到端口的最后的值 (这适用于并口和普通使用的其他数字 I/O 电路). 因此,那些不喜欢拿出他们的烙铁的 人可以读取当前的输出值在端口 0x378,通过运行这样一个命令:

?

dd if=/dev/short0 bs=1 count=1 | od -t x1

?

为演示所有 I/O 指令的使用,每个 short 设备有 3 个变形: /dev/short0 进行刚刚展 示的循环,/dev/short0p 使用 outb_p 和 inb_p 代替"快速"函数,并且 /dev/short0s 使用字串指令. 有 8 个这样的设备,从 short0 到 short7. 尽管 PC 并口只有 3 个端 口,你可能需要它们更多如果使用不同的 I/O 设备来运行你的测试.

?

short 驱动进行一个非常少的硬件控制,但是足够来展示如何使用 I/O 端口指令. 感兴 趣的读者可能想看看 parpor 和 parport_pc 模块的源码,来知道这个设备在真实生活中 能有多复杂来支持一系列并口上的设备(打印机,磁带备份,网络接口)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读