Linux2_6内核下同步串行通信驱动的开发与应用
Linux2.6内核中的Framebuffer驱动程序设计

Linux2.6内核中的Framebuffer驱动程序设计虽然Framebuffer驱动技术在PC上已经逐渐被淘汰,但是在嵌入式等考虑成本的平台下,由于其使用简单,成本低廉的优势,使用相当的广泛。
在Linux2.4和Linux2.6内核之间,Framebuffer的框架结构发生了很大的变化,网络上很多介绍Framebuffer的文档都是基于2.4内核下的,这就使得在2.6内核开发Framebuffer驱动增加了难度,本文介绍2.6内核下如何编写Framebuffer驱动,以适应最新版本的Linux。
Framebuffer是出现在Linux 2.2.xx及以后版本内核当中的一种驱动程序接口,这种接口将显示设备抽象为帧缓冲区设备。
帧缓冲区为图像硬件设备提供了一种抽象化处理,它代表了一些视频硬件设备,允许应用软件通过定义明确的界面来访问图像硬件设备。
这样软件无须了解任何涉及硬件底层驱动的东西(如硬件寄存器)。
它允许上层应用程序在图形模式下直接对显示缓冲区进行读写和I/O控制等操作。
通过专门的设备节点可对该设备进行访问,如/dev/fb*。
用户可以将它看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以进行读写操作,而读写操作可以反映到LCD。
二、 Framebuffer驱动的主要数据结构fb_fix_screeninfo记录了帧缓冲设备和指定显示模式的固件信息。
它包含了屏幕缓冲区的物理地址和长度等信息。
fb_var_screeninfo记录了帧缓冲设备和指定显示模式的可修改信息。
它包括显示屏幕的分辨率、每个像素的比特数和一些时序变量。
其中变量 xres定义了屏幕一行所占的像素数,yres定义了屏幕一列所占的像素数。
fb_info info是Linux为帧缓冲设备定义的驱动层接口。
它不仅包含了底层函数,而且还有记录设备状态的数据。
每个帧缓冲设备都与一个fb_info结构相对应。
其中成员变量包含fb_fix_screeninfo、fb_var_screeninfo这两个数据结构,另外还有Framebuffer的回调函数。
Linux kernel 2.6 USB转串口IC驱动程序介绍

Linux kernel 2.6 USB转串口IC驱动程序介绍Version historyIndex Version Author Date Comment1 V1.0.0 Wen Xiaoyong 2011-12-13 Draft,Linux kernel 2.6.31(comefrom Freescale iMX515 BSP), baseon USB 2.0目录Linux kernel 2.6 USB转串口IC驱动程序介绍 (1)Version history (1)目录 (2)1. USB介绍 (3)1.1 USB的发展历史 (3)1.2 USB接口电气规范 (4)1.3 USB协议简介 (8)2. Linux kernel 2.6中,USB框架 (12)2.1 Linux kernel中的USB子系统 (12)2.2 USB转串口IC驱动架构图 (15)3. Linux kernel 2.6内核,USB接口函数 (17)4. USB转串口芯片驱动框架 (19)4.1 USB转串口芯片驱动,关键数据结构 (20)4.2 USB转串口芯片驱动接口 (23)4.3 应用程序访问I2C设备例子程序 (27)5. 参考资料 (28)5.1 参考代码 (28)5.2 参考文档 (28)1. USB介绍1.1 USB的发展历史通用串行总线(英语:Universal Serial Bus,简称“USB”)是连接计算机系统与外部设备的一个串口总线标准,也是一种输入输出接口技术规范,被广泛应用于个人电脑和移动设备等信息通讯产品,并扩展至摄影器材、数字电视(机顶盒)、游戏机等其它相关领域。
多媒体电脑刚问世时,外接式设备的传输接口各不相同,如打印机只能接LPT port、调制解调器只能接RS232、鼠标键盘只能接PS/2等。
繁杂的接口系统,加上需安装驱动程序并重启才能使用的限制,都不免造成用户的困扰。
因此,创造出一个统一且支持热插拔的外接式传输接口,便成为无可避免的趋势。
linux内核SPI总线驱动分析

linux内核SPI总线驱动分析(一)下面有两个大的模块:一个是SPI总线驱动的分析(研究了具体实现的过程)另一个是SPI总线驱动的编写(不用研究具体的实现过程)SPI总线驱动分析1 SPI概述SPI是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口,是Motorola 首先在其MC68HCXX系列处理器上定义的。
SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。
SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便。
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要4根线,事实上3根也可以。
也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCLK(时钟),CS(片选)。
MOSI(SDO):主器件数据输出,从器件数据输入。
MISO(SDI):主器件数据输入,从器件数据输出。
SCLK :时钟信号,由主器件产生。
CS:从器件使能信号,由主器件控制。
其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效,这就允许在同一总线上连接多个SPI设备成为可能。
需要注意的是,在具体的应用中,当一条SPI总线上连接有多个设备时,SPI本身的CS有可能被其他的GPIO 脚代替,即每个设备的CS脚被连接到处理器端不同的GPIO,通过操作不同的GPIO口来控制具体的需要操作的SPI设备,减少各个SPI设备间的干扰。
SPI是串行通讯协议,也就是说数据是一位一位从MSB或者LSB开始传输的,这就是SCK时钟线存在的原因,由SCK提供时钟脉冲,MISO、MOSI则基于此脉冲完成数据传输。
SPI支持4-32bits的串行数据传输,支持MSB和LSB,每次数据传输时当从设备的大小端发生变化时需要重新设置SPI Master的大小端。
Linux内核同步机制简介分析

Linux内核同步机制简介1 介绍1)由于现代Linux操作系统是多任务、SMP、抢占式以及中断是异步执行的,导致共享资源容易被并发访问,从而使得访问共享资源的各线程之间互相覆盖共享数据,造成被访问数据处于不一致状态,因此Linux提供了同步机制来防止并发访问。
2)常用的同步机制(如自旋锁)用来保护共享数据使用起来简单有效,但由于CPU的处理速度与访问内存的速度差距越来越大,导致获取锁的开销相对于CPU的速度在不断的增加。
因为这种锁使用了原子操作指令,需要原子地访问内存,即获取锁的开销与访问内存的速度相关。
3)Linux内核根据对不同共享资源的特性,提供多种同步机制:原子操作、自旋锁、读-写自旋锁、信号量、读-写信号量、完成变量、顺序锁、禁止抢占、内存屏障及RCU,本文将对其分别进行简要介绍。
2 原子操作(atomic)2.1 基本原理1)所谓原子操作,就是该操作绝不会在执行完毕前被任何其它任务或事件打断,它是最小的执行单位,不可能有比它更小的执行单位。
2)原子操作通常是内联函数,通过内联汇编指令来实现。
3)原子操作需要硬件的支持,因此不同的体系结构的实现方式不同。
4)内核提供了两组原子操作接口:整数操作和位操作。
2.1.2 原子整数操作1)原子操作主要用于实现资源计数,很多引用计数就是通过原子操作实现的。
2)原子类型定义如下:(参看RHEL6.5GA_x86_64内核文件:/root/include/linux/types.h)3)针对整数的原子操作只能对atomic_t类型的数据进行处理,原因如下:a)让原子函数只接受atomic_t类型的操作数,可以确保原子操作只与这种特殊类型一起使用。
b)使用atomic_t类型确保编译器不对相应的值进行优化,使得原子操作最终接收到正确的内存地址。
c)可以屏蔽不同体系结构上实现原子操作的差异。
2.1.2 原子位操作1)位操作函数是对普通的内存地址进行操作的,对所操作的数据类型没有要求。
Linux下的串口编程(ZT)

Linux下的串口编程(ZT)Linux 操作系统从一开始就对串行口提供了很好的支持,本文就 Linux 下的串行口通讯编程进行简单的介绍。
串口简介串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。
常用的串口是 RS-232-C 接口(又称 EIA RS-232-C)它是在 1970 年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。
它的全名是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换 接口技术标准"该标准规定采用一个 25 个脚的 DB25 连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。
传输距离在码元畸变小于 4% 的情况下,传输电缆长度应为 50 英尺。
Linux 操作系统从一开始就对串行口提供了很好的支持,本文就 Linux 下的串行口通讯编程进行简单的介绍,如果要非常深入了解,建议看看本文所参考的《Serial Programming Guide for POSIX Operating Systems》计算机串口的引脚说明序号 信号名称 符号 流向 功能2 发送数据 TXD DTE→DCE DTE发送串行数据3 接收数据 RXD DTE←DCE DTE 接收串行数据4 请求发送 RTS DTE→DCE DTE 请求 DCE 将线路切换到发送方式5 允许发送 CTS DTE←DCE DCE 告诉 DTE 线路已接通可以发送数据6 数据设备准备好 DSR DTE←DCE DCE 准备好7 信号地 信号公共地8 载波检测 DCD DTE←DCE表示 DCE 接收到远程载波20 数据终端准备好 DTR DTE→DCE DTE 准备好22 振铃指示 RI DTE←DCE表示 DCE 与线路接通,出现振铃串口操作串口操作需要的头文件#i nclude <stdio.h> /*标准输入输出定义*/#i nclude <stdlib.h> /*标准函数库定义*/#i nclude <unistd.h> /*Unix 标准函数定义*/#i nclude <sys/types.h>#i nclude <sys/stat.h>#i nclude <fcntl.h> /*文件控制定义*/#i nclude <termios.h> /*PPSIX 终端控制定义*/#i nclude <errno.h> /*错误号定义*/打开串口在 Linux 下串口文件是位于 /dev 下的串口一 为 /dev/ttyS0串口二 为 /dev/ttyS1打开串口是通过使用标准的文件打开函数操作:int fd;/*以读写方式打开串口*/fd = open( "/dev/ttyS0", O_RDWR);if (-1 == fd){/* 不能打开串口一*/perror(" 提示错误!");}设置串口最基本的设置串口包括波特率设置,效验位和停止位设置。
Linux2.6内核的USB鼠标驱动开发

No.5 Oct..2008
微处理机
MICROPROCESSORS
第5期 2008年10月
Linux2.6内核的USB鼠标驱动开发
杨春霞,王自强 (南京大学电子工程系,南京210093)
摘要:主.6内核较先前版本有很大程度的修改。首先介绍2.6内核的设备模型以及驱动编
写上的变化,然后介绍USB设备,以鼠标为例重点说明USB驱动程序
struct usb_device术dev;/宰相应的USB设备指针∥ unsigned int pipe;/木端口信息母/ int status;/半返回的状态信息,Ic/ void·transfer_buffer;/书指向相关数据缓冲区·/ int transfer__buffer 1e%,th;/母数据缓冲区大小木/ int actual_length;/木返回的实际数据大小木/
万方数据
5期
杨春霞等:Linux2.6内核的USB鼠标驱动开发
·95·
3 USB系统介绍及通信
USB采用四线电缆,其中两根是用来传送数据 的串行通道。另两根为设备提供电源。最新的USB 规范修订增加了高达480Mbps的高速连接。
USB系统采用级联星型拓扑,该拓扑由三个基 本部分组成:主机(Host),集线器(Hub)和功能设 备。USB主控制器负责询问每个USB设备是否有 数据需要发送。
Linux2.6下内核调试技术的改进与研究

安 装 自己的新 内核 . 是 为 了在 内核 代 码 中加 入 以 这
收 稿 日期: 0 5 0 — 9 20— 80 基 金 项 目: 安 部 金 盾 工 程 资 助 项 目 (1 A 2W0 3 公 JG B 3 1 )
Ab ta t Ac o dn h iu d l c a im n e ied e ’ lme t. hsp p ra ay e e k re e sr c : cr igt te Ln xmo ue me h ns a dd vc dv rsee ns ti a e lBst e l - o n h n d b gp be i ed vc r e ’ e eo me tpo e s n d rsac e e k r e e u c n lg o gd , a - u r lm n t e ied v rsd v lp n rc s,a ee rh st en l b gt h oo yt mu lyme o h i h d e h n w i ,rp ssa mp o e ou o b u mo alc t nma a e n d ac s ntek r e. hl p o oe i rv dslt n a o t e n i me w l ai , n g me ta ce si e 1 o o n h n Ke r s Ln x26 De u e h oo y K o d ywo d : iu ., b g tc n lg , ig
YANG o Ma ,DAIZib n - i
( stt o lc o i T cn lg,h L fr ai n ier g nvri , hnzo 5 0 4C ia I tue f et nc eh o y teP AI om t nE g ei i sy Z e ghu4 0 0 hn ) ni E r o n o n nU e t
Linux内核架构和工作原理详解

Linux内核架构和工作原理详解作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。
目前支持模块的动态装卸(裁剪)。
Linux内核就是基于这个策略实现的。
Linux 进程采用层次结构,每个进程都依赖于一个父进程。
内核启动init程序作为第一个进程。
该进程负责进一步的系统初始化操作。
init进程是进程树的根,所有的进程都直接或者间接起源于该进程。
virt/ ---- 提供虚拟机技术的支持。
Linux内核预备工作理解Linux内核最好预备的知识点:懂C语言懂一点操作系统的知识熟悉少量相关算法懂计算机体系结构Linux内核的特点:结合了unix操作系统的一些基础概念Linux内核的任务:1.从技术层面讲,内核是硬件与软件之间的一个中间层。
作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。
2.从应用程序的层面讲,应用程序与硬件没有联系,只与内核有联系,内核是应用程序知道的层次中的最底层。
在实际工作中内核抽象了相关细节。
3.内核是一个资源管理程序。
负责将可用的共享资源(CPU时间、磁盘空间、网络连接等)分配得到各个系统进程。
4.内核就像一个库,提供了一组面向系统的命令。
系统调用对于应用程序来说,就像调用普通函数一样。
内核实现策略:1.微内核。
最基本的功能由中央内核(微内核)实现。
所有其他的功能都委托给一些独立进程,这些进程通过明确定义的通信接口与中心内核通信。
2.宏内核。
内核的所有代码,包括子系统(如内存管理、文件管理、设备驱动程序)都打包到一个文件中。
内核中的每一个函数都可以访问到内核中所有其他部分。
目前支持模块的动态装卸(裁剪)。
Linux内核就是基于这个策略实现的。
哪些地方用到了内核机制?1.进程(在cpu的虚拟内存中分配地址空间,各个进程的地址空间完全独立;同时执行的进程数最多不超过cpu数目)之间进行通信,需要使用特定的内核机制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
开放源代码 ,使得众多的软件设计者不断为其更新和优化 。 至今为止 , L inux内核已经发展到 2. 6版本 ,与 L inux2. 4 内核 相比 ,它在性能 、安全性和设备模型等方面都作了极大的改 进 。而随着 L inux内核版本的升级 ,驱动程序的开发也要作 相应的修改 [ 5 - 6 ] 。
首先通过 resource元素定义 SSC0的设备资源信息 。 ssc0 _resources[ 0 ]定义了 AT91RM9200 SSC0 外设映射到地址空 间的范围 ,从 AT91RM9200 _BASE_SSC0 ( 0xFFFD0000)开始 , 长度为 16 KB。 ssc0 _ resources [ 1 ]定义了 SSC0 设备的中断
1 AT91RM9200同步串行控制器 SSC接口分析
AT91RM9200是一款高性能 、低功耗和低成本的嵌入式 ARM 微处理器 ,内部集成了丰富的系统资源和外设接口 ,被 广泛应用于各种工业控制系统中 。它提供了 3个同步串口控
收稿日期 : 2009 - 09 - 21;修回日期 : 2009 - 11 - 13。 作者简介 :仇洁婷 (1985 - ) ,女 (壮族 ) ,广西钦州人 ,硕士研究生 ,主要研究方向 :物探仪器 ; 陈儒军 ( 1973 - ) ,男 (土家族 ) ,贵州思南人 , 副教授 ,博士 ,主要研究方向 :物探仪器 ; 何展翔 (1962 - ) ,男 ,湖南平江人 ,教授级高级工程师 ,主要研究方向 :综合物化探采集处理解释方法 。
图 1 SSC设备驱动的程序结构 2. 1 SSC驱动的 Platform 注册
L inux2. 6. 21 内 核 把 AT91RM9200 处 理 器 内 部 集 成 的 I2 C、SP I和看门狗等都归纳为平台设备 ,并由内核统一管理 。 平台设备用 p latform _device结构体来描述 ,包含其所用的资 源数量和指针 。 SSC作为 AT91RM9200处理器内部集成的外 设接口 ,需要通过 p latform _device进行注册 。AT91RM9200的 p latform 平 台 设 备 注 册 在 / arch / arm /mach2at91 / at91 rm9200 _ device. c文件中执行 。
第 30卷第 3期 2010年 3月
计算机应用 Journal of Computer App lications
Vol. 30 No. 3 M ar. 2010
文章编号 : 1001 - 9081 (2010) 03 - 0850 - 04
L inux216内核下同步ct: The communication between ARM and D igital Signal Processor (DSP) is a key factor in ARM /DSP dual core design w idely used in geophysics exp loration instrumentation. In this paper serial synchronous communication between AT91RM9200 /DSP56309 dual core p rocessors was realized and the modularized and hierarchical design of the SSC driver based on AT91TM9200 in L inux 2. 6 was introduced in detail. The DMA transm ission, multi2buffering and PDA controller p riority modification was used in the driving design. The SSC interface circuit imp lementation based on the design was also introduced. The experimental results show that the data transfer between AT91RM9200 /DSP56309 is rap id and steady, and so that the dual core p rocessors co2work very well.
Q IU J ie2ting1, 4 , CHEN Ru2jun1, 2, 3 , HE Zhan2xiang4 , Q IU Kai2lin4
(1. School of Info2physics and Geom atics Eng ineering, Cen tral S outh U n iversity, Changsha Hunan 410083, China; 2. Postdoctora l S tation of Com pu ter S cience and Technology, Cen tral S outh U n iversity, Changsha Hunan 410083, China; 3. Postdoctoral R esea rch S ta tion of B ureau of Geophysica l P rospecting, Ch ina N ationa l Petroleum Corpora tion, Z huozhou Hebei 072751, Ch ina;
Key words: serial synchronous communication; AT91RM9200; DSP56309; L inux2. 6
0 引言
随着地球物理勘探仪器在功耗 、性能和成本等方面要求 越来越高 ,嵌入式 ARM 处理器在地球物理勘探仪器领域的 应用也不 断 扩 大 [1 ] 。同 时 , 由 于 数 字 信 号 处 理 器 ( D igital Signal Processor, DSP) 在 数 字 滤 波 、快 速 傅 里 叶 变 换 ( Fast Fourier Transformation, FFT)和谱分析等方面具有明显的优越 性 ,使得它被广泛用于高精度数据运算和复杂数据处理的地 球勘探仪器中 [2 ] 。但是 DSP没有功能强大的操作系统 ,不适 合做系统控制 ,而这正好是 ARM 的强项 。由此可见 ,通过采 用 ARM 与 DSP的结合可充分发挥二者的优势 [3 ] ,从而提升 仪器的性能 。然而 ,这种 ARM /DSP双核处理器系统的关键 技术是如何实现双核之间的通信 ,以确保系统能够对信号进 行实时 、高效的传输和处理 。
4. Postg raduate R esea rch S ta tion of N on2seism ic S u rvey, B ureau of Geophysica l P rospecting, China N a tiona l Petroleum Corpora tion, Zhuozhou Hebei 072751, Ch ina)
摘 要 :随着 ARM /DSP双核处理器在地球物理勘探仪器中的推广应用 ,双核间的通信成为实现这种双核处理器 系统的关键技术 。针对 L inux2. 6版本内核 ,详细介绍了基于 AT91TM9200 的 SSC同步串行通信设备驱动的模块化 、 分层次的设计架构 ,并在驱动中使用 DMA 传输模式 、分段缓存技术和修改 PDA 控制器优先级 。在此基础上给出了 AT91RM9200 /DSP56309双核的接口电路设计 。试验表明 ,在 AT91RM9200 /DSP56309双核中利用同步串行同步通信 的设计 ,能够使系统高效 、稳定 、快速地进行数据传输 ,从而使双核处理器能够很好地协同工作 。
针对上述分析 ,本文基于 ATM EL 公司 AT91RM9200 的 同步串行控制器 ( Serial Synchronous Controller, SSC) ,着重讨 论在 L inux2. 6. 21内核下如何开发和设计 SSC驱动程序 。最 后 ,以 DSP56309芯片作为数字信号处理器 ,以 AT91RM9200 芯片作为微控制器 ,采用 SSC作为 ARM 和 DSP之间的通信 接口 ,对 L inux2. 6. 21内核下的 SSC驱动程序进行测试和分 析。
2 L inux2. 6内核下 SSC驱动整体结构
L inux2. 6. 21内核源码没有提供 SSC接口的设备驱动程 序 ,本文针对于 AT91RM9200芯片的 SSC外设接口重新构建 SSC设备驱动 。 SSC驱动是字符设备驱动程序 ,它主要完成 以下工作 :
1)设计 SSC平台设备的注册函数 ; 2)设计 SSC的模块加载函数和卸载函数 ; 3)设计 SSC的 DMA传输模式和 read读函数 。 可将 SSC驱动程序分为 3 个层次 (如图 1 所示 ) 。最底 层由 at91 rm9200 _device. c文件获取了 SSC设备总线地址和 中断号 ,以及使能 SSC接口管脚 。 board2dk. c文件在 L inux系 统启动时注册了 SSC设备 ,以便上层 SSC设备驱动程序获取 SSC的硬件资源 。 at91_ssc. c文件实现了 SSC设备和 DMA 控 制器的初始化 、设备号和中断号的注册 、注销以及提供了用户 空间的 file_operations操作 (包括 open、read、ioctl和 close函数 操作 ) 。由于 AT91RM9200的 3个 SSC外围接口接收器 /发生 器用法类似 ,本文就仅介绍 SSC0接收器驱动程序设计 。
关键词 :同步串行通信 ; AT91RM9200; DSP56309; L inux2. 6 中图分类号 : TP316 文献标志码 : A