易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux设备驱动开发详解 笔记9 异步通知与异步I/O


异步通知:一旦设备就绪,则主动通知应用程序,这样应用程序根本不需要查询设备状态,这一点非常类似于硬件上的“中断”的概念,比较准确的称谓是“信号驱动的异步I/O
 
//启动信号驱动机制
signal(SIGIO, input_handler);//让input_handler()处理SIGIO信号
fcntl(fd, F_SETOWN, getpid());//设置本进程为STDIN_FILENO文件的拥有者,让内核知道将信号发给本进程
oflags = fcntl(fd, F_GETFL);//下面两句:设置FASYNC标志,启动异步通知标志
fcntl(fd, F_SETFL, oflags | FASYNC); 
设备驱动中异步通知编程比较简单,主要用到一项数据结构和两个函数
数据结构:
struct xxx_dev
{
Struct cdev cdev;
……
Struct fasync_struct *async_queue;
}
 
 
Int fasync_helper(int fd, struct file *filp, int mode, struct fasync_struct **fa);
 
Void kill_fasync(struct fasync_struct **fa, int sig, int band);
 
static int globalfifo_fasync(int fd, struct file *filp, int mode)
{
    struct globalfifo_dev *dev = filp->private_data;
    return fasync_helper(fd, filp, mode, &dev->async_queue);
}
 
static ssize_t globalfifo_write(struct file *filp, const char __user *buf,
  size_t count, loff_t *ppos)
{
    struct globalfifo_dev *dev = filp->private_data; //获得设备结构体指针
    ……
   
    if (dev->async_queue)
       kill_fasync(&dev->async_queue, SIGIO, POLL_IN);
   
    ret = count;
  }
 
int globalfifo_release(struct inode *inode, struct file *filp)
{
 
   globalfifo_fasync( - 1, filp, 0);
   return 0;
}
 
AIO基本思想是允许进程发起很多I/O操作,而不用阻塞或等待任何操作完成
 
异步IO和标准IO之间的另一个区别是不能立即访问这个函数的返回状态,因为并没有阻塞在read()调用上。在标准的read()调用中,返回状态是在该函数返回时提供的,但是在异步IO中,我们要使用aio_return()函数,只有在aio_error()调


相关文档:

Linux 获取系统时间

1.时间表示
在程序当中,我们经常要输出系统当前的时间,比如我们使用date命令的输出结果。这个时候我们可以使用下面两个函数
time_t time(time_t *tloc);                    //时间精度为秒
char *ctime(const time_ ......

windows下搭建 linux 下多虚拟测试机安装及上网配置

一、下载VMware软件并安装
二、光盘.iso方式安装linux
三、共享linux和windows目录
四、将"本地连接"设为共享方式,禁止其他虚拟机连接
      打开虚拟机在虚拟机编辑中设置为'桥接"方式;
并选中Device status下的两项,只所以用桥接方式不用host-only方式上网是因为
在用路由器时host-onl ......

让嵌入式Linux支持普通USB摄像头

我用的是最普通的usb摄像头,主芯片为中星微ZC0301P(据说市场占有率70%以上),COMS传感器为hynix的hv7131e1,市面上能买到的基本上是这种配置。
    linux下驱动,我直接移植spca5xx,现在出了spc5xx-le(Light-Edition for Linux Embedded)更方便,直接针对嵌入式系统做了优化,可以参考这里http://mxh ......

Linux设备驱动开发详解 笔记3 Linux内核及内核编程


在设备驱动方面,Linux2.6相对于Linux2.4有较大的改动,这主要表现在内核API中增加了不少新功能(如内存池)、sysfs文件系统、内核模块从.o变为.ko、驱动模块编译方式、模块使用计数、模块加载和卸载函数的定义等方面
Linux内核主要有进程调度、内存管理、虚拟文件系统、网络接口和进程间通信等5个子系统组成,如下图: ......

Linux设备驱动开发详解 笔记4 Linux内核模块

modprobe命令比insmod命令强大,它在加载某模块时会同时加载该模块所依赖的其他模块。使用modprobe命令加载的模块若以“modprobe –r filename”的方式卸载将同时卸载其依赖的模块。
printk打印到var/log/messages
2.6内核中已加载的信息也存在于/sys/module目录下,加载hello.ko后,内核中将包含/sys/mod ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号