Linux 嵌入式驱动 INPUT 子系统:应用程序读取上报事件CPU占用率0%及read()出错

本文分析了Linux嵌入式驱动中INPUT子系统的问题,包括应用程序在读取上报事件时CPU占用率为0%的现象,以及read()函数出错的情况。在CPU占用率问题上,发现read()可能因等待上报事件而休眠。在read()出错问题中,错误在于将input_event定义为指针而未分配内存,导致数据异常。修正此问题后,数据打印恢复正常,事件判断成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 应用程序读取上报事件CPU占用率0%
1.1 问题描述
  • 考虑到应用程序使用 while(1) 循环 read() 上报事件,类似于普通按键实验,cpu 占用率拉满
  • 并且在正点原子关于 input 子系统实验讲解中,有较多朋友提到 cpu 占用率高
  • 加载驱动程序,后台运行测试程序,top 查看应用进程 cpu 占用率约为 0%,几乎不耗费 cpu
    • 加载按键 input 驱动:modprobe inputkey
    • 后台运行测试 APP./inputkeyAPP /dev/input/event0 &
      在这里插入图片描述
1.2 现象分析

上报事件可能跟异步通知类似,上报后应用程序 read() 才有效,否则 read() 休眠等待。

debug:

  1. read() 前打印一串信息提示上报

    while(1) {
         
         
        /* 如果 read 不阻塞, 将一直打印 input_event! */
    	printf("input_event!\r\n");
    	ret = read(fd, &ievent, sizeof(struct input_event));
        
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值