drv
weixin_38220401
这个作者很懒,什么都没留下…
展开
-
Linux kernel scatterlist
1. 前言 我们在那些需要和用户空间交互大量数据的子系统(例如MMC[1]、Video、Audio等)中,经常看到scatterlist的影子。对我们这些“非英语母语”的人来说,初见这个词汇,脑袋瞬间就蒙圈了。scatter可翻译成“散开、分散”,list是“列表”的意思,因而scatterlist可翻译为“散列表”。“散列表”又是什么?太抽象了! 之所以抽象,是因为这个词省略了主语----物理内存(Physi...转载 2021-03-10 20:21:37 · 157 阅读 · 0 评论 -
自旋锁
1:自旋锁是忙等待锁,,锁不可用时,cpu一直循环执行测试并设置改锁直到获得该锁,CPU忙等待不做任何操作,仅仅是忙等待因此只有在占用锁极短的情况下,使用自旋锁才是合理的,当临界区很大或者有共享设备的时候需要长时间占用该锁,使用自旋锁就会降低系统性能。2:自旋锁可能导致系统死锁。引发这个问题最常见的情况是递归使用一个自旋锁,即如果一个已经拥有某个自旋锁的CPU想第二次获取这个自旋锁则该CPU将死锁。3:自旋锁锁定期间不能调用可能引起进程调度的函数,如果获取自旋锁之后再阻塞,如调用copy_from_us原创 2021-03-10 14:45:04 · 116 阅读 · 0 评论 -
位域
随笔 - 30 文章 - 0 评论 - 36 阅读 - 11万C结构体之位域(位段)有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。一、位转载 2021-03-10 10:47:11 · 94 阅读 · 0 评论 -
xilinx简介
原创 2021-03-10 09:29:11 · 479 阅读 · 0 评论 -
字符设备初始化过程
设备驱动注册过程1:申请设备号1:自动分配:alloc_chrdev_region(&devno, minor, count, "xxx");//设备号 , 次设备号起始值 ,次设备号数量 用于未知的设备号申请,devno是由MKDEV(主设备号,minor)得到的,(主设备号是自动分配的);2:手动分配:devno = MKDEV(major, minor); ret = register_chrdev_region(devno, count, "xxx原创 2021-03-09 17:28:53 · 207 阅读 · 0 评论 -
借助platform理总线设备驱动架构
soc中集成的独立的外设控制器、挂接在soc内存空间的外设等却不依赖此类总线,基于这一背景linux发明了一种虚拟总线platform总线,比较喜欢把soc的iic、rtc、lcd、看门狗等归纳为platform_device,以下模拟了platform_drive和platform_device设备的对应情况设备1:#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>原创 2021-03-09 16:09:15 · 117 阅读 · 1 评论 -
浅谈linux IO
IO模型1:阻塞式IO阻塞操作 指执行设备操作时若不能获取进程资源则进行睡眠,满足条件了唤醒继续执行。2,非阻塞式IO非阻塞操作 指进程在不能进行设备操作时并不睡眠而是立刻返回结果。3,io多路复用4,信号驱动IO阻塞IO依赖内核里面的等待队列(一下为API)定义“等待队列头”wait_queue_head_t my_queue; 初始化“等待队列头” init_waitqueue_head(&my_queue); 定义等待队列 DECLARE_WAITQUEUE原创 2021-03-09 11:24:36 · 141 阅读 · 0 评论 -
驱动基本结构
struct inode 结构体在内核中,使用一个struct inode 结构体,来唯一的表示一个文件。一个文件对应一个inode结构体。struct inode 存储的是文件的属性相关的信息。 // 当执行一次 mknod 创建的是设备节点文件,此时生成一个 struct inode 结构体struct inode { umode_t i_mode; // 打开方式 unsigned short i_opflags; kuid_t i_uid; // uid 用户原创 2021-03-09 10:52:26 · 219 阅读 · 0 评论 -
dma内存一致性
内核的dma一般在平台初始化的时候已经分配好了。但是对于一些有内部dma的硬件ip,比如usb ip、video加速ip,他们可能由ip厂商封装好的,没办法绑定到cpu端,这时候在内核使用dma就要注意了,因为dma只认识物理地址哦。 当然,办法还是有的,look: 以下来自:http://blog.csdn.net/zjujoe/archive/2009/05/15/4189612.aspx...转载 2021-02-26 18:03:41 · 513 阅读 · 0 评论 -
pci and pcie 详解
简介 PCI/PCIe设备有自己的独立地址空间,这部分空间会映射到整个系统的地址空间。 映射地址在BIOS/UEFI下指定(如果有的话,对于使用非BIOS启动的OS,不清楚),它有两种类型,一种是MMIO,一种是IO。对于MMIO的访问,跟访问内存的方式一样,它从称为PCIEXBAR的基地址开始,有很大的一段空间,这个PCIEXBAR的值根据不同的平台可能不同,大致可能值有0xC0000000、0xE00000...转载 2021-02-23 20:06:49 · 331 阅读 · 0 评论