嵌入式Linux中文站

Linux下USB驱动详解(HOST)

阅读(313)

USB驱动分为两块,一块是USB的bus驱动,这个东西,Linux内核已经做好了,我们可以不管,我们只需要了解它的功能。形象的说,USB的bus驱动相当于铺出一条路来,让所有的信息都可以通过这条USB通道到达该到的地方,这部分工作由usb_core(drivers/usb/usb.c)来完成。当USB设备接到USB控制器接口时,usb_core就检测该设备的一些信息,如生产厂商的ID(VID)和产品的ID(PID),或者是设备所属的class、subclass跟protocol,以便确定应该调用哪一个驱动

linux内核驱动模块开发makefile实例解析

阅读(330)

以下是摘自网络上的一个经典的linux设备驱动的Makefile文件,以及详细的内容解释。此文件可以完成对大部分驱动的编译,使用时只需要稍加修改就可以了。 $( warning KERNELRELEASE = $( KERNELRELEASE ))ifeq ( $( KERNELRELEASE ),) KERNELDIR ?= /lib/modules /$(shell uname -r)/build PWD : = $( shell pwd) MYMOD : = hello modules: $( MA

Linux下的触摸屏驱动

阅读(235)

一. 触摸屏理论概述 对于触摸屏驱动,我们主要需要掌握触摸屏驱动代码和应用层测试代码。下面讲的是基于 Mini2440 的触摸屏驱动,现在的驱动我们都将设备和驱动分离,挂在平台设备总线上,让设备和驱动去匹配。而我们在 linu2.6.32.2 内核版本中的触摸屏驱动仍然没有将设备和驱动分离,这样就不存在匹配问题,这种现象其实我们并不陌生,在我们学习驱动的前期,都会研究简单字符驱动代表 LED 驱动,那个驱动就是把设备和驱动写在了一起。总结下,驱动和设备可以分离也可以不分离,建议分离,而本触摸屏驱动没有分离

Linux驱动之I2C总线

阅读(322)

1.I2C总线的硬件特性:两线式串行总线.用于连接CPU和外设之间的通信接口需要2根信号线,时钟控制线SCL和数据传输信号线SDA.串行:CPU和外设之间传输是一个周期传输一个BIT位, 如果需要写入0X55,需要两个时钟周期才能完成.CPU又称master,外设又称slave. 一个时钟周期传输一个bit:CPU和外设之间传输一个bit位,必须要通过时钟控制信号来实现双方的数据收和发!比如CPU在时钟高电平像数据线写入数据,设备在同一个周期低电平从数据线上接收数据. 总线:两根信号线上可以挂接很多外设,

Linux 音频设备驱动架构及应用编程

阅读(313)

最早出现在Linux上的音频编程接口是OSS(Open Sound System),它由一套完整的内核驱动程序模块组成,可以为绝大多数声卡提供统一的编程接口。OSS出现的历史相对较长,这些内核模块中的一部分(OSS/Free)是与Linux内核源码共同免费发布的,另外一些则以二进制的形式由4Front Technologies公司提供。由于得到了商业公司的鼎力支持,OSS已经成为在Linux下进行音频编程的事实标准,支持OSS的应用程序能够在绝大多数声卡上工作良好。 虽然OSS已经非常成熟,但它毕竟是一个

linux framebuffer 驱动

阅读(234)

framebuffer 设备即帧缓冲设备(简写fb)提供了显示接口的抽象描述。他同时代表着显示接口的存储区,应用程序通过定义好的函数访问,不需要知道底层的任何操作。 Framebuffer 驱动使用的设备节点,通常位于/dev 目录,如/dev/fb*.从用户角度看,fb 设备和其他/dev 下面的设备类似:普通的字符设备,主设备号29,次设备号定义fb 的索引。通常,使用如下方式(前面的数字表示次设备号)0 = /dev/fb0 第一个fb 设备,1 = /dev/fb1 第二个fb 设备,fb 也是一

linux驱动--内核和驱动关系

阅读(351)

概述 Linux设备驱动属于内核的一部分,Linux内核的一个模块可以以两种方式被编译和加 载: (1)直接编译进Linux内核,随同Linux启动时加载。 (2)编译成一个可加载和删除的模块。 驱动程序向内核添加了一些函数,是内核的一部分。例如Open(), Release(), Read(), Write()。这些函数由内核在适当的时候来调用,可以用来完成硬件访问等操作。驱动程序占kernel源代码超过50%。 内核中printk()函数的设计目的并不是为了和用户交流,它实际上是内核的一种日志机制,用

linux驱动的入口函数module_init的加载和释放

阅读(169)

就像你写C程序需要包含C库的头文件那样,Linux内核编程也需要包含Kernel头文件,大多的Linux驱动程序需要包含下面三个头文件: #include linux/init.h #include linux/module.h #include linux/kernel.h 其中,init.h 定义了驱动的初始化和退出相关的函数,kernel.h 定义了经常用到的函数原型及宏定义,module.h 定义了内核模块相关的函数、变量及宏。 几乎每个linux驱动都有个module_init(与module_