![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
驱动
驭风男孩
这个作者很懒,什么都没留下…
展开
-
驱动程序中(4种I/O模型)
1 阻塞:在应用层调用read函数的时候,如果硬件中的数据没有准备好,此时进程会进入休眠状态,当硬件的数据准备好的时候会给驱动发送中断。驱动收到中断之后,唤醒休眠的进程。这个被唤醒的进程在driver_read读取硬件的数据,并把数据 返回到用户空间。(模型中断)可以使用队列,把整个进程进入到队列中,使进程进入阻塞的状态,当有数据产生的时候,产生中断,唤醒在队列中的进程,从而读取数据....原创 2019-11-10 10:05:27 · 552 阅读 · 0 评论 -
linux串口编程设置(USB转串口)
在嵌入式Linux中,串口是一个字设备,访问具体的串行端口的编程与读/写文件 的操作类似,只需打开相应的设备文件即可操作。串口编程特殊在于串 口通信时相关参数与属性的设置,还有必须有串口驱动程序(提供设备节点),在linux系统中一般都自带有的串口驱动程序,我们只需要配置就可以使用串口的设置节点 配置串口驱动:串口配置完成后,插上usb转串口设备,...原创 2019-11-08 09:07:59 · 3167 阅读 · 0 评论 -
linux内核并发和竟态 (解决竟态的5种方式屏蔽中断,原子操作,自旋锁,信号量,互斥体,)
linux内核并发和竟态 :并发(Concurrency) 指的是多个执行单元同时、 并行被执行, 而并发的执行单元对共享资源(硬件资源和软件上的全局变量、 静态变量等) 的访问则很容易导致竞态(Race Conditions)引起竟态的方式: 1对称多处理器(SMP) 的多个CPU ...原创 2019-10-14 12:08:13 · 1420 阅读 · 0 评论 -
Linux 字符设备驱动开发基础(四)—— ioctl() 函数解析
解析完 open、close、read、write 四个函数后,终于到我们的 ioctl() 函数了一、 什么是ioctl ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。下面是其源代码定义:函数名: ioctl功 能: 控制I/O设备用 法: int ...转载 2019-09-03 16:12:22 · 314 阅读 · 0 评论 -
字符驱动基础知识(makefile,测试模块,__init,__exit和static,printk)
测试模块常用的命令:(1) lsmod (list module,将模块列表显示 ) 功能是打印出当前内核中已经安装的模块列表。(2) insmod(install module,安装模块 ) 功能是向当前内核中去安装一个模块, 用法是 insmod xxx.ko(3) modinfo (module information, 模...原创 2019-09-09 21:00:49 · 302 阅读 · 0 评论 -
驱动传递参数/驱动符号导出
在编写内核模块的时候,经常需要在加载内核模块的时候传递一些参数,Linux内核提供了简单便捷的方法向内核模块传递参数1 定义模块参数的方法module_param(name, type, perm); name:表示参数的名字; type:表示参数的类型; ...原创 2019-09-15 17:04:32 · 376 阅读 · 0 评论 -
I/O模型之阻塞(在中断基础上------jz2440)
1 阻塞:在应用层调用read函数的时候,如果硬件中的数据没有准备好,此时进程会进入休眠状态,当硬件的数据准备好的时候会给驱动发送中断。驱动收到中断之后,唤醒休眠的进程。这个被唤醒的进程在driver_read读取硬件的数据,并把数据 返回到用户空间。(模型中断)可以使用队列,把整个进程进入到队列中,使进程进入阻塞的状态,当有数据产生的时候,产生中断,唤醒在队列中的进程,从而读取数据....原创 2019-09-20 19:15:05 · 180 阅读 · 0 评论 -
I/O模型之非阻塞(在中断基础上------jz2440)
非阻塞:在应用层调用read函数的时候,不管硬件的数据是否准备好都需要立返回到用户空间 int open(const char *pathname, int flags); 参数1:文件的路径 参数2:打开的的方式如下图====================================================== user...原创 2019-09-20 19:18:19 · 133 阅读 · 0 评论 -
I/O模型之多路复用poll(在中断基础上------jz2440)
3 I/O多路复用(select/poll/epoll)int poll(struct pollfd *fds, nfds_t nfds, int timeout);参数1 :一个结构体指针struct pollfd *fds struct pollfd { int fd; //文件描述符...原创 2019-09-20 19:26:39 · 149 阅读 · 0 评论 -
I/O模型之多路复用select(在中断基础上------jz2440)
int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);功能:select用于监测是哪个或哪些文件描述符产生件; 参数:nfds: 监测的最大文件描述个数 ...原创 2019-09-20 19:31:21 · 119 阅读 · 0 评论 -
I/O模型之多路复用epoll(在中断基础上------jz2440)
epoll的使用(现在常用的是epoll)功能:创建epoll的实例int epoll_create(int size);参数:@size:无效了 返回值:成功返回epoll实例的文件描述符,失败-1;//功能:向epoll实例中添加文件描述符,或者从中删除文件描述符int epoll_ctl(int epfd, int op, int...原创 2019-09-20 19:48:43 · 684 阅读 · 0 评论 -
I/O模型之异步(在中断基础上------jz2440)
异步通知 在应用层使用signal为一个信号绑定一个处理函数,应用层执行signal之后接着往下执行。当硬件中的数据准备好的时候硬件会给驱动发送中断,驱动收到中断后给应用程序发送信号,应用程序收到信号后执行信号处理函数,并在信号处理函数中调用read函数读取数据。#include <signal.h>sighandler_t signal(int signum, ...原创 2019-09-20 19:53:32 · 133 阅读 · 0 评论