嵌入式Linux中文站

Linux ALSA声卡驱动之ALSA架构简介

阅读(165)

一. 概述 ALSA是AdvancedLinuxSound Architecture 的缩写,目前已经成为了linux的主流音频体系结构,想了解更多的关于ALSA的这一开源项目的信息和知识,请查看以下网址:http://www.alsa-project.org/。 在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用alsa-lib提供的API,即可以完成对底层音频硬件的控制。 图 1.1 alsa的软件体系结构 由图1.1可以看出,

linux内核驱动中_IO, _IOR, _IOW, _IOWR 宏的用法与解析

阅读(115)

在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值。cmd除了可区别数字外,还包含有助于处理的几种相应信息。 cmd的大小为 32位,共分 4 个域: bit31~bit30 2位为 区别读写 区,作用是区分是读取命令还是写入命令。 bit29~bit15 14位为 数据大小 区,表示 ioctl() 中的 arg 变量传送的内存大

linux RTC 驱动模型分析

阅读(147)

RTC(real time clock)实时时钟,主要作用是给Linux系统提供时间。RTC因为是电池供电的,所以掉电后时间不丢失。Linux内核把RTC用作离线的时间与日期维护器。当Linux内核启动时,它从RTC中读取时间与日期,作为基准值。在运行期间内核完全抛开RTC,以软件的形式维护系统的当前时间与日期,并在需要时将时间回写RTC芯片。另外如果RTC提供了IRQ中断并且可以定时,那么RTC还可以作为内核睡眠时唤醒内核的闹钟。应用程序可以用RTC提供的周期中断做一些周期的任务。linux有两种rtc

Linux下spi驱动开发

阅读(145)

作者:刘洪涛, 华清远见嵌入式学院 讲师。 一、概述 基于子系统去开发驱动程序已经是linux内核中普遍的做法了。前面写过基于I2C子系统的驱动开发。本文介绍另外一种常用总线SPI的开发方法。SPI子系统的开发和I2C有很多的相似性,大家可以对比学习。本主题分为两个部分叙述,第一部分介绍基于SPI子系统开发的理论框架;第二部分以华清远见教学平台FS_S5PC100上的M25P10芯片为例(内核版本2.6.29),编写一个SPI驱动程序 一、概述 基于子系统去开发驱动程序已经是linux内核中普遍的做法了。

Linux下的帧缓冲lcd应用编程及Framebuffer驱动程序模型

阅读(192)

一、Linux的帧缓冲设备 帧缓冲(framebuffer)是 Linux 为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer 设备驱动来完成的。帧缓冲驱动的应用广泛,在 linux 的桌面系统中,Xwindow 服务器就是利用帧缓冲进行窗口的绘制。尤其是通过帧缓冲可显示汉字点阵,成为 Linux汉化的唯一可行方案。 帧缓冲设备对应的设备文

Linux SPI总线设备驱动模型详解

阅读(426)

随着技术不断进步,系统的拓扑结构越来越复杂,对热插拔、跨平台移植性的要求越来越高,早期的内核难以满足这些要求,从linux2.6内核开始,引入了总线设备驱动模型。其实在linux2.4总线的概念就已经提出来了,直到2.6版本的内核才运用。 Linux系统中有很多条总线,如I2C、USB、platform、PCI等。 以spi为例,假如有M种不同类型CPU,N中不同SPI外设,在写裸机驱动的时候,M种CPU驱动同一个外设需要M份代码,而N种外设使用同一个cpu又需要N份代码,所以需要M*N份代码,这是典型的

Linux V4L2驱动架构解析与开发导引

阅读(567)

众所周知,linux中可以采用灵活的多层次的驱动架构来对接口进行统一与抽象,最低层次的驱动总是直接面向硬件的,而最高层次的驱动在linux中被划分为面向字符设备、面向块设备、面向网络接口三大类来进行处理,前两类驱动在文件系统中形成类似文件的虚拟文件,又称为节点node,这些节点拥有不同的名称代表不同的设备,在目录/dev下进行统一管理,系统调用函数如open、close、read等也与普通文件的操作有相似之处,这种接口的一致性是由VFS(虚拟文件系统层)抽象完成的。面向网络接口的设备仍然在UNIX/Lin

Linux驱动加载顺序

阅读(142)

Linux内核为不同驱动的加载顺序对应不同的优先级,定义了一些宏: include\linux\init.h #define pure_initcall(fn) __define_initcall(0,fn,1) #define core_initcall(fn) __define_initcall(1,fn,1) #define core_initcall_sync(fn) __define_initcall(1s,fn,1s) #define postcore_initcall(fn) __defin