Linux 设备文件

Linux 设备文件
��L��       óôLª         ôôL│Â
      ôôL≥Â
         ôôL:
                      ôôL<
                                       õôL┬      õôL
┬         õôL,               õôL,          öôL÷      öôLü         öôLä       öôLç         öôLÎá
      öôLÓá
         ÷ôLâ³      ÷ôLç³         ÷ôL]æ       ÷ôL◆æ         ÷ôL≥á
      ÷ôL£á
         øôL D      øôL"D         øôLW       øôLW         øôLª  !   øôª         ùôLê÷  !    ùôLí÷         ùôL  !   ùôL          ùôL&ç         !    ùôL(ç          úôLÞ÷  !   úôLà÷         úôL<  !    úôL>         úôL»+    !   úôL¼+          úôL¢
  !    úôL¢
         ûôL  !   ûôL         ûôLJ*  !    ûôLM*         ûôL  !   ûôL         ûôLB
  !    ûôLD
         ýôLÞ   !    ýôLà          ýôL  !   ýôL         ýôLôLàÎ
         ÿôL¨   !    ÿôLª          ÿôL]␉  !   ÿôL◆␉         ÿôLø  !    ÿôLø         ÿôLÏ≠
      !   ÿôLÒ≠
          ôL¾#  !    ôLÁ#          ôL=Ù  !     ôL@Ù          ôL»
  !    ôL½
          ôL7»
                 !     ôL:»
                                        ôLð  !    ôLó         ôL└   !    ôL⎺          ôL'ñ  !   ôL*ñ         ôL¨¬  !    ôLª¬         ôL!Ù  !   ôL#Ù         ôL␍ò  !  

这是使用 cat /my/device/file 得到的操纵杆输出。我该如何读取设备文件?以上是二进制字节吗?我只需要能够检测这些字符是什么。

教程/建议非常棒!

答案1

设备文件只是内核空间的一个链接。输出和如何“读取”设备文件取决于设备本身。您必须查阅驱动程序的文档(如果有)或阅读源代码以了解其写入的内容。

我最好的猜测是它的二进制文件由驱动程序源中的 C 结构描述。

答案2

设备文件是特殊文件,而不是像 下的许多文件那样的文本文件/proc

如果你只想使用用户空间程序设置操纵杆,请参阅例如说明这里。您的桌面环境可能还附带专用软件来配置它。要直接访问它们,您需要通过以下方式访问它们他们的 C API

答案3

“设备文件”是磁盘上链接到内核代码的特殊节点。此代码是设备驱动程序。加载设备驱动程序时,您可以设置特定函数,当对“文件”调用某些系统调用(打开/读取/写入/关闭等)时调用这些函数。

因此,当您调用“read”时,它会调用设备驱动程序代码中的特定函数。此代码几乎可以在内核模式下执行任何操作;在这种情况下,读取操纵杆的硬件数据、将电压值转换为数字,然后从设备文件中读取它,这很有意义。

只是随机猜测,我确信发送的值只是操纵杆 X 和 Y(和 Z?)的位置读数以及一些按钮设置。以文本形式读取不起作用,您需要执行十六进制和/或数字转储的东西。插入操纵杆,从中读取值,然后移动操纵杆,按下按钮,看看值如何变化。

源代码可能有注释说明这些值的含义,但实际代码可能对您来说是不可读的(除非您知道硬件寄存器和 USB 协议内容的含义)。

答案4

您应该确保您的设备的波特率等于您的串行口的波特率。

检查速度波特率:
$ stty < /my/device/file

并且设备和串行端口速度相等:
$ stty -F /my/device/file XXspeedXX

相关内容