Linux异步通知实验:应用程序对异步通知的处理

一. 简介

前面文章学习了 应用程序对异步通知的处理方法,另一篇文章实现了Linux驱动对异步通知的处理:

Linux应用程序对异步通知的处理-CSDN博客

Linux异步通知实验:驱动中异步通知的处理-CSDN博客

本文继续Linux异步通知实验,主要实现Linux应用程序对异步通知的处理(也就是信号处理函数)。

二. Linux异步通知实验:应用程序对异步通知的处理

1. 编写应用程序

在 15_async_notice工程目录下创建应用程序文件 signalApp.c,应用程序对异步通知的处理如下:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>/*
*测试按键是否按下
* 运行命令: ./signalApp /dev/key_irq
*/int fd; //信号处理函数
void sigio_signal_handler(int num)
{int ret = 0;int key_value = 0;ret = read(fd, &key_value, sizeof(key_value));if(ret < 0){printf("read key_value error!\n");}else{printf("Key0 Press! key_value: %d\n", key_value);}
}int main(int argc, char* argv[])
{int ret = 0;char * device_name = NULL;int key_value = 0;int flags = 0;if(argc != 2){printf("main's param number error!\n");return -1;}device_name = argv[1];fd = open(device_name, O_RDWR);if(fd < 0){printf("open led device failed!\n");return -1;}//1. 注册信号处理函数signal(SIGIO, sigio_signal_handler);//2. 将本应用程序PID告诉内核fcntl(fd, F_SETOWN, getpid()); //3. 开启异步通知flags = fcntl(fd, F_GETFL); //获取文件状态fcntl(fd, F_SETFL, flags | FASYNC);//开启当前进程的异步通知功能while(1){sleep(2);}return 0;
}

2.  编译应用程序

对 应用程序 signalApp.c进行编译:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/15_async_notice$ arm-linux-gnueabihf-gcc signalApp.c -o signalApp

我这里可以编译通过,生成应用程序 signalApp。

三. 对驱动模块进行测试

1.  拷贝驱动模块与应用程序

将上一篇文章(Linux驱动对异步通知处理的代码)编译生成的驱动模块 key_irq.ko与上面的应用程序 signalApp拷贝到 开发板系统中:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/15_async_notice$ sudo cp signalApp key_irq.ko /home/wangtian/linux/nfs_File/rootfs/lib/modules/4.1.15/ -f

2.  加载测试驱动模块

开发板上电后进入系统 /lib/modules/4.1.15/目录下,确认 驱动文件是否已经存在:

可以看出,驱动模块 key_irq.ko与应用程序 signalApp都已存在。

(1)  加载驱动模块

注意:如果选择使用 "modprobe" 命令加载驱动模块,则在驱动程序第一次加载时首先运行 "depmod" 命令!

这里因为 key_irq.ko驱动模块之前实验已经加载过,所以不是第一次运行,所以,不需要运行 "depmod"命令。

使用 "modprobe" 命令加载驱动模块:

(2) 确认驱动模块是否加载成功

查看 驱动模块是否加载成功:运行 "lsmod" 命令或运行 "cat /proc/devices" 命令进行查看。

这里运行 "lsmod" 命令查看:

可以看出,驱动模块已经加载成功。

确认是否自动创建设备节点,输入 "ls -l /dev/key_irq"命令确认:

可以看出,这里也已经自动创建了设备节点。

(3)  按键中断功能测试

这里选择后台运行程序,输入如下命令进行测试:

./signalApp /dev/key_irq 

这时按下按键,每按下一次按键就会有按键按下的信息,如下所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/542931.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI视频矩阵混剪系统|罐头鱼AI批量混剪定时发送

AI视频矩阵混剪系统&#xff1a;智能创作与发布的完美结合 随着社交媒体平台的快速发展&#xff0c;视频已成为各行业推广和传播的热门方式。然而&#xff0c;对于许多人来说&#xff0c;制作高质量的视频仍然是一项挑战。Q:290615413但现在&#xff0c;有了AI视频矩阵混剪系统…

字节面试: Mysql为什么用B+树,不用跳表?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团、蚂蚁、得物的面试资格&#xff0c;遇到很多很重要的相关面试题&#xff1a; Mysql用B树&#xff0c;不用跳表&…

【上海大学计算机组成原理实验报告】一、数据传送实验

一、实验目的 了解实验仪器数据总线的控制方式。掌握数据传送的基本原理。掌握各寄存器的结构、工作原理及其控制方法。 二、实验原理 根据实验指导书的相关内容&#xff0c;数据输入到寄存器的过程是先通过指令选择源和目标&#xff0c;再通过数据总线来传送数据&#xff0…

【ARM】UBL本地服务器离线激活license

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 UBL本地服务器离线激活license。 2、 问题场景 解决有用户外出时激活 license。 3、软硬件环境 1&#xff09;、软件版本&#xff1a;MDK5.39 2&#xff09;、电脑环境&#xff1a;Ubuntu 20.04 LTS 3&…

Android U pipeline-statusbar

Android U - statusbar pipeline 写在前面 Android原生从T开始对SystemUI进行MVVM改造&#xff0c;U上状态栏部分进行了修改&#xff1b;第一次出现修改不会删除原有逻辑&#xff0c;而是两版并行&#xff0c;留给其他开发者适配的时间&#xff1b;在下一个大版本可能会删除原…

PHP<=7.4.21 Development Server源码泄露漏洞 例题

打开题目 dirsearch扫描发现存在shell.php 非预期解 访问shell.php&#xff0c;往下翻直接就看到了flag.. 正常解法 访问shell.php 看见php的版本是7.3.33 我们知道 PHP<7.4.21时通过php -S开起的WEB服务器存在源码泄露漏洞&#xff0c;可以将PHP文件作为静态文件直接输…

Linux服务器(RedHat、CentOS系)安全相关巡检shell脚本

提示&#xff1a;巡检脚本可以使用crontab定时执行&#xff0c;人工根据执行结束时间点统一收集报告文件即可。 #!/bin/bash# Define output file current_date$(date "%Y%m%d") # Gets the current date in YYYYMMDD format echo >server_security_inspection_r…

C++笔记:从零开始一步步手撕高阶数据结构AVL树

文章目录 高度平衡二叉搜索树实现一颗AVL树结点与树的描述——定义类AVL树的插入操作步骤1&#xff1a;按照二叉搜索树的方法插入结点步骤2&#xff1a;自底向上调整平衡因子步骤3&#xff1a;触发旋转操作&#xff08;AVL树平衡的精髓&#xff09;右单旋左单旋左右双旋右左双旋…

配置vscode环境极简版(C/C++)(图文)

前言 众所周知&#xff0c;vscode是一个代码编辑器&#xff0c;不能直接编译运行我们敲的代码&#xff0c;必须提前配置好环境&#xff0c;而这也是劝退一众小白的一大重要因素&#xff0c;下面我想以一种提纲挈领的方式带大家走一遍从配置环境到运行实操代码的全过程。 安装…

布隆过滤器原理介绍和典型应用案例

整理自己过去使用布隆过滤器的应用案例和理解 基本介绍 1970年由布隆提出的一种空间效率很高的概率型数据结构&#xff0c;它可以用于检索一个元素是否在一个集合中&#xff0c;由只存0或1的位数组和多个hash算法, 进行判断数据 【一定不存在或者可能存在的算法】 如果这些…

【tls招新web部分题解】

emowebshell 非预期 题目提示webshell&#xff0c;就直接尝试一下常见的后门命名的规则 如 shell.php这里运气比较好&#xff0c;可以直接shell.php就出来 要是不想这样尝试的话&#xff0c;也可以直接dirsearch进行目录爆破 然后在phpinfo中直接搜素ctf或者flag就可以看到…

oracle基础-子查询 备份

一、什么是子查询 子查询是在SQL语句内的另外一条select语句&#xff0c;也被称为内查询活着内select语句。在select、insert、update、delete命令中允许是一个表达式的地方都可以包含子查询&#xff0c;子查询也可以包含在另一个子查询中。 【例1.1】在Scott模式下&#xff0…