嵌入式Linux中文站

linux设备驱动中的阻塞与非阻塞

阅读(187)

首先说说什么是阻塞和非阻塞的概念: 阻塞操作就是指进程在操作设备时,由于不能获取资源或者暂时不能操作设备时,系统就会把进程挂起,被挂起的进程会进入休眠状态并且会从调度器的运行队列移走,放到等待队列中,然后一直休眠,直到该进程满足可操作的条件,再被唤醒,继续执行之前的操作。非阻塞操作的进程在不能进行设备操作时,并不会挂起,要么放弃,要么不停地执行,直到可以进行操作为止。 我们都知道,在应用中,打开一个设备文件时,指定了是以阻塞还是非阻塞打开(缺省是阻塞方式),然后后面的读写一切都是交由驱动来实现,

Linux 网络驱动详解

阅读(175)

原文地址:http://blog.csdn.net/chenjin_zhong/article/details/6324334 1.概述 Linux系统多用于服务器上,Linux非常牢固的支持网络。在Linux,网络分为两个层,分别是网络堆栈协议支持层,以及接收和发送网络协议的设备驱动程序层。网络堆栈是硬件中独立出来的部分,主要用来支持TCP/IP等多种协议,而网络设备驱动层是连接网络堆栈协议层和网络硬件的中间层。 网络设备驱动程序的主要功能是: (1)模块加载或内核启动相关的初始化处理 (2)清除模块时

Linux下SPI从设备驱动的编写

阅读(220)

转载地址:http://blog.csdn.net/chinazhangzhong123/article/details/51686267 SPI(Serial Peripheral Interface) 是一个同步的四线制串行线,用于连接微控制器和传感器、存储器及外围设备。三条信号线持有时钟信号( SCLK ,经常在 10MHz 左右)和并行数据线带有 主出,从进 (MOSI) 或是 主进,从出 (MISO) 信号。数据交换的时候有四种时钟模式,模式 0 和模式 3 是最经常使用的。每个时钟周期将会传递

linux热插拔之udev的使用方法

阅读(331)

Udev相关的文章很多,本文的主要目的不是提供一个完整的教学文档,对其使用,只是给出网上现有的主要资源。着重分析其基本工作原理以及在使用中遇到的一些README文档没有明确说明的问题。 1 基本概念 udev文件系统是针对2.6内核,提供一个基于用户空间的动态设备节点管理和命名的解决方案,网上关于为什么要使用udev文件系统,udev文件系统和devfs文件系统的比较,等等的文章已经很多了,如果你想了解这方面的内容,请直接搜索相关的关键字。 udev的官方网址:http://www.kernel.org/

Linux IIC设备驱动剖析

阅读(231)

写在前面 由于IIC总线只需要两根线就可以完成读写操作,而且通信协议简单,一条总线上可以挂载多个设备,因此被广泛使用。但是IIC总线有一个缺点,就是传输速率比较低。本文基于Linux-2.6.36版本,说说IIC子系统在Linux中的实现。 IIC子系统框架分为3各部分: 1. I2C核心: I2C总线和I2C设备驱动的中间枢纽,它为 I2C总线和设备驱动 提供了注册、注销等方法。 2. I2C总线驱动(I2C控制器驱动): 对I2C硬件体系中适配器端的实现,控制器可以在CPU内部,也可以集成在CPU内部

Linux总线设备驱动框架的理解

阅读(208)

Linux的设备驱动模型,或者说,Linux的设备驱动框架,都是同一个意思。 应该这样理解,( Linux的设备)驱动框架,即某类设备对应的驱动的框架。 这里是Linux总线设备驱动框架,应该这样理解,(Linux的总线设备) 驱动框架,即总线式设备对应的驱动的框架 。(个人理解) 以下内容源于微信公众号:嵌入式企鹅圈。有格式内容上的修改,如有侵权,请告知删除。 1、总线 总线代表着同类设备需要共同遵守的工作时序,不同的总线对于物理电平的要求是不一样的,对于每个比特的电平维持宽度也是不一样,而总线上传递的

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

阅读(173)

一. 概述 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 宏的用法与解析

阅读(120)

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