驱动
游魂一族
没有
展开
-
linux中断之中断注册
专业的linux驱动开发离不开中断处理,在处理中断,首先要注册中断,在linux下通过request_irq来注册中断的,不同内核版本,注册中断所需要的参数也不同,本文以linux-2.6.34为例,对比老版本进行说明。 request_irq()函数在include/linux/interrupt.h中定义,原型为: static inline int __must_chec转载 2012-11-01 08:47:40 · 667 阅读 · 0 评论 -
ARM的SWI异常中断处理程序设计
2012-10-07 08:57:23 我来说两句 收藏 我要投稿 本节主要介绍编写SWI处理程序时需要注意的几个问题,包括判断SWI中断号,使用汇编语言编写SWI异常处理函数,使用C语言编写SWI异常处理函数,在特权模式下使用SWI异常中断处理,从应用程序中调用SWI。1.判断SWI中断号当发生SWI异常,进入异常处理程序时,异常处理程序必须提取SWI中断号,从转载 2012-11-01 11:25:22 · 1463 阅读 · 0 评论 -
中断分支
2012-10-07 09:03:38 我来说两句 收藏 我要投稿 7.7 FIQ和IRQ中断7.7.1 中断分支1.软件控制中断分支ARM内核只有两个外部中断输入信号nFIQ和nIRQ。但对于一个系统来说,中断源可能多达几十个。为此,在系统集成时,一般都会有一个异常控制器来处理异常信号,如图7-5所示。 这时候用户程序可能存在多个IRQ/FI转载 2012-11-01 11:24:12 · 611 阅读 · 0 评论 -
ARM异常中断处理概述
1.中断的概念什么是中断,我们从一个生活中的例子引入。你正在家中看书,突然电话铃响了,你放下书本,去接电话,和来电话的人交谈,然后放下电话,回来继续看你的书。这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打断了。在处理器中,所谓中断,是一个过程,即CPU在正常执行程序的过程中,遇到外部/内部的紧急事件需要处理,暂时中断(中止)当前程序的执行,而转去为事件服务,待服务完毕,再返转载 2012-11-01 11:28:28 · 1051 阅读 · 0 评论 -
实例解析linux内核I2C体系结构
实例解析linux内核I2C体系结构一、概述 谈到在linux系统下编写I2C驱动,目前主要有两种方式,一种是把I2C设备当作一个普通的字符设备来处理,另一种是利用linux I2C驱动体系结构来完成。下面比较下这两种驱动。 第一种方法的好处(对应第二种方法的劣势)有: ● 思路比较直接,不需要花时间去了解linux内核中复杂的I2C子系统的操作方法。转载 2012-11-04 12:34:04 · 429 阅读 · 0 评论 -
Samsung s3c6410/s3c2416 的SPI接口调试
参考资料:6410手册/2416手册Kernel部分驱动代码作 者:agan联系邮箱 beswipe@yahoo.com.cnracer.blog.chinaunix.net转载须注明出处! SPI接口简述 SPI是 Serial Peripheral Interface(串型外部接口)的缩写。SPI接口有4根PIN脚,分别是:转载 2012-11-04 12:46:01 · 956 阅读 · 0 评论 -
Linux驱动设备模型之Platform
[概述]一个现实的Linux设备和驱动通常都需要挂接在一种总线上,对于本身依附于PCI、USB、IIC、SPI等的设备而言,这自然不是问题,但是在嵌入式系统中,SoC系统中集成的独立的外设控制器,挂接在SoC内存空间的外设(IIC,RTC,SPI,LCD,看门狗)等却不依附于此类总线。基于这一背景,Linux发明了一种虚拟的总线,称为platform总线,相应的设备称为platformde转载 2012-11-02 16:43:24 · 394 阅读 · 0 评论 -
Linux字符设备驱动实例
闲话少说,理论不讲,直接拷贝源码即可运行。首先是device文件:mycdev.c[cpp] view plaincopy#include #include #include #include #include #include MODULE_AUTHOR("Boatman Yang"); MODULE_LICENSE("GPL");转载 2012-10-31 23:26:42 · 370 阅读 · 0 评论 -
Linux中断基本介绍
中断是设备驱动中非常重要的一个概念,所以这里首先讲述中断概念,然后讲述中断请求过程、中断处理程序以及中断相关的内核函数。 1中断基本概念 中断一词的字面意思是中间发生阻隔、停顿或故障而断开,但在计算机术语中的定义是是指CPU在正常运行程序时,由于内部/外部事件或由程序预先安排的事件引起CPU暂时停止正在运行的程序,转到为该内部/外部事件或预先安排的事件服务的程序中去,服务完转载 2012-10-31 22:58:59 · 535 阅读 · 0 评论 -
RS232通信协议详解
通信协议所谓通信协议是指通信双方的一种约定。约定包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。因此,也叫做通信控制规程,或称传输控制规程,它属于ISO'S OSI七层参考模型中的数据链路层。目前,采用的通信协议有两类:异步协议和同步协议。同步协议又有面向字符和面向比特以及面向字节计数三种。其中,面向字节计数的同步协议主转载 2012-10-29 21:27:49 · 95184 阅读 · 0 评论 -
Linux 设备驱动 ====> 并发控制 --- 原子操作
原子操作原子的操作指的就是在执行过程中不会被别的代码所中断的操作。在Linux中原子操作的方法有很多,有整型原子和位原子,他们在任何情况下操作都是原子的,这些原子操作的实现都是依赖CPU来实现的,因此这些函数都与CPU架构密切相关。整型原子我们arm架构的原子实现在kernel/arch/arm/include/asm/atomic.h1. 设置源自变量的值转载 2012-10-29 22:19:12 · 330 阅读 · 0 评论 -
自旋锁
瞎旋个啥,咋不去休眠、挂起呢?因为一些代码是大忙人,闲不得,更是停不得,就在门口自己玩死循环,急切的等待屋子里的人出来把锁给自己。关于锁,最常使用的便是:自旋锁与信号量。先贴些实例,来点感性的认识。?-- include/linux/spinlock_types.h -- typedef struct { raw转载 2012-10-29 20:52:51 · 708 阅读 · 0 评论 -
原子操作、信号量、读写信号量和自旋锁的区别与联系
一.为什么内核需要同步方法并发指的是多个执行单元同时,并行被执行,而并发的执行单元对共享资源(硬件资源和软件上的全局变量,静态变量等)的访问则很容易导致竞态。主要竞态发生如下:1.对称多处理器(SMP)多个CPU SMP是一种紧耦合,共享存储的系统模型,它的特点是多个CPU使用共同的系统总线,因此可访问共同的外设和存储器。 2.单CPU内进程与抢占它的进程Linux2.转载 2012-10-29 22:33:46 · 2615 阅读 · 0 评论 -
linux设备驱动读书笔记
设备驱动简介机制:提供什么能力策略:如何使用这些能力在编写驱动时, 程序员应当编写内核代码来存取硬件, 但是不能强加特别的策略给用户, 因为不同的用户有不同的需求. 驱动应当做到使硬件可用, 将所有关于如何使用硬件的事情留给应用程序编写驱动需要注意的地方:必须注意并发/重入的问题内核空间和用户空间不能直接操作,必须通过特别的函数(copy_from_user/c转载 2012-10-30 10:07:25 · 1220 阅读 · 0 评论 -
Linux 驱动编程
1.引言目前,Linux 软件工程师大致可分为两个层次:(1)Linux 应用软件工程师(Application Software Engineer):主要利用C 库函数和LinuxAPI 进行应用软件的编写;(2)Linux 固件工程师(Firmware Engineer):主要进行Bootloader、Linux 的移植及Linux 设备驱动程序的设计。一般而言,固件工转载 2012-10-30 10:56:56 · 912 阅读 · 0 评论 -
Linux异步通知fasync
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx异步通知fasync是应用于系统调用signal和sigaction函数,下面我会使用signal函数。简单的说,signal函数就是让一个信号与与一个函数对应,没当接收到这个信号就会调用相应的函数。xxxxxx转载 2012-10-31 09:13:21 · 513 阅读 · 0 评论 -
Linux pipe
itenum=write(pipe_fd[1],w_buf,1024))==-1)printf("write to pipe error ");elseprintf("the bytes write to pipe is %d ", writenum);writenum=write(pipe_fd[1],w_buf,4096);close(pipe_fd[1转载 2012-10-31 09:17:27 · 354 阅读 · 0 评论 -
嵌入式 linux 驱动 ADC驱动
很懒,很久没去总结学习的东西,今天就总结下linux下的AD驱动吧,AD驱动理解的难点和注意的地方其实就只有两点。一、虚拟地址的应用,就是物理地址转换为虚拟地址,ADC驱动程序中的寄存器就是都用 到了虚拟地址了。其中最主要的转换的语句是base_addr=ioremap(S3C2410_PA_ADC,0x20);/ioremap()功能: 将一个IO地址空间映射到内核的虚拟地转载 2012-11-06 00:10:19 · 1903 阅读 · 0 评论