自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 linux 驱动学习笔记-ALSA声卡驱动(二)

前言ASoC是建立在标准ALSA驱动层上 ,对底层的alsa框架封装了一层,为了更好的支持嵌入式cpu和音频解码器设备的一套软件体系在ASOC出现之前 解码器驱动和平台CPU驱动联系过于紧密,导致不同平台的解码器驱动代码的重复,耳机麦克风的热插拔都需要根据不同平台来进行修改等,ASOC就是为了解决这些问题才被提出来的。ASOC驱动框架Soc(Platform)一般指某个平台比如s3c2440,imx6ull等,一般包括了DMA,I2S,PCM等接口,使得一款CPU封装好Platform驱动 就可以

2022-04-14 15:55:51 1780

原创 linux 驱动学习笔记-ALSA声卡驱动(一)

结构体usb_driverstruct usb_driver { const char *name; int (*probe) (struct usb_interface *intf, const struct usb_device_id *id); void (*disconnect) (struct usb_interface *intf); int (*unlocked_ioctl) (struct usb_interface *intf, unsigned int

2022-04-06 14:11:23 3223

原创 linux驱动学习笔记(九)SPI

前言SPI协议是由摩托罗拉公司提出的串行通信协议,是一种高速全双工的通信总线。常见的SPI接口包含四根线,MOSI(主设备输出,从设备输入),MISO(主设备输入,从设备输出)SCLK(时钟,决定通信速率),CS(片选,用于多从机)。所以一根SPI总线也可以挂载多个设备,是用多个片选IO来区分。时序介绍1.空闲状态CS脚拉高时候SPI设备处于空闲状态。2.起始信号与终止信号CS脚下降沿时候为起始信号 CS脚上升沿时候为停止信号。3.数据传输(四种工作模式)(1)CPOL=0,串行时钟空闲状态

2022-02-25 10:16:11 1141

原创 linux驱动学习笔记(九)I2C

前言i2c协议是由 数据线SDA和时钟线SCL构成的串行总线,是半双工通信方式,一个I2c接口可以挂载多个从设备,但是每个从设备都会有唯一的器件地址, I2C速度在标准模式下为100k,快速模式下可以达到400k,高速模式下可以达到3.4M时序介绍空闲状态SDA与SCL两条信号线同时处于高电平状态起始信号SCL为高的时候 SDA为下降沿停止信号SCL为高的时候 SDA为上升沿数据传输SCL为低时候 SDA数据可以变化。SCL为高的时候要求数据稳定应答信号I2C

2022-02-23 21:03:33 2416

原创 linux驱动学习笔记(八)misc 与 input

前言Linux驱动中设备基本都是挂在总线上,但是有一些我们不知道类型的字符设备我们可以挂在misc下,linux还有专门为了输入设备提供了一个input子系统。这些输入设备通常都是通过按压触摸等某种方式产生一个中断,然后cpu通过某种协议去读键值坐标等放到一个缓冲区域并上报给用户。misc设备所有的misc设备主设备号都是10,从设备号不同。misc会自动创建cdev 不需要我们手动创建struct miscdevice { int minor; /* 子设备号 */ const char *n

2022-02-23 10:23:57 1032

原创 linux驱动学习笔记(七)platform

前言在linux内核中我们找不到类似之前demo类型的代码,对于linux来说,代码重用性很重要,否则内核中就会出现很多垃圾代码导致内核文件数相当的大。就比如相同的模块在不同的平台就有不同的驱动程序,那么以此来说的话一个硬件就对应多个驱动文件,显然在linux内核中是不允许存在的。所以在linux内核中提出了,总线,驱动,设备的概念...

2022-02-22 14:46:48 362

原创 linux驱动学习笔记(六)中断

前言中断是指CPU在执行程序时,发生了一个突发事件,cpu必须停止现在的程序去处理这个突发事件,处理完之后返回程序刚被打断的位置继续执行。中断类型根据中断触发方式可分为内部中断和外部中断,内部中断来源于CPU,外部中断由外部设备提出。根据中断是否可以屏蔽可分为可屏蔽中断和不可屏蔽中断,可屏蔽中断可以通过寄存器屏蔽,屏蔽之后中断不再响应根据中断入口跳转方法的不同, 中断可分为向量中断和非向量中断。向量中断一个中断入口地址对应一个中断号,非向量中断多个中断共享一个入口地址。定时器在中断上也依赖中断来

2022-02-21 20:44:22 484

原创 linux驱动学习笔记(五)内存空间与IO映射

前言一般高性能处理器都会提供一个叫MMU(内存管理单元),MMU帮助操作系统进行内存管理,虚拟地址和物理地址的映射。对于包含MMU的处理器来说,linux提供了一种复杂的存储管理系统,可以让进程访问可以访问的空间达到4GB,这4GB分别表示用户空间(0 ~ 3GB) ,内核空间(3 ~ 4GB)。用户空间通常只能访问用户空间的虚拟地址,不能访问内核空间的虚拟地址,用户空间只能通过系统调用才能访问内核空间内存申请用户空间的内存申请用户空间中动态申请内存的函数为malloc,申请的内存的释放函数为fr

2022-02-20 15:07:07 636

原创 linux驱动学习笔记(四)信号

前言信号作为异步通知的一种手段,类似与硬件的中断功能,算是在软件层次上对中断的一种模拟,驱动可以通过主动向应用层发送信号来报告自己可以被应用层访问了,应用层捕获到信号后就可以从驱动设备中读写数据。Linux所支持的信号类型#define SIGHUP 1 /* 终端挂起或控制进程终止 */#define SIGINT 2 /* 终端中断(Ctrl+C 组合键) */#define SIGQUIT 3 /* 终端退出(Ctrl+\组合键) */#define SIGILL 4 /* 非法指令 */

2022-02-19 15:24:32 122

原创 linux驱动学习笔记(三)阻塞与非阻塞IO

Linux驱动中阻塞与非阻塞IO前言阻塞非阻塞一、等待队列1.等待队列头2.等待队列模板二、轮询模板总结前言阻塞和非阻塞io是两种不同的设备访问方式。阻塞阻塞IO表示在执行设备操作时若是不能获得资源,则会挂起等到满足条件时候再进行操作。被挂起之后进程进入睡眠,知道等待的条件被满足。非阻塞非阻塞IO表示在执行设备操作时候要是不能获得资源,则要么放弃,要么一直查询直到操作成功为止## 应用层操作示例int mem;fd = open("abc.txt",O_RDWR);//以阻塞的方式打.

2022-02-19 14:58:36 711

原创 linux驱动学习笔记(二)并发处理

Linux驱动中并发处理(二)前言一、中断屏蔽二、原子操作1.整形变量的原子操作2.位原子操作示例三、自旋锁四、读写锁示例五、顺序锁六、信号量七、互斥体八、completion总结前言当多个单元同时对一个共享资源进行操作时很容易出现竞态问题例如:我们想输出一句话(驱动学习)线程A线程B驱–动––啊学––啊习–最终变成了(驱动啊学啊)一、中断屏蔽中断屏蔽可以保证内核执行流程不被中断打断,防止一些竟态的发生,由于内核进程调度等.

2022-02-18 17:31:11 263

原创 linux驱动学习笔记(一)字符设备驱动

linux字符设备驱动(一)cdev结构体cdev操作函数分配和释放设备号自动创建设备节点file_operations结构体字符设备驱动模板实例实例说明总结cdev结构体在include/linux/cdev.hstruct cdev { struct kobject kobj; /*内嵌的kobject对象*/ struct module *owner; /*所属模块*/ const struct file_operations *ops; /*文件操作结构体*/ struct list_

2022-02-18 15:24:58 754 1

IDO-EVB3020资料清单 (1).pdf

IDO-EVB3020资料清单 (1).pdf

2023-09-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除