当前位置: 首页 > news >正文

陕西省人民*门户网站新闻最新消息

陕西省人民政府门户网站,新闻最新消息,公司制作一个网站,北京网站建设团队uinput 简介 uinput 是一个内核驱动,应用程序通过它可以在内核中模拟一个输入设备,其设备文件名是 /dev/uinput 或 /dev/input/uinput。 uinput 使用 使用 uinput 时遵循以下步骤: 通过 open 打开 uinput 设备通过 ioctl 设置属性位图通过…

uinput 简介

uinput 是一个内核驱动,应用程序通过它可以在内核中模拟一个输入设备,其设备文件名是 /dev/uinput 或 /dev/input/uinput。

uinput 使用

使用 uinput 时遵循以下步骤:

  1. 通过 open 打开 uinput 设备
  2. 通过 ioctl 设置属性位图
  3. 通过 ioctl 设置事件类型位图和对应的事件码位图
  4. 通过 ioctl 设置ID和名称
  5. 通过 ioctl 创建输入设备
  6. 通过 write 上报输入事件
  7. 通过 close 关闭 uinput 设备

使能 uinput

在内核源码目录通过 make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- menuconfig 打开配置菜单,然后选择 User level driver support ,路径如下:

	-> Device Drivers-> Input device support-> Miscellaneous devices<M> User level driver support

如果选择编译成模块,其生成 ko 文件位于内核目录的 drivers/input/misc/中,文件名是uinput.ko

编程实践

在应用层中使用 uinput 在内核中模拟一个按键输入设备,程序流程如下:

  1. 打开 uinput 设备
  2. 设置属性位图、事件类型位图、事件码位图
  3. 设置ID和名称
  4. 创建输入设备
  5. 周期上报按键事件
    完整的代码如下所示:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <string.h>
#include <linux/uinput.h>void emit(int fd, int type, int code, int val)
{struct input_event ie;ie.type = type;ie.code = code;ie.value = val;//以下参数忽略ie.time.tv_sec = 0;ie.time.tv_usec = 0;//上报输入事件write(fd, &ie, sizeof(ie));
}int main(int argc, const char *argv[])
{int fd;struct uinput_setup usetup;const char *name = "/dev/uinput";if(argc >= 2)name = argv[1];//打开 uinput 设备fd = open(name, O_WRONLY);if(fd < 0){perror("open");return -1;}//设置属性位图if(ioctl(fd, UI_SET_PROPBIT, INPUT_PROP_BUTTONPAD) < 0){close(fd);perror("UI_SET_PROPBIT");return -1;}//设置事件类型位图和对应的事件码位图if(ioctl(fd, UI_SET_EVBIT, EV_KEY) < 0){close(fd);perror("UI_SET_EVBIT");return -1;}if(ioctl(fd, UI_SET_KEYBIT, KEY_0) < 0){close(fd);perror("UI_SET_KEYBIT");return -1;}//设置ID和名称memset(&usetup, 0, sizeof(usetup));usetup.id.bustype = BUS_USB;usetup.id.vendor = 0x1234;usetup.id.product = 0x5678;strcpy(usetup.name, "Example device");if(ioctl(fd, UI_DEV_SETUP, &usetup) < 0){close(fd);perror("UI_DEV_SETUP");return -1;}//创建输入设备if(ioctl(fd, UI_DEV_CREATE) < 0){close(fd);perror("UI_DEV_CREATE");return -1;}while(1){emit(fd, EV_KEY, KEY_0, 1);emit(fd, EV_SYN, SYN_REPORT, 0);usleep(500*1000);emit(fd, EV_KEY, KEY_0, 0);emit(fd, EV_SYN, SYN_REPORT, 0);usleep(500*1000);}//close(fd);
}

测试程序参考10.1Linux输入子系统介绍中的按键测试程序

上机测试

  1. 修改内核,使能 uinput
  2. 在这里下载代码,并进行编译,得到 uinput_app.out 和 test_app.out 两个可执行程序。
  3. 执行命令 ./uinput_app.out ,此时会通过 uinput 在内核空间创建一个按键输入设备。
    在这里插入图片描述
  4. 打开另一个终端,执行命令 ./test_app.out /dev/input/event0 ,运行测试程序,其中 /dev/input/event0 为按键输入设备的文件名,由系统自动生成,需要根据实际情况确定,此时测试程序会输出按键状态。
    在这里插入图片描述
http://www.mfbz.cn/news/734/

相关文章:

  • 网站优化的内容今日热点新闻事件摘抄2022
  • 个人做门户网站网站维护公司
  • 河北省工程造价信息网河南seo排名
  • 深圳宝安区疫情情况哈尔滨百度搜索排名优化
  • 厦门建行网站首页网站排名seo
  • 做网站需要投资多少钱百度seo优化是什么
  • 彩票网站为啥链接做两次跳转关键一招
  • 平面设计网上培训湖北seo推广
  • 做网站的素材都在哪里下载淘宝推广费用多少钱一天
  • 渭南网站制作深圳网络推广市场
  • 最火的网站开发语言公司官网制作多少钱
  • 建设公司网站意义谷歌排名算法
  • 网站页面怎么做导航泉州关键词优化报价
  • 住房和城乡建设部网站主页深圳关键词优化
  • 网站预算表怎么做怎么申请一个网站
  • 建设个人网站需要多少钱手机网页制作
  • 网站群建设规范我国的网络营销公司
  • 苏州外贸网站制作公司网络营销比较常用的营销模式
  • 品牌网络市场环境调研报告安卓系统最好优化软件
  • 中山医疗网站建设发帖推广百度首页
  • 数码b2c网站百度关键词刷搜索量
  • seo教程资源潍坊百度seo公司
  • iis 配置网站 404页面广告策划案优秀案例
  • 网站查询ipgoogle优化排名
  • 广告平面设计欣赏品牌seo培训
  • 网站建设美国网站排名靠前方法
  • 个人网站建设分几个步走seo职业培训班
  • 企业活动网站创意案例市场营销比较好写的论文题目
  • 自己做的网站怎么接入银联支付最新国内新闻重大事件
  • 网站排名做不上去吗济南seo网站排名关键词优化