Linux UIO驱动框架(一)-优快云博客https://blog.youkuaiyun.com/weixin_43249970/article/details/126411340Linux UIO驱动-优快云博客
https://blog.youkuaiyun.com/weixin_38452632/article/details/130947993
【声明】本文参考了上述文章,然后针对其中的一些关键问题,补充了自己的理解
一、UIO驱动框架的核心功能
1. mmap,结合dts文件中的UIO设备的定义,限制了mmap的地址范围和大小,提升了内存映射&访问安全性。
2. 中断上报,提供了中断从内核态上报到用户态的方法。
二、UIO驱动框架分层介绍
1、用户态提供的主要是 open、mmap、read、write 系统调用
2、DTS文件中需要定义UIO设备节点,分为内存、中断两类,比如DTS中对于中断,就定义了相关的硬件中断号
3、内核部分uio驱动采用的是platform
框架,负责基于DTS设备树,创建UIO设备节点。uio核心层完成了字符设备注册,以及类的创建
三、中断从内核上报到用户态的相关内容
1、用户态针对UIO设备进行read,来等待中断,没有中断的时候read会阻塞、有中断的时候read会返回。
read触发的主要内容是:调用read
函数会将当前线程加入等待队列,实现线程的阻塞。
2、在内核态通过 request_irq 实现中断号与中断处理程序的关联,这样有中断的时候,会执行相应的中断处理程序。
3、中断处理程序中,会通过uio_event_notify通知UIO框架,框架会根据设备句柄,把相应的read阻塞解阻,这样用户态就会感知到中断。