
linux驱动
文章平均质量分 73
WythePlus
这个作者很懒,什么都没留下…
展开
-
Linux内核的I2C读写寄存器
在日常I2C设备驱动开发过程,经常要对设备进行一些简单寄存器读写,可以利用以下函数进行封装。原创 2023-09-15 10:42:54 · 989 阅读 · 0 评论 -
Linux驱动I2C设备驱动
I2C(Inter-Integrated Circuit)是一种串行通信协议,用于连接集成电路(IC)之间进行数据传输。它由两根线组成:时钟线(SCL)和数据线(SDA)。I2C设备则是指使用I2C协议进行通信的各种外部硬件设备。I2C设备可以是各种芯片、传感器、存储器、扩展模块等。这些设备通过I2C总线与主控制器或其他设备进行连接,并通过发送和接收数据来实现通信和交互。每个I2C设备都有一个唯一的7位或10位地址,用于在总线上识别它。原创 2023-08-25 14:14:06 · 264 阅读 · 0 评论 -
摄像头初始化时序
DVP(Digital Video Port)接口是一种常用于摄像头模块和处理器之间的数字视频传输接口。它被广泛应用于嵌入式系统中,包括智能手机、平板电脑、工业视觉等领域。DVP接口使用平行数据传输方式,通过多个数据线同时传输视频像素数据,具有高带宽和低延迟的特点。它通常由以下几个信号线组成:1. D0-D7(Data0-Data7):D0至D7是并行数据线,负责传输视频像素的数字数据。数据位数可以根据使用的摄像头模块而变化,常见的有8位(RGB888)或10位(RAW10)。原创 2023-07-21 17:40:59 · 1971 阅读 · 0 评论 -
Linux内核读取IO内存物理地址
1.IO端口与IO内存IO端口和IO内存是计算机系统中用于实现输入输出(I/O)操作的两种方式。IO端口是一组特殊的寄存器,通过向这些寄存器写入或读取数据,可以控制设备进行输入输出操作。在x86架构的计算机中,通常有64KB的IO地址空间,其中前1024个I/O端口被保留用于系统使用。IO内存则是指一段专门用来进行I/O操作的物理内存区域,与普通内存不同,这段内存被映射到了设备控制器上。在使用I/O内存时,需要先将该段内存映射到一个虚拟地址空间上,并且必须遵循特定的访问规则才能进行有效的读写操作。原创 2023-07-21 11:00:17 · 1132 阅读 · 0 评论 -
内核input子系统分析
Linux内核的输入子系统分为三层,分别为事件处理层、核心层、驱动层通常是输入设备驱动,如触摸屏TP、按键驱动等;接收到底层中断时,主动上报数据,将底层的硬件输入转化为统一事件形式,想输入核心(Input Core)汇报。是由Linux内核发布时已经写好的,它承上启下为驱动层提供输入设备注册与操作接口,如:input_register_device;通知事件处理层对事件进行处理;在/Proc下产生相应的设备信息。原创 2023-07-20 17:16:41 · 159 阅读 · 0 评论 -
从 Linux 内核访问用户空间内存
Linux 内存和用户空间 API 简介M. Tim Jones, 自由作者2010 年 9 月 13 日因为内核和用户空间存在于不同的虚拟地址空间中,在它们之间移动数据需要特别注意。研究虚拟地址空间和内核 API 理念,用于将数据移入或移出用户空间,并学习其他的一些用于映射内存的映射技术。Linux 内存在 Li转载 2016-03-28 14:55:33 · 625 阅读 · 0 评论 -
Linux用户空间与内核空间
Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。于是像linux这样的系统就做了一个约定,不允许没有用户空间上下文的内核线程访问用户空间。不允许内核访问用户空间使内核免去了很多的负担,使内核设计更加简化转载 2016-03-28 14:42:10 · 1026 阅读 · 0 评论 -
Linux设备模型Kobject
Linux设备模型的核心是使用Bus、Class、Device、Driver四个核心数据结构,将大量的、不同功能的硬件设备(以及驱动该硬件设备的方法),以树状结构的形式,进行归纳、抽象,从而方便Kernel的统一管理。而硬件设备的数量、种类是非常多的,这就决定了Kernel中将会有大量的有关设备模型的数据结构。这些数据结构一定有一些共同的功能,需要抽象出来统一实现,否则就会不可避免的产生冗余代原创 2016-03-28 14:24:09 · 535 阅读 · 0 评论 -
/dev、/sys/devices 和 /sys/dev 之间区别
/dev,设备文件存储目录,应用程序通过对这些文件的读写和控制,可以访问实际的设备;/sys/devices 目录,按照设备挂接的总线类型,组织成层次结构,保存了系统所有的设备;是文件系统管理设备的最重要的目录结构;这是内核设备按总线类型分层放置的目录结构, devices 中的所有设备都是连接于某种总线之下,在这里的每一种具体总线之下可以找到每一个具体设备的符号链接,它也是构转载 2016-03-28 15:57:16 · 701 阅读 · 0 评论 -
linux /sys目录下各个子目录的具体说明
/sys下的子目录内容 # ls /sys/block class firmware kernel powerbus devices fs module-----------------------------------------------------------------------------转载 2016-03-28 15:58:14 · 973 阅读 · 0 评论 -
Linux下面一个简单的虚拟platform驱动
/* * Yao.GUET * http://blog.youkuaiyun.com/Yao_GUET * Linux下面一个简单的虚拟platform驱动 */在Linux之中,约定如果设备不属于任何的总线,则可以把它注册为虚拟的platform设备。下面就简单来学习一下一个简单的platform设备是怎么创建出来的。一般注册platform驱动的步骤是转载 2016-03-28 15:59:33 · 378 阅读 · 0 评论 -
file结构中的private_data
这个是Linux下连接VFS文件系统框架和不同文件/文件系统底层实现之间的一个核心数据结构,虽然它只是一个指针,但是一个指针可以解决所有问题。我们回想一下用户态线程的创建结构,函数的入口同样是一个void*指针,而千言万语汇成一根指针,诗可以兴、可以观、可以群、可以怨,可以解决所有问题。因为file是VFS框架的一个基本概念,它要支持文件操作结构,例如open/read/write/relea转载 2016-03-28 16:13:21 · 1345 阅读 · 0 评论 -
字符设备驱动、平台设备驱动、设备驱动模型、sysfs的比较和关联
学习Linux设备驱动开发的过程中自然会遇到字符设备驱动、平台设备驱动、设备驱动模型和sysfs等相关概念和技术。对于初学者来说会非常困惑,甚至对Linux有一定基础的工程师而言,能够较好理解这些相关技术也相对不错了。要深刻理解其中的原理需要非常熟悉设备驱动相关的框架和模型代码。网络上有关这些技术的文章不少,但多是对其中的某一点进行阐述,很难找到对这些技术进行比较和关联的分析。对于开发者而言,能够转载 2016-03-28 16:00:28 · 566 阅读 · 0 评论 -
linux的内建函数
转自: http://blog.sina.com.cn/s/blog_4b8ad9530100cl2v.html内建函数是与语言相关的(或者更准确地说是编译器相关吧),作用应该是跟关键字一样,无需申明,编译器就知道它是什么东西。同样,无需#include任何头文件,只要语法符合,编译器就知道去哪儿链接相关代码!另外,如果显式申明的函数与内建函数同名,内建函数将会转载 2016-03-28 18:59:16 · 542 阅读 · 0 评论 -
linux内核串口控制器注册以及收发
我们看到Linux dev目录下面ttyS系列的串口设备的终端,现在用一个uart 控制器的程序来分析下怎么实现的首先是定义了uart driverstatic struct uart_driver XX_uart_driver = {.owner = THIS_MODULE,.driver_name = XX_UART_DEV_NAME, //名字,实际是uart.d原创 2016-03-29 11:19:34 · 1725 阅读 · 0 评论 -
ioctl函数用的命令
linux/ioctl.h //定义ioctl函数用的命令号,由四个位段构成@type:魔数,8位(定义于宏__IOC_TYPEBITS)宽,整个驱动中唯一@number:顺序号,8位(定义于宏__IOC_NRBITS)宽@direction:数据传送方向,如果此命令涉及数据传送,__IOC_READ,__IOC_WRITE, // __IOC_NONE,是原创 2016-03-28 13:47:39 · 573 阅读 · 0 评论 -
MTK 平台Camera 驱动架构
android 将系统大致分为应用层、库文件和硬 件抽象层、Linux 内核三层。在底层的内核空间,Camera 的driver 将其驱动起来以后,将硬 件驱动的接口交给硬件抽象层,android 上层的Camera 应用程序在android 实时系统中的虚 拟机中,加载android 留给Camera 公用的一些库文件,调用硬件抽象层的接口来控制Camera 硬件来实现功能。当然,如果是Ra原创 2016-03-28 11:11:59 · 4532 阅读 · 0 评论 -
imx6设备树pinctrl解析
最近在移植linux,用到kernel版本为3.14.28,在高版本的内核源码中用到了设备树(device-tree),设备树中用到pinctrl的配置,记录一下。1、普通设置在配置串口时,pinctrl的配置信息如下所示:[cpp] view plain copy&uart2 { pinctrl-nam转载 2016-03-25 14:52:57 · 855 阅读 · 0 评论 -
Linux芯片级移植与底层驱动(基于3.7.4内核)
1. SoC Linux底层驱动的组成和现状为了让Linux在一个全新的ARM SoC上运行,需要提供大量的底层支撑,如定时器节拍、中断控制器、SMP启动、CPU hotplug以及底层的GPIO、clock、pinctrl和DMA硬件的封装等。定时器节拍、中断控制器、SMP启动和CPU hotplug这几部分相对来说没有像早期GPIO、clock、pinctrl和DMA的实现那么杂乱转载 2016-03-25 14:56:48 · 941 阅读 · 0 评论 -
linux驱动开发 主设备号与次设备号
一个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设备号。主设备号用来表示一个特定的驱动程序。次设备号用来表示使用该驱动程序的各设备。例如一个嵌入式系统,有两个LED指示灯,LED灯需要独立的打开或者关闭。那么,可以写一个LED灯的字符设备驱动程序,可以将其主设备号注册成5号设备,次设备号分别为1和2。这里,次设备号就分别表示两个LED灯。1.主设备号和转载 2016-03-25 14:58:36 · 1014 阅读 · 0 评论 -
Linux设备驱动之I2C架构分析
一:前言I2c是philips提出的外设总线.I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL.正因为这样,它方便了工程人员的布线.另外,I2C是一种多主机控制总线.它和USB总线不同,USB是基于master-slave机制,任何设备的通信必须由主机发起才可以.而I2C 是基于multi master机制.一同总线上可允许多个master.关于I2C协议的知识,这里不再赘述.可自转载 2016-03-25 15:04:06 · 605 阅读 · 0 评论 -
LINUX时间管理
实时时钟系统定时器纳秒微妙毫 秒延迟必须是短延迟时间过长会报错长延迟时间管理在内核中占有非常重要的地位。相对于事件驱动,内核中有大量的函数都是基于时间驱动的。内核必须管理系统的运行时间以及当前的日期和时间。首先搞清楚RTC在kernel内的作用:linux系统有两个时钟:实时时钟和系统定时器实时时钟 一个是由纽扣电池供电的“Real Time Cl转载 2016-03-25 15:43:06 · 525 阅读 · 0 评论 -
preempt_enable 和 preempt_disable
允许抢占和禁止抢占。例如:内核态程序 和 中断处理程序的互斥因为中断是异步的(不只要何时发生中断,也即随时可能发生中断),因此如果内核态的程序使用了和中断处理程序中相同的数据结构,那么必须进行互斥访问。load %r0, counteradd %r0,1 //发生中断store %r0,conter如果在第二条指令执行转载 2016-03-25 16:27:52 · 712 阅读 · 0 评论 -
linux高端内存映射
1 内核空间和用户空间 用户空间:在Linux中,每个用户进程都可以访问4GB的线性虚拟内存空间。其中从0到3GB的虚存地址是用户空间,通过每个进程自己的页目录、页表,用户进程可以直接访问。内核空间:从3GB到4GB的虚存地址为内核态空间,存放供内核访问的代码和数据,用户态进程不能访问,只有内核态进程才能寻址。所有进程从3GB到4GB的虚拟空间都是一样的,linux以此方式让内核态转载 2016-03-25 16:31:55 · 803 阅读 · 0 评论 -
内核中断,异常,抢占总结
内核中断,异常,抢占总结篇一、基本概念中断分为同步中断和异步中断。同步中断是由CPU控制单元产生的,“同步”是指只有在一条指令执行完毕后,CPU才会发出中断,而不是发生在代码指令执行期间,比如系统调用。而异步中断是由其他硬件设备依照CPU时钟信号产生的,即意味着中断能够在指令之间发生,例如键盘中断。按照Intel的微处理器手册,同步中断和异步中断也分别称为异常(或者软件中断转载 2016-03-25 16:46:33 · 569 阅读 · 0 评论 -
Linux中断研究
ARM里的中断通常是指IRQ和FIQ,以IRQ来讲,ARM对IRQ的处理过程大概是这样: 外部设备遇到某一事件发出一个IRQ中断给中断控制器,中断控制器对这个IRQ进行硬件上的处理,把一些信息记在中断控制器的寄存器上,然后中断控制器通过IRQ中断线给ARM发一个信号。ARM收到信号,开始进行以下处理: (1)将当前状态的cpsr拷贝到IRQ状态的spsr中。 (2)将pc拷贝到I转载 2016-03-25 16:48:49 · 722 阅读 · 0 评论 -
linux tasklet和workqueue的应用情景
当前的2.6版内核中,有三种可能的选择:softirq、tasklet和work queue。 tasklet基于softirq实现,所以两者很相近。work queue与它们完全不同,它靠内核线程实现。1、softirq 软中断支持SMP,同一个softirq可以在不同的CPU上同时运行,softirq必须是可重入的。软中断是在编译期间静态分配的,它不像tasklet那样能被转载 2016-03-25 16:49:57 · 546 阅读 · 0 评论 -
linux notification内核通知链
/******linux notification内核通知链***********/linux/notifier.h //内核中的一处来告知内核另一处某事件的发生,并执行注册的struct notifier_block { //notifier_call方法。 int (*notifier_call)(struct notifier_block *self,unsigned原创 2016-03-25 17:34:22 · 742 阅读 · 0 评论 -
kernel thread与进程描述符
/***********kernel thread的创建*****************/#include //wake_up_process()#include //kthread_creat,kthread_run()#include //IS_ERR(),PTR_ERR()struct task_struct *kthread_create(i原创 2016-03-25 17:35:59 · 598 阅读 · 0 评论 -
十种软件滤波方法
十种软件滤波方法1、限幅滤波法 A、方法: 根据经验判断,确定两次采样允许的最大偏差值(设为A) 每次检测到新值时判断: 如果本次值与上次值之差 如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值答题本次值 B、优点 能有效克服因偶然因素引起的忙冲干扰原创 2016-03-25 17:38:39 · 828 阅读 · 0 评论 -
Linux设备模型 device resource
1: 2: static int __init mx1_camera_probe(struct platform_device *pdev) 3: { 4: ... 5: 6: res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 7: irq = platform_原创 2016-03-25 17:44:04 · 1509 阅读 · 0 评论 -
Linux内核时间管理相关的接口
在内核经常会碰到一些要定时调度的任务,可以用timer处理,下面来看看都有哪些接口,/*******************************************************************/linux/param.hHZ;//宏,每秒定时器中断的次数,也即是系统每秒节拍或称滴答数linux/sched.h;包含了linux/jiffies.h原创 2016-03-28 10:59:50 · 517 阅读 · 0 评论 -
ARM寄存器介绍
一、ARM工作状态下的寄存器组织通用寄存器:通用寄存器包括R0~R15,可以分为三类: ─ 未分组寄存器R0~R7,8个 ─ 分组寄存器R8~R14,22个 ─ 程序计数器PC(R15),1个未分组寄存器R0~R7: 在所有的运行模式下,未分组寄存器都指向同一个物理寄存器,他们未被系统用作特殊的用途,因此,在中断或异转载 2016-04-01 10:07:45 · 1250 阅读 · 0 评论