阻塞:阻塞调用是指调用结果返回之前,当前进程程会被挂起(休眠)。函数只有在得到结果之后才会返回。默认情况下,文件都是以这种方式打开。

非阻塞:指在不能立刻得到结果之前,该函数不会阻塞当前进程程,而会立刻返回。应用程序可选择以阻塞或非阻塞方式打开设备文件,然后设备进行读写操作,如果驱动的读写函数支持阻塞和非阻塞功能,这两种打开方式才会有区别。
阻塞示例 :fd = open("/xxx/word", O_RDONLY ); // 默认阻塞方式打开
如果此时没有数据可以读取,则执行休眠
如果有数据可以读取,则马上读取数据,不休眠,读取数据后马上返回。
非阻塞示例 :fd = open("/xxx/word", O_RDONLY | O_NONBLOCK ); //非阻塞方式打开
如果此时已经有数据可以读取,则读取数据再返回。
如果没有数据可以读,也马上返回,但是返回一个错误码。
1)驱动中如何得到用户空间应用程序打开的方式?        
open一个设备,内核会创建一个file结构,并且把打开方式的数值存放到file结构成员f_flags成员中,驱动程序的read,write 接口可以使用参数file指针取得文件打开方式。file结构中有一个成员是f_flags ,创建时候,内核会把open 函数的最后一个参数 flag 数值保存在 f_flags 变量中。
static ssize_t xxx_read(struct file *pfile, char user *buf, size_t count, loff_t *poff){    ……    //判断当前是否有按键动作    if(没有按键动作)    {        //判断 pfile->f_flags 成员是否设置 O_NONBLOCK          if(pfile->f_flags & O_NONBLOCK) //表示用户空间使用非阻塞打开        {                return - EAGAIN; //返回一个错误码,告诉用户空间你可以再尝试读取        }        //阻塞方式打开,没有数据就休眠,不马上返回else        {                //休眠,等待有按键动作唤醒进程。        }    }}2)如何知道是否有按键动作?
如果按键按键或松开时刻,会产生一个中断,所以,在中断程序设置一个标志即可。
定义一个全局变量,初始值为 0,表示没有按键动作发生,在中断程序中设置这个变量值为 1,表示发生按键动作。
3)如何让进程进入休眠状态?

每条IEPL专线连接都是全占带宽,用户应用都是自由争夺带宽的。带宽利用率低,线路租金昂贵。
最简单,最直接的休眠方式: msleep 函数
这个函数:一旦调用,则调用进程会休眠指定长的时间,时间一到内核会唤醒这个进程.
//休眠,等待有按键动作唤醒进程。
    while(press == 0)                 msleep(5); // 休眠5ms

芯灵思Sinlinx A64开发板 Linux内核等待队列p相关推荐

  1. 全志a64linux内核编译,芯灵思Sinlinx A64 Linuxqt编译安装

    开发平台 芯灵思Sinlinx A64 内存: 1GB 存储: 4GB 开发板交流 641395230 前提条件搭建好CentOS环境 光盘目录 :芯灵思SIN-A64光盘资料\Linux & ...

  2. Linux移植:正点原子阿尔法IMX6ULL开发板Linux内核源码移植详细步骤(4.1.15版本内核)

    Linux移植:正点原子阿尔法IMX6ULL开发板Linux内核源码移植详细步骤(4.1.15版本内核) 文章目录 Linux移植:正点原子阿尔法IMX6ULL开发板Linux内核源码移植详细步骤(4 ...

  3. linux内核剪裁 4412,itop4412开发板-Linux内核的编译

    本篇文章基于itop4412开发板 5.3.2.1源码目录 Linux 内核源码在光盘"06_源码_uboot 和 kernel"目录下,如下图所示. 5.3.2.2 编译器 内核 ...

  4. 全志linux led驱动程序,芯灵思Sinlinx A64 linux通过设备树写LED驱动(附参考代码,未测试)...

    #include #include #include #include #include #include #include #include #include #include #include # ...

  5. a33 linux 硬解码_全志A33 lichee 开发板 Linux中断编程原理说明

    开发平台 * 芯灵思SinlinxA33开发板 嵌入式linux 开发板交流 641395230 本节实验目标实现按键触发中断终端显示按键松开或按下 实验平台 芯灵思Sinlinx A33 开发板 s ...

  6. 全志 A64 开发板移植SQLite3

    开发平台 芯灵思Sinlinx A64 内存: 1GB 存储: 4GB 开发板详细参数 https://m.tb.cn/h.3wMaSKm 开发板交流群 641395230 首先到 http://ww ...

  7. 迅为IMX6ULL开发板Linux学习教程

    1800+页使用手册(持续更新)+入门视频教程+实战视频教程 关注VX公众号:迅为电子 ,  回复 :终结者,免费获取产品资料  让教程更细致,终结入门难! 所有教程由迅为原创,是迅为工作多年的工程师 ...

  8. 瑞芯微RK3399芯片开发板香橙派4的HDMI音频播放功能测试(Linux系统)

    瑞芯微RK3399芯片开发板香橙派OrangePi 4(16G)用拥有4G内存16G存储,集成双频WiFi.蓝牙5.0.HDMI输出.千兆网口.USB接口等丰富的功能接口,支持双摄像头输入和两路视频输 ...

  9. 正点原子Linux开发板 spi内核驱动 0.96寸ips屏教程

    正点原子Linux开发板 spi内核驱动 0.96寸ips屏教程 首先选择模块 设备树配置 spi驱动程序(用的spi_driver) app 最近做下底层SPI驱动来驱动IPS屏,本来想实现这种效果 ...

最新文章

  1. apache服务Forbidden 403问题精彩总结
  2. Linux文件与目录管理(文件查阅)
  3. linux进程授权,一个linux小程序的免授权或通用授权
  4. UVa 208 - Firetruck (回溯)
  5. 快速入门 Jupyter notebook
  6. LeetCode 1818. 绝对差值和(二分查找)
  7. python 学习导图
  8. matlab uicontrol 居中,matlab的uicontrol
  9. 最好的离子应用程序模板
  10. 腾讯的企业级分布式 HTAP 数据库管理系统 TBase 正式开源
  11. Failed to lookup view “error“ in views directory 解决方案
  12. 鸿蒙系统会碎片化吗,华为鸿蒙系统,解决安卓碎片化问题,4G流畅度媲美12G!...
  13. 网络语言3c是什么意思,2017网络流行语大全:这些网络新词你知道吗
  14. AutoCAD系统变量大全
  15. 论文阅读《UV-SLAM: Unconstrained Line-Based SLAM Using Vanishing Points for Structural Mapping》R-AL 2022
  16. MAC下微信双开(一键命令)
  17. autojs之200万logo自己做
  18. 使用qt实现多线程编程
  19. 微信生态的渗透与价值
  20. 如何快速将图片中的文字提取出来

热门文章

  1. 爬虫框架Scrapy的第一个爬虫示例入门教程
  2. shell把字符串中的字母去掉,只保留数字
  3. 电脑的添加删除系统组件使用方法
  4. nginx+fastcgi实现动静分离架构
  5. 美国人的网站推广方式千奇百怪
  6. arm-buildroot-linux-,buildroot构建交叉编译工具链,根文件系统
  7. adb 操作安卓模拟器--备忘
  8. VS2017源代码版本管理
  9. 【洛谷P3369】普通平衡树(splay)
  10. 实现全屏轮播,并且轮播div中的文字盒子一直自动垂直居中