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

网站主视觉网站添加广告源码

网站主视觉,网站添加广告源码,网站的分类有哪些类型,域名空间网站Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 在正式开启今天的学习前#xff0c;讲一讲为什么标题中加入了【主动】俩字。之前学习的阻塞和非阻塞IO#xff0c;都是在被动的接受应用程序的操作。而今天的学…Linux版本号4.1.15   芯片I.MX6ULL                                    大叔学Linux    品人间百味  思文短情长  在正式开启今天的学习前讲一讲为什么标题中加入了【主动】俩字。之前学习的阻塞和非阻塞IO都是在被动的接受应用程序的操作。而今天的学习的异步通知则是驱动程序自动的去上报自己的状态类似于以前我们学习的中断机制。 谈到【主动】和大家共勉一句话凡事先干起来就能消除90%的焦虑。当我第一次看到这句话的时候突然有种豁然开朗的感觉。往往大家都是在托腮忧虑自己想象中的困难而久久不知所措而停止行动。殊不知我们自己想象中的大部分困难也只存在于我们的想象中。当着手开始行动时你会发现也许并不难。 本篇笔记主要学习了嵌入式Linux异步通知驱动开发相关知识主要内容包括异步通知的相关概念及驱动开发的过程。其中异步通知又包括异步通知简介、驱动中的信号处理以及应用程序对异步通知的处理。驱动开发包括设备树的修改、驱动开发及测试。其中驱动开发是本节重点需要关注的内容。 本篇笔记的思维导图如下 一、异步通知 关键字主动 中断 1.异步通知简介 关键字信号 在应用程序中使用 signal 函数来设置指定信号的处理函数. sighandler_t signal(int signum, sighandler_t handler) signum要设置处理函数的信号。handler 信号的处理函数。返回值 设置成功的话返回信号的前一个处理函数设置失败的话返回 SIG_ERR。   2.驱动中的信号处理 1)、fasync_struct struct fasync_struct { spinlock_t fa_lock; int magic; int fa_fd; struct fasync_struct *fa_next; struct file *fa_file; struct rcu_head fa_rcu; }; 一般将 fasync_struct 结构体指针变量定义到设备结构体中。 2、fasync函数 int (*fasync) (int fd, struct file *filp, int on) int fasync_helper(int fd, struct file * filp, int on, struct fasync_struct **fapp) 当应用程序通过“fcntl(fd, F_SETFL, flags | FASYNC)”改变fasync 标记的时候驱动程序 file_operations 操作集中的 fasync 函数就会执行。 在关闭驱动文件的时候需要在 file_operations 操作集中的 release 函数中释放 fasync_structfasync_struct 的释放函数同样为 fasync_helper。 3)、kill_fasync 负责发送指定的信号。函数的原型如下 void kill_fasync(struct fasync_struct **fp, int sig, int band) fp要操作的 fasync_struct。sig 要发送的信号。band 可读时设置为 POLL_IN可写时设置为 POLL_OUT。 3.应用程序对异步通知的处理 1、注册信号处理函数 2、将本应用程序的进程号告诉给内核  fcntl(fd, F_SETOWN, getpid()) 3、开启异步通知 flags fcntl(fd, F_GETFL); /* 获取当前的进程状态 */ fcntl(fd, F_SETFL, flags | FASYNC); /* 开启当前进程异步通知功能 */ 二、硬件原理图分析 三、应用程序编写 1.修改设备树文件 2.程序编写 #include linux/fcntl.h//因为要用到相关的 API 函数。 struct fasync_struct *async_queue; /* 设备结构体中加入异步相关结构体 */ 109 if(atomic_read(dev-releasekey)) { /* 一次完整的按键过程 */ 110 if(dev-async_queue) 111 kill_fasync(dev-async_queue, SIGIO, POLL_IN); 112 } 如果是一次完整的按键过程那么就通过 kill_fasync 函数发送 SIGIO 信号。 269 static int imx6uirq_fasync(int fd, struct file *filp, int on) 270 { 271 struct imx6uirq_dev *dev (struct imx6uirq_dev *) filp-private_data; 272 return fasync_helper(fd, filp, on, dev-async_queue); 273 } imx6uirq_fasync 函数为 file_operations 操作集中的 fasync 函数此函数内容很简单就是调用一下 fasync_helper。 281 static int imx6uirq_release(struct inode *inode, struct file *filp) 282 { 283 return imx6uirq_fasync(-1, filp, 0); 284 } release 函数应用程序调用 close 函数关闭驱动设备文件的时候此函数就会执行在此函数中释放掉 fasync_struct 指针变量。 292 .fasync imx6uirq_fasync, 293 .release imx6uirq_release, 设置 file_operations 操作集中的 fasync 和 release 这两个成员变量。 3.编写测试APP 27 /* 28 * SIGIO 信号处理函数 29 * param - signum : 信号值 30 * return : 无 31 */ 32 static void sigio_signal_func(int signum) 33 { 34 int err 0; 35 unsigned int keyvalue 0; 36 37 err read(fd, keyvalue, sizeof(keyvalue)); 38 if(err 0) { 39 /* 读取错误 */ 40 } else { 41 printf(sigio signal! key value%d\r\n, keyvalue); 42 } 43 } sigio_signal_func 函数 SIGIO 信号的处理函数当驱动程序有效按键按下以后就会发送 SIGIO 信号此函数就会执行。此函数通过 read 函数读取按键值然后通过printf 函数打印在终端上。 signal(SIGIO, sigio_signal_func); 通过 signal 函数设置 SIGIO 信号的处理函数为 sigio_signal_func。 71 fcntl(fd, F_SETOWN, getpid()); /* 将当前进程的进程号告诉给内核 */ 72 flags fcntl(fd, F_GETFD); /* 获取当前的进程状态 */ 73 fcntl(fd, F_SETFL, flags | FASYNC);/* 设置进程启用异步通知功能 */ 设置当前进程的状态开启异步通知的功能。 四、运行测试 1.编译驱动程序和测试APP 1、编译驱动程序 obj-m : asyncnoti.o make -j32             asyncnoti.ko”的驱动模块   2、编译测试APP arm-linux-gnueabihf-gcc asyncnotiApp.c -o asyncnotiApp 应用程序asyncnotiApp 2.运行测试 depmod //第一次加载驱动的时候需要运行此命令 modprobe asyncnoti.ko //加载驱动 ./asyncnotiApp /dev/asyncnoti 按下开发板上的 KEY0 键终端就会输出按键值。 五、总结 本篇笔记主要学习了嵌入式Linux异步通知驱动开发相关知识主要内容包括异步通知的相关概念及驱动开发的过程。 本文为参考正点原子开发板配套教程整理而得仅用于学习交流使用不得用于商业用途。
http://www.w-s-a.com/news/951721/

相关文章:

  • 山西山西省建设厅网站微信备份如何转换为wordpress
  • 同城网站开发实用网站模板
  • 郑州做网站哪家公司好国外购买空间的网站有哪些
  • 资讯cms网站有那些餐饮品牌策划设计公司
  • 网站策划选题网站布局优化
  • 网站建设3000字wordpress 微信 主题制作
  • 代做寄生虫网站网站菜单效果
  • 网站备案为什么这么慢目录更新 wordpress
  • 视频在线制作网站Wordpress 外链图片6
  • 网站域名后缀有什么用网站建设的投资预算怎么写
  • 化妆品网站建设网站惠州网站关键字优化
  • 保定网站制作企业下载天眼查企业查询官网
  • 中山企业网站建设公司制作一个景点的网站
  • 连云港集团网站建设株洲建设网站
  • 做运动鞋评价的网站南山做网站联系电话
  • 网站开发公众号开发海南做公司网站
  • 论企业网站建设的必要性微信小程序做一个多少钱
  • 网站制作价格是多少元上海市中小企业服务中心
  • 网站建设管理人员济宁网站建设top
  • 桂林网站建设桂林网站的元素有哪些
  • 广东网站开发推荐网页制作个人简历模板教程
  • e建网保定百度seo公司
  • 网站建设中html代码网络培训课堂app
  • 无锡做网站seo自己做的网站如何上传网上
  • 园林景观网站模板小白怎么做跨境电商
  • 找第三方做网站 需要注意企业网站带数据库
  • 北京南站到北京站flash网站制作单选框和复选框ui组件
  • 网站建设核电集团网站设计案例
  • 宝塔做的网站能不能访问上海的广告公司网站建设
  • 网站会员系统方案新能源网站建设哪家好