
LINUX 驱动
文章平均质量分 64
keep study
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
imx6用文件io操作gpio
要让linux支持文件io方式操作gpio,首先驱动必须得支持,也就是说设备树上必须先配置好gpio模式,然后参照以上链接去实现gpio操作这里举例来说:hud项目中(imx6dl平台),有一个蓝牙电源的使能受GPIO1_IO30的控制,所以我们必须得在设备树上配置这个pad为GPIO模式1.配置gpio模式现在需要在设备树上配置GPIO1_IO32用于gpio, 在配置之前需要确定该pad为哪个pad, 经原理图可知为ENET_TXD0/GPIO1_IO30, 然后在imx6dl规格书上第四章Ext原创 2022-04-28 15:33:29 · 475 阅读 · 0 评论 -
Linux IIC驱动
概述IIC总线只需要两根线就可以完成读写操作,一条总线上可以挂载多个设备,因此被广泛使用。但是IIC总线有一个缺点,就是传输速率比较低。Linux的i2c体系结构分为三个部分:1、i2c核心;2、i2c总线驱动;3、i2c设备驱动。怎么写I2C设备驱动程序?分配一个i2c_driver结构体设置attach_adapter // 它直接调用 i2c_probe(adap, 设备地址, 发现这个设备后要调用的函数);detach_client // 卸载这个驱动后,如果之前发.原创 2022-04-14 17:19:47 · 849 阅读 · 0 评论 -
SPI 驱动
1、SPI 协议介绍概述同步串行端口(Synchronous Serial Port) 的模块(Module)来实现的, 它允许 MCU 以全双工的同步串行方式, 与各种外围设备进行高速数据通信.优点:支持全双工通信、通信简单、数据传输速率快缺点:没有指定的流控制,没有应答机制确认是否接收到数据,所以跟 IIC 总线协议比较在数据可靠性上有一定的缺陷。特点采用主-从模式(Master-Slave) 的控制方式SPI 规定了两个 SPI 设备之间通信必须由主设备 (Master) 来控制次设原创 2022-04-14 15:08:37 · 547 阅读 · 0 评论 -
UVC 驱动调用过程与驱动框架的简单分析 v4l2
UVC 驱动整体调用流程:/* 打开设备描述符 */1. open: uvc_v4l2_open/* 查询设备属性 */2. VIDIOC_QUERYCAP if (video->streaming->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; else cap->ca原创 2021-11-02 16:24:55 · 739 阅读 · 0 评论 -
DM9000C的驱动移植
首先思考一下,两个不同设备上如果用同一种网卡,用法如何不同呢?简单的来说有三点:基地址、位宽和中断引脚。因此,想要移植一个网卡驱动,一般来说,我们只需要在厂家提供的驱动里修改这三个参数就行。1.首先来看DM9000C原理图如下图所示: (#:表示低电平有效)SD0~15: 16位数据线,有CMD引脚决定访问类型CMD: 命令线,当CMD为高,表示SD 传输的是数据,CMD为低表示传输的是地址INT: 中断引脚,接在2440的GPF7脚上IOR#: 读引脚原创 2021-09-08 17:33:02 · 784 阅读 · 0 评论 -
内存控制器与SDRAM_内存接口概念
辅线1_硬件知识_内存接口概念如图是S3C2440是个片上系统,有GPIO控制器(接有GPIO管脚),有串口控制器 (接有TXD RXD引脚)。配置GPIO控制器相应的寄存器,即可让引脚输出高低电平;配置UART控制器相应的寄存器,即可让引脚输出波形。前者相对简单,类似门电路,后者相对复杂,属于协议类接口。类似的协议类接口还有iic、iis、spi等。 对于CPU是不管什么接口的,它只写相应的寄存器,由控制器根据寄存器的配置去控制具体的引脚。那么CPU是如何访问各个不同的寄存器的呢?CPU只管发出原创 2021-09-08 15:50:39 · 777 阅读 · 0 评论 -
lcd驱动
分配 file_operations 结构体,设置file_operations 结构体,注册结构体分配fb_info,设置 fb_info,注册fb_info硬件操作f#include <linux/module.h>#include <linux/kernel.h>#include <linux/errno.h>#include <linux/string.h>#include <linux/mm.h>#include &原创 2021-08-19 18:25:42 · 314 阅读 · 0 评论 -
LCD简介
LCD简介LCD的原理:我们在液晶面板后面加白光(即背光板),然后通过不同的电信号,令液晶分子选择性透光,这样液晶面板就显示出了不同的颜色。不难得出结论,LCD本身只会透光,不会发光。亮度控制是由背光板负责的。当前主流的LCD是TFT,特点是超薄、清晰。1.LCD的信号对于嵌入式设备来说,最普遍的就是RGB信号VD:数据信号,用来传输图像信息HSYNC:帧同步信号,每发出一个脉冲,都意味着新的一屏图像数据开始发送VSYNC:行同步信号,每发出一个脉冲,都意味着新的一行图像数据开始发送VD原创 2021-08-19 18:27:26 · 2246 阅读 · 0 评论 -
基于V4L2的摄像头图像采集(1)
一、V4L2的定义V4L2(Video For Linux Two) 是内核提供给应用程序访问音、视频驱动的统一接口,在Linux中,视频设备是设备文件,可以像访问普通文件一样对其进行读写,摄像头在/dev/videoN下,N可能为0,1,2,3… 一般为0。二、工作流程Step1:初始化摄像头。打开设备->检查和设置设备属性->设置帧格式Step2:启动采集命令。申请帧缓冲->内存映射->帧缓冲入队列->开始采集->帧缓冲出队列->重新入队列循环采集St原创 2021-08-19 13:40:42 · 1738 阅读 · 0 评论 -
linux内核定时器管理
内核定时器linux定时器是采用系统定时器来实现的,不同体系结构中定时器实现不尽相同,但是系统的根本思想没有区别----提供一种周期性触发中断机制。linux内核定时器使用很简单,只要提供超时时间和定时处理函数即可,当超时时间到了定时处理函数就会执行。在使用内核定时器的时候要注意,内核定时器并不是周期性运行的,超时就会关闭。因此如果想要实现周期性定时,那么就需要在定时处理函数中重新开启定时器。 Linux 内核使用 timer_list 结构体表示内核定时器, timer_list 定义在文件in..原创 2021-05-29 13:05:31 · 192 阅读 · 0 评论 -
Linux驱动之定时器
Linux的内核中定义了一个定时器的结构:#include<linux/timer.h>struct timer_list { struct list_head list; unsigned long expires; //定时器到期时间 unsigned long data; //作为参数被传入定时器处理函数 void (*function)(unsigned long);};利用这个结构我们可以在驱动中很方便的使用定时器。一: t.原创 2021-05-08 16:59:18 · 640 阅读 · 0 评论 -
内核驱动poll使用poll_wait阻塞/唤醒
1. 应用阻塞应用程序使用 select() 或 poll() 调用设备驱动程序的 poll() 函数,该函数把输入输出复用处理的等待队列追加到由内核管理的进程的 poll_table()上#include <linux/poll.h>static inline void poll_wait (struct file *filp, wait_queue_head_t *wait_address, poll_table *P);filp:设备文件信息的 struct file.原创 2021-05-08 16:36:43 · 1439 阅读 · 0 评论 -
RTC 设备驱动
rtc_device_register3. ls /dev/rtc* -l date /* 显示系统时间 */ date 123015402011.30 /* 设置系统时间 date [MMDDhhmm[[CC]YY][.ss]] */ hwclock -w /* 把系统时间写入RTC */ 短电,重启,执行date...原创 2020-11-19 11:57:34 · 289 阅读 · 0 评论 -
USB 最简单的 gadget驱动:g_zero(2)
前言前面讲过,gadget api提供了usb device controller驱动和上层gadget驱动交互的接口。UDC驱动是服务提供者,而各种gadget驱动则是服务的使用者。其实还有一些通用代码,因为功能比较简单,我们称之为helpe函数。在阅读了Gadget API文档后,让我们开始阅读代码,udb驱动代码比较复杂,我们先从gadget驱动看起。各种gadget驱动中,最简单的要数g_zero驱动。g_zero驱动简介作为最简单的gad...原创 2020-11-13 17:04:37 · 1416 阅读 · 0 评论 -
USB HOST与 USB OTG的区别及工作原理(1)
在SmartQ 7上面,同时存在USB HOST与 USB OTG两个接口,我想问一下,这两个接口有什么区别么?我怎么认为HOST属于是多余呢? 麻烦高手解答,感激不尽!!!零 USB背景知识USB是一种数据通信方式,也是一种数据总线,而且是最复杂的总线之一。硬件上,它是用插头连接。一边是公头(plug),一边是母头(receptacle)。例如,PC上的插座就是母头,USB设备使用公头与PC连接。目前USB硬件接口分三种,普通PC上使用的叫Type;原来诺基亚功能机时代的接口为Min...原创 2020-11-13 14:57:25 · 852 阅读 · 0 评论 -
linux平台上GPIO模拟I2C
GPIO模拟I2C是嵌入式中较为常用的一种应用。各个地方有各种不同的做法,按照我自己的个人理解,最好是把I2C的各种状态分割开来,比如起始条件终止条件,读数据和写数据,然后根据具体的使用场合组合起来。 这里需要注意两点:一是SCL的波形并不规律,不能将它理解为方波,它本身只是一段段独立的波形。二是每段操作时,之前和之后的SCL和SDA波形是可以忽略的;通常情况下I2C开始之前和I2C结束之后,两者都是有上拉的高电平,而在正常工作时两者不受控制的情况下都是默认低电平。三是I2C是要默认外部上拉...原创 2020-10-28 15:07:24 · 606 阅读 · 1 评论 -
Linux I2C 驱动阅读的碰到的一些网上没有提到的东西
一、master_xfer,以及i2c_msg标志位其实抛开子系编本身其它部份,实现I2C的主要作用代码就是algorithm里的master_xfer方法。这个方法就是我们无操作系统时的的I2C读写函数(它用参数来区分读和写)。分析这些代码,最好是读内核的i2c-algo-bit.c文件,这个文件就是用模拟的方法来实现I2C总线,因为不和其它I2C控制芯片相关,所以比较好理解。i2c-algo-bit.c其中的master_xfer函数bit_xfer函数如下:其实也并不复杂...原创 2020-10-28 14:46:20 · 426 阅读 · 0 评论 -
Linux I2C核心、总线与设备驱动[转]
本章导读I2C总线仅仅使用SCL、SDA两根信号线就实现了设备之间的数据交互,极大地简化对硬件资源和PCB板布线空间的占用。因此,I2C总线被非常广泛地应用在EEPROM、实时钟、小型LCD等设备与CPU的接口中。Linux定义了系统的I2C驱动体系结构,在Linux系统中,I2C驱动由3部分组成,即I2C核心、I2C总线驱动和I2C设备驱动。这3部分相互协作,形成了非常通用、可适应性很强的I2C框架。本章第1节将对Linux I2C体系结构进行分析,讲明3个组成部分各自的功能及相互联系第2节将对转载 2020-10-28 14:41:07 · 197 阅读 · 0 评论