3804|2

222

帖子

2

TA的资源

一粒金砂(高级)

楼主
 

linux如何修改当前输入设备 [复制链接]

平时都是在telnet环境远程调试,输入\输出设备是虚拟终端
[root@TR600-Plus ~]# ls -l /proc//fd
total 0
lrwx------    1 root     root            64 Mar 21 14:15 0 -> /dev/pts/0
lrwx------    1 root     root            64 Mar 21 14:15 1 -> /dev/pts/0
lrwx------    1 root     root            64 Mar 21 14:15 2 -> /dev/pts/0


现在我需要将输入、输出都重定向
输入:USB键盘  (0设备指向   /dev/input/event3)
输出:LCD屏幕 (1\2设备指向   /dev/tty0)

输出重定向我已经做到
[root@TR600-Plus nfs]# ./a.out > /dev/tty1
[root@TR600-Plus ~]# ls -l /proc//fd
total 0
lrwx------    1 root     root            64 Mar 21 14:17 0 -> /dev/pts/0
l-wx------    1 root     root            64 Mar 21 14:17 1 -> /dev/tty1
lrwx------    1 root     root            64 Mar 21 14:17 2 -> /dev/pts/0

随意敲击USB键盘按键,LCD上能显示,但仅仅是显示,它得不到程序界面任何响应在USB键盘上Ctrl+C无法终止程序
只有在telnet的/dev/pts/0输入Ctrl+C才能终结

尝试摸索Qt的做法
运行qt程序,查阅它打开的设备
[root@TR600-Plus ~]# ls -l /proc/1405/fd
total 0
lrwx------    1 root     root            64 Mar 21 14:21 0 -> /dev/pts/0
lrwx------    1 root     root            64 Mar 21 14:21 1 -> /dev/pts/0
lrwx------    1 root     root            64 Mar 21 14:21 10 -> /dev/input/event2 触屏
lrwx------    1 root     root            64 Mar 21 14:21 11 -> /dev/input/event3 USB键盘
lrwx------    1 root     root            64 Mar 21 14:21 12 -> socket:[1336]
lrwx------    1 root     root            64 Mar 21 14:21 13 -> /dev/spidev3.0
lrwx------    1 root     root            64 Mar 21 14:21 14 -> /tmp/qtembedded-0/fonts/_12_50.qsf
lrwx------    1 root     root            64 Mar 21 14:21 2 -> /dev/pts/0
lr-x------    1 root     root            64 Mar 21 14:21 3 -> pipe:[1328]
l-wx------    1 root     root            64 Mar 21 14:21 4 -> pipe:[1328]
lr-x------    1 root     root            64 Mar 21 14:21 5 -> pipe:[1331]
l-wx------    1 root     root            64 Mar 21 14:21 6 -> pipe:[1331]
lrwx------    1 root     root            64 Mar 21 14:21 7 -> socket:[1332]
lrwx------    1 root     root            64 Mar 21 14:21 8 -> /dev/fb0
lrwx------    1 root     root            64 Mar 21 14:21 9 -> /dev/tty0


貌似Qt也没有对设备0重定向,而是直接打开新设备,我对他的做法很好奇。它应该是另成一套体系了,若按照它的做法,应该不能使用标准C库函数 比如  getchar、scanf、getchar等,这些接口都是从标准输入设备0上读取的。

我的最终目的就是能通过调用 getchar() 实现相应,
我还尝试使用   dup2  来重定向,但也不能达到效果


最新回复

LCD 能显示你输入的值 还不叫响应吗? 在USB键盘上Ctrl+C无法终止程序 是因为你的内核没有将控制台定向到USB键盘上 键盘只是输入设备,轻易不要重定向,你还是考虑在你的LCD上再开一个终端界面的窗口,键盘在这个窗口下输入吧。  详情 回复 发表于 2017-3-21 16:01
点赞 关注

回复
举报

1234

帖子

4

TA的资源

纯净的硅(高级)

沙发
 
LCD 能显示你输入的值 还不叫响应吗?

在USB键盘上Ctrl+C无法终止程序 是因为你的内核没有将控制台定向到USB键盘上

键盘只是输入设备,轻易不要重定向,你还是考虑在你的LCD上再开一个终端界面的窗口,键盘在这个窗口下输入吧。

点评

键盘输入LCD上显示,和你说的一样“只是内核没有将控制tail定向到USB键盘上” 我现在用的方法与你说的窗口差不多 ptmx 创建一个虚拟终端,/dev/pts/n,在讲STDIN重定向到他,其中一个任务读取/dev/input/event  详情 回复 发表于 2017-3-21 17:18
 
个人签名天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友
 

回复

222

帖子

2

TA的资源

一粒金砂(高级)

板凳
 
本帖最后由 lzwml 于 2017-3-21 17:28 编辑
ywlzh 发表于 2017-3-21 16:01
LCD 能显示你输入的值 还不叫响应吗?

在USB键盘上Ctrl+C无法终止程序 是因为你的内核没有将控制台定向 ...

键盘输入LCD上显示,和你说的一样“只是内核没有将控制tail定向到USB键盘上”

我现在用的方法与你说的窗口差不多

勉强解决我的问题
ptmx 创建一个虚拟终端,/dev/pts/n,在将STDIN重定向到它,其中一个任务读取/dev/input/event3,并解析读取到的内容(网上有大把多例子),最后将解析的键值输出到/dev/pts/n,这样读取端就能调用getchar()得到结果


现在遇到的问题是:/dev/input/event3的按键值不是ADCII,要自己转码。

linux/input.h定义的其实是扫描码
#define KEY_A           30  
#define KEY_S           31
#define KEY_BACKSPACE       14
#define KEY_TAB      
   15


ASCII是虚拟码
A       0X41
S  
      0X53
BACKSPACE    0X08
TAB   
    0X09

不知道我的方式是不是奇葩,不懂有没有更好的
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表