Linux下USB MASS STORAGE

Linux下USB MASS STORAGE
Linux下USB MASS STORAGE

Linux下USB MASS STORAGE驱动的分析笔记https://www.360docs.net/doc/7313439566.html,B MASS STORAGE 协议分析

Sub Class协议名说明

0x01Reduced Block Commands(RBC)通常为Flash Rom介质的存储设备使用

0x028020i, MMC-2(ATAPI)通常为CD/DVD设备使用

0x03QIC-157常用于磁带机设备

0x04UFI常用于软磁盘设备(FDD)

0x058070i常用于软磁盘设备或者其他设备

0x06SCSI协议

0x07-0xFF保留

Sub Class可以在usb设备连入系统后获取。不同的通讯协议决定了usb驱动要用不同的命令和数据包格式和u盘通讯。

接口协议

协议名

0x00Control/Bulk/Interrupt 协议(CBI)

带有command completion中断

0x01Control/Bulk/Interrupt 协议(CBI)

不带有command completion中断

0x50Bulk-Only协议

0x02-0x4F保留

0x51-0xFF保留

接口协议号即InterfaceProtocol字段,在usb设备插入后可以从总线上获取。

在实际usb mass storage设备工作时,设备驱动首先要做的是获得该u盘的通讯协议和通讯方式,然后按照需要产生与目标设备兼容的控制命令,并将该控制命令打包通过设备的通讯传输方式发送至设备,完成一次对设备的读写操作。

对于上述6中数据通讯协议,均有很详细的说明文档,经过分析,他们的命令有很大的相似之处,这也是通讯usb驱动能够实现的原因之一。

2.自带驱动usb-storage的简要原理分析

linux内核中自带的usb mass storage驱动位于内核源代码目录kernel/drivers/usb/storage/下,下表为该目录下各文件的功能说明:

文件功能说明

usb.c/.h Usb-storage的核心文件,是整个驱动的框架代码

transport.c/.h实现了对于不同通讯方式的支持函数

scsiglue.c/.h Scsi设备的模拟函数

protocol.c/.h实现了对于几种通讯协议的SCSI命令翻译函数

initializers.c/.h对于某些设备的专用初始化函数

unusual_devs.h对于非常规设备ProductID和VendorID的支持

shuttle_usbat.c/.h支持SCM Microsystems设备的驱动

sddr55.c/.h SanDisk SDDR-55 SmartMedia reader的驱动

sddr09.c/.h anDisk SDDR-09 SmartMedia reader的驱动

onetouch.c/.h Maxtor OneTouch USB hard drive驱动支持

libusual.c对于常规设备的ProductID和VendorID的支持

karma.c/.h Rio Karma设备驱动

jumpshot.c/.h Lexar "Jumpshot" Compact Flash reader驱动

isd200.c/.h ISD200专属通讯协议支持

freecom.c/.h Freecom USB/IDE 转化器支持

dpcm.c/.h DPCM-USB CompactFlash/SmartMedia reader设备支持

debug.c/.h用于调试的工具函数

datafab.c/.h Datafab USB Compact Flash reader驱动支持

alauda.c/.h Alauda-based card readers驱动支持

通过上述文件作用分析后,可以看出,对于常规的usb设备,大部分代码文件都是多余的,核心文件为上表的前4项。这就为进一步分析驱动已经对其进行简化和仿制提供了可能。

通过对核心代码的分析,本驱动的工作机理是将自身模拟为标准的SCSI设备,并向scsi管理器注册,这样对于上层系统而言,只需操作标准的SCSI设备即可。这样可以简化具体的文件读写功能。同时驱动接受到的SCSI命令转化为对应u盘设备的通讯协议,并用对应设备的通讯方式进行发送,并将结果回馈到 SCSI管理器。

下图展示了整个驱动的工作布局:

图中Transfer layer和protocol layer分别对应了transfer.c和protocol.c 文件,Command Transfer Thread是usb.c在探测到有新设备接入后加载的线程,他将不断轮询SCSI发来的消息命令,并负责将这些命令通过protocol layer

提供的函数翻译并发送到u盘上,完成对u盘的读写操作。

Delayed Device Scan是为了防止用户在设备插入后马上拔除,造成驱动在后续通讯中造成混乱。实现方式是创建一个专门线程。

同时,usb.c在设备插入时会通过scsiglue.c提供的SCSI 接口函数向SCSI管理器注册自身。

3. usb-storage的传输协议

Mass Storage类支持两种传输协议:

1、Bulk-Only 传输(BOT)

2、Control/Bulk/Interrupt传输(CBI)

Mass Storage类规范定义了两个类规定的请求。Get_Max_Lun和Mass Stroage Reset,所有的Mass Storage设备都必须支持这两个请求。

Mass Storage Reset(bmRequestType=00100001b and bRequest=11111111b)用来复位Mass Storage设备及相关接口。

Get_Max_Lun(bmRequestType=00100001b and bRequest=11111110b)用来确认设备支持的逻辑单元数。Max Lun的值必须是0—15。注意Lun必须是从0开始的。主机不能向不存在的Lun发送CBW。

支持BOT传输的Mass Storage设备接口描述符要求如下:

接口类代码bInterfaceClass=08h,表示为Mass Storage设备。

接口类子代码 bInterfaceProtocol有3种:0x00,0x01,0x50,前两种使用中断传输,最后一种使用批量传输(BOT)。

支持BOT的设备必须支持最少3个endpoint:Control,Bulk-in,Bulk-out。USB2.0的规范定义了控制端点0。Bulk-in端点用来从设备向主机传送数据,Bulk-out 端点用来从主机向设备传送数据。

Bulk-Only传输(BOT)

像控制传输一样,Bot也是由command阶段,可选的数据阶段和状态阶段组成。所有的Command命令都有可能没有Data阶段。下图说明了BOT的Command传输,Data-in,Data-out传输及Status传输。

Bulk-only传输示意图

CBW是由31个字节组成的短包。CWB和后续的数据以及CSW都是从新封装包开始的。要注意的是所有的CBW传输都是little-endian模式。

在CBW中,dCBWsignature必须是“43425355h”,表示是CBW封装包。dCBWTag 是CB标签,会通过对应的CSW反馈回来。

在CSW中,dCSWSignature必须是“53425355h”,表示是CSW封装包。

摄像头基础知识培训

深圳市银之杰科技股份有限公司 摄像头基础知识培训 一.摄像头种类 (3) 二.USB摄像头工作原理 (3) 三.摄像头零件解构 (4) 1、图像传感器SENSOR (4) 2、数字信号处理芯片DSP (5) 3、镜头(LENS) (5) 4、USB线 (7) 四.摄像头驱动 (9) 五.摄像头的一些名词分辩率 (9) 1、分辨率 (9) 2、感光面积 (10) 3、灯光条纹(属于软件问题) (10) 4、景深 (12) 5、清晰度 (13) 6、坏点(属于硬件问题) (13) 7、色彩还原 (14)

8、FOV (14) 9、帧率 (15) 10、视频格式 (16) 11、失真(畸变) (17) 12、白平衡 (18) 13、曝光 (19) 14、带宽 (20) 15、DPI (21) 16、拍照方式 (22) 17、错误码 (23)

一.摄像头种类 摄像头是一种光电转换设备,种类主要包括USB 摄像头(USB 接口),手机摄像头(DVP&MIPI 接口),模拟摄像头(AV 接口,主要用于监控,车载等),网络摄像头(RJ45&无线接口,主要用于监控)等。 USB 摄像头手机摄像头模拟摄像头网络摄像头 二.USB 摄像头工作原理 摄像头的工作原理大致为: 景物通过镜头(LENS)生成的光学图像投射到图像传感器(SENSOR)表面上,然后转为电信号,经过A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(DSP)中加工处理,再通过USB 接口传输到电脑中处理,通过显示器就可以看到图像了。

三.摄像头零件解构 1、图像传感器SENSOR 在摄像头的三大结构组件中,我认为最重要的就是图像传感器了,因为感光器对成像质量起着决定性的作用,如果图像传感器效果不怎么好,无论后端的DSP和电脑端应用软件再强大,也不可能让图像效果有大的提升,而一个效果好的图像传感器采集到的图像甚至可以不需要后端处理。 感光芯片可以分为两类: CCD(charge couple device):电荷耦合器件 CMOS(complementary metal oxide semiconductor):互补金属氧化物半导体 CCD的价格比较高,多用在网络摄像头,车载摄像头等监控设备上,还有就是数码相机,而CMOS摄像头则是非常主流(性能,包括价格)的大众级产品,从理论上说,CCD 传感器在灵敏度、分辨率、噪声控制等方面都优于CMOS传感器,而CMOS传感器则具有低成本、低功耗、以及高整合度的特点。 简单地讲,就是CCD摄像头成像质量会更好,图像明锐通透、细节丰富,色彩还原度好,曝光准确。 之前的CMOS都是属于前照式,但随着科技的发展,现在的CMOS也发展出了背照式CMOS,背照式CMOS的制作工艺和前照式不同,能增大感光量,提高拍摄灵敏度,显著提高低光照条件下的拍摄效果,像现在我们的手机和数码相机800万及以上的摄像头,都已经采用了背照式。

usb摄像头基本介绍

一、摄像头简介 摄像头(CAMERA)又称为电脑相机、电脑眼等,它作为一种视频输入设备,在过去被广泛的运用于视频会议、远程医疗及实时监控等方面。近年以来,随着互联网技术的发展,网络速度的不断提高,再加上感光成像器件技术的成熟并大量用于摄像头的制造上,这使得它的价格降到普通人可以承受的水平。普通的人也可以彼此通过摄像头在网络进行有影像、有声音的交谈和沟通,另外,人们还可以将其用于当前各种流行的数码影像、影音处理。 二、摄像头的分类 摄像头分为数字摄像头和模拟摄像头两大类。模拟摄像头可以将视频采集设备产生的模拟视频信号转换成数字信号,进而将其储存在计算机里。模拟摄像头捕捉到的视频信号必须经过特定的视频捕捉卡将模拟信号转换成数字模式,并加以压缩后才可以转换到计算机上运用。数字摄像头可以直接捕捉影像,然后通过串、并口或者USB接口传到计算机里。现在电脑市场上的摄像头基本以数字摄像头为主,而数字摄像头中又以使用新型数据传输接口的USB 数字摄像头为主,目前市场上可见的大部分都是这种产品。除此之外还有一种与视频采集卡配合使用的产品,但目前还不是主流。 由于个人电脑的迅速普及,模拟摄像头的整体成本较高等原因,USB接口的传输速度远远高于串口、并口的速度,因此现在市场热点主要是USB接口的数字摄像头。以下主要是指USB接口的数字摄像头。 三、摄像头的工作原理 摄像头的工作原理大致为:景物通过镜头(LENS)生成的光学图像投射到图像传感器表面上,然后转为电信号,经过A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(DSP)中加工处理,再通过USB接口传输到电脑中处理,通过显示器就可以看到图像了。 注1:图像传感器(SENSOR)是一种半导体芯片,其表面包含有几十万到几百万的光电二极管。光电二极管受到光照射时,就会产生电荷。 注2:数字信号处理芯片DSP(DIGITAL SIGNAL PROCESSING)功能:主要是通过一系列复杂的数学算法运算,对数字图像信号参数进行优化处理,并把处理后的信号通过USB等接口传到PC等设备。 DSP结构框架: 1. ISP(image signal processor)(镜像信号处理器) 2. JPEG encoder(JPEG图像解码器) 3. USB device controller(USB设备控制器)

Linux设备驱动程序举例

Linux设备驱动程序设计实例2007-03-03 23:09 Linux系统中,设备驱动程序是操作系统内核的重要组成部分,在与硬件设备之间 建立了标准的抽象接口。通过这个接口,用户可以像处理普通文件一样,对硬件设 备进行打开(open)、关闭(close)、读写(read/write)等操作。通过分析和设计设 备驱动程序,可以深入理解Linux系统和进行系统开发。本文通过一个简单的例子 来说明设备驱动程序的设计。 1、程序清单 //MyDev.c 2000年2月7日编写 #ifndef __KERNEL__ #define __KERNEL__//按内核模块编译 #endif #ifndef MODULE #define MODULE//设备驱动程序模块编译 #endif #define DEVICE_NAME "MyDev" #define OPENSPK 1 #define CLOSESPK 2 //必要的头文件 #include //同kernel.h,最基本的内核模块头文件 #include //同module.h,最基本的内核模块头文件 #include //这里包含了进行正确性检查的宏 #include //文件系统所必需的头文件 #include //这里包含了内核空间与用户空间进行数据交换时的函数宏 #include //I/O访问 int my_major=0; //主设备号 static int Device_Open=0; static char Message[]="This is from device driver"; char *Message_Ptr; int my_open(struct inode *inode, struct file *file) {//每当应用程序用open打开设备时,此函数被调用 printk ("\ndevice_open(%p,%p)\n", inode, file); if (Device_Open) return -EBUSY;//同时只能由一个应用程序打开 Device_Open++; MOD_INC_USE_COUNT;//设备打开期间禁止卸载 return 0; } static void my_release(struct inode *inode, struct file *file)

摄像头基础知识介绍

一、摄像头结构和工作原理. 拍摄景物通过镜头,将生成的光学图像投射到传感器上,然后光学图像被转换成电信号,电信号再经过模数转换变为数字信号,数字信号经过DSP加工处理,再被送到电脑中进行处理,最终转换成手机屏幕上能够看到的图像。 数字信号处理芯片DSP(DIGITAL SIGNAL PROCESSING)功能:主要是通过一系列复杂的数学算法运算,对数字图像信号参数进行优化处理,并把处理后的信号通过USB等接口传到PC等设备。DSP结构框架: 1. ISP(image signal processor)(镜像信号处理器) 2. JPEG encoder(JPEG图像解码器) 3. USB device controller(USB设备控制器) 常见的摄像头传感器类型主要有两种, 一种是CCD传感器(Chagre Couled Device),即电荷耦合器。 一种是CMOS传感器(Complementary Metal-Oxide Semiconductor)即互补性金属氧化物半导体。 CCD的优势在于成像质量好,但是制造工艺复杂,成本高昂,且耗电高。在相同分辨率下,CMOS价格比CCD便宜,但图像质量相比CCD来说要低一些。CMOS影像传感器相对CCD具有耗电低的优势,加上随着工艺技术的进步,CMOS的画质水平也不断地在提高,所以目前市面上的手机摄像头都采用CMOS传感器。

手机摄像头的简单结构 滤光片有两大功用: 1.滤除红外线。滤除对可见光有干扰的红外光,使成像效果更清晰。 2.修整进来的光线。感光芯片由感光体(CELL)构成,最好的光线是直射进来,但为了怕干扰到邻近感光体,就需要对光线加以修整,因此那片滤光片不是玻璃,而是石英片,利用石英的物理偏光特性,把进来的光线,保留直射部份,反射掉斜射部份,避免去影响旁边的感光点. 二、相关参数和名词 1、常见图像格式 1.1 RGB格式: 传统的红绿蓝格式,比如RGB565,RGB888,其16-bit数据格式为5-bit R + 6-bit G + 5-bit B。G多一位,原因是人眼对绿色比较敏感。 1.2 YUV格式: luma (Y) + chroma (UV) 格式。YUV是指亮度参量和色度参量分开表示的像素格式,而这样分开的好处就是不但可以避免相互干扰,还可以降低色度的采样率而不会对图像质量影响太大。YUV是一个比较笼统地说法,针对它的具体排列方式,可以分为很多种具体的格式。 色度(UV)定义了颜色的两个方面─色调与饱和度,分别用CB和CR表示。其中,Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。而Cb反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。 主要的采样格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和 YCbCr 4:4:4。 1.3 RAW data格式: RAW图像就是CMOS或者CCD图像感应器将捕捉到的光源信号转化为数字信号的原始数据。RAW文件是一种记录了数码相机传感器的原始信息,同时记录了由相机拍摄所产生的一些元数据(Metadata,如ISO的设置、快门速度、光圈值、白平衡等)的文件。RAW是未经处理、也未经压缩的格式,可以把RAW概念化为“原始图像编码数据”或更形象的称

USB摄像头基础

USB 摄像头的工作原理

目录 1、简介 2、分类 3、工作原理 4、结构和组件 5、技术指标 6、发展趋势

一、简介 1.0常规介绍 2.0技术介绍

一、简介 1.0常规介绍 摄像头(CAMERA)又称为电脑像机、电脑眼等,它作为一种视频入设备,在过去广泛地应用于视频会议、远程医疗、实时监控等方面。 近年以来,随着互联网技术的发展,网络速度的不断提高,再加上感光成像器件技术的日渐成熟并大量用于摄像头的产品制造上,使得它们的价格低到可以令普通老百姓可以接受消费水平。同时这两年CAMERA被广泛应用于MOBILE PHONE,这样一来,更加促进了感光成像技术的进一步提 高,如:30万像素,130万像素,200万像素,300万像素等。

一、简介 2.0技术介绍 ? 2.0 Technology of presentation技术介绍 ?General Description ?简介 The camera module is a sensors on board module designed for mobile application ?where low power consumption and small size are of utmost importance. Proprietary sensor technology utilizes advanced algorithms to cancel Fixed Pattern Noise (FPN),eliminate smearing, and drastically reduce blooming. All required camera functions are programmable through the Serial Camera Control Bus (SCCB ) interface. The device can be programmed to provide image output in various fully processed ?and encoded formats.Application ?PC Camera/ Dual Mode, and Cellular phones ?Video conference equipment, Machine vision, Security camera, ?Biometrics, Digital Still Cameras

《Linux设备驱动开发详解:基于最新的Linux 4.0内核》19. Linux电源管理系统架构和驱动

以下电子书来源于宋宝华《Linux设备驱动开发详解:基于最新的Linux 4.0内核》第19章《Linux电源管理系统架构和驱动》 本章导读 Linux在消费电子领域的应用已经铺天盖地,而对于消费电子产品而言,省电是一个重要的议题。 本章将介绍Linux设备树(Device Tree)的起源、结构和因为设备树而引起的驱动和BSP 变更。 19.1节阐述了Linux电源管理的总体架构。 19.2~19.8节分别论述了CPUFreq、CPUIdle、CPU热插拔以及底层的基础设施Regulator、OPP以及电源管理的调试工具PowerTop。 19.9节讲解了系统Suspend to RAM的过程以及设备驱动如何提供对Suspend to RAM的支持。 19.10节讲解了设备驱动的Runtime suspend。 本章是相对《Linux设备驱动开发详解(第2版)》全新的一章内容,也是Linux设备驱动工程师必备的知识体系。

第十九章Linux电源管理系统架构和驱动 1.Linux电源管理全局架构 Linux电源管理非常复杂,牵扯到系统级的待机、频率电压变换、系统空闲时的处理以及每个设备驱动对于系统待机的支持和每个设备的运行时电源管理,可以说和系统中的每个设备驱动都息息相关。 对于消费电子产品来说,电源管理相当重要。因此,这部分工作往往在开发周期中占据相当大的比重,图19.1呈现了Linux内核电源管理的整体架构。大体可以归纳为如下几类: 1.CPU在运行时根据系统负载进行动态电压和频率变换的CPUFreq 2.CPU在系统空闲时根据空闲的情况进行低功耗模式的CPUIdle 3.多核系统下CPU的热插拔支持 4.系统和设备对于延迟的特别需求而提出申请的PM QoS,它会作用于CPUIdle的具体 策略 5.设备驱动针对系统Suspend to RAM/Disk的一系列入口函数 6.SoC进入suspend状态、SDRAM自刷新的入口 7.设备的runtime(运行时)动态电源管理,根据使用情况动态开关设备 8.底层的时钟、稳压器、频率/电压表(OPP模块完成)支撑,各驱动子系统都可能用 到 图19.1 Linux电源管理系统架构 2.CPUFreq驱动 CPUFreq子系统位于drivers/cpufreq目录,负责进行运行过程中CPU频率和电压的动态

摄像头基础知识介绍

摄像头基础知识介绍 二、摄像头市场状况 随着网络的发展,IT产品的日趋普及,摄像头也基本上渐渐成为计算机的标配,更成为新新人类上网不可缺少的一部分。市面上的摄像头品牌非常多,产品良莠不齐,给消费者选购造成一定的困难。 三、摄像头基本知识介绍 摄像头主要由数字信号处理芯片DSP、CMOS传感器、镜头三部分组成,下面的篇幅我们将对摄像头的各组成部分作详细的介绍。 四、摄像头硬件组成 1、数字信号处理芯片DSP 数字信号处理芯片DSP是摄像头的大脑,效果相同于计算机里的CPU,它的功能主要是通过一系列复杂的数学算法运算,对由CMOS传感器传来的数字图像信号进行优化处理,并把处理后的信号通过USB等接口传到PC等设备,是摄像头的核心设备。 DSP结构框架: (1. ISP(image signal processor)(镜像信号处理器) (2. JPEG encoder(JPEG图像解码器) (3. USB device controller(USB设备控制器) 中星微电子公司的301系列芯片是目前市面上最常见、效果最好的DSP芯片。(上图) 中星微(VIMICRO)301系列拥有影像光源自动增益补强技术,自动曝光、自动白平衡,色彩饱和度、对比度、边缘增强以及伽马矫正等先进的影像控制技术。动态画面流畅驱动,实时还原真实场景,层次表现力很强,图像变化十分平滑,视觉效果十分舒适。 2、CMOS传感器(SENSOR) CMOS传感器(SENSOR)、是一种半导体芯片,其表面包含有几十万到几百万的光电二极管。光电二极管受到光照射时,就会产生电荷。在采用CMOS为感光元器件的产品中,通过数字信号处理芯片DSP处理采用影像光源自动增益补强技术,自动亮度、白平衡控制技术,色饱和度、对比度、边缘增强以及伽马矫正等先进的影像控制技术。市场上的摄像头产品采用的CMOS 品牌主要有MICRON,HYNIX,TASC等这三家的市场占有率接近于100%。 目前主流的CMOS传感器(下图)

摄像头接口分类及基础知识

摄像头接口分类及基础 知识 Revised as of 23 November 2020

一、Camera 工作原理介绍 1.结构 2.工作原理 外部光线穿过 lens 后,经过 color filter 滤波后照射到 Sensor 面上, S ensor 将从 lens 上传导过来的光线转换为电信号,再通过内部的 AD 转换为数字信号。如果 Sensor 没有集成 DSP,则通过 DVP 的方式传输到 baseban d,此时的数据格式是 RAW DATA。如果集成了 DSP, RAW DATA 数据经过 AW B、则 color matrix、 lens shading、 gamma、 sharpness、 AE 和 de-noi se 处理,后输出 YUV 或者 RGB 格式的数据。 最后会由 CPU 送到 framebuffer 中进行显示,这样我们就看到 camera 拍摄到的景象了。 3. YUV 与 YCbCr . 一般来说,camera主要是由lens 和 sensor IC 两部分组成,其中有的 senso r IC 集成了 DSP,有的没有集成,但也需要外部 DSP 处理。细分的来讲,ca mera 设备由下边几部分构成: 1) lens(镜头)一般 camera 的镜头结构是有几片透镜组成,分有塑胶透镜(Plastic)和玻璃透镜(Glass) ,通常镜头结构有:1P,2P,1G1P,1G3P,2G2P,4 G 等。 2) sensor(图像传感器) Senor 是一种半导体芯片,有两种类型:CCD(Cha rge Coupled Device)即电荷耦合器件的缩写和 CMOS(Complementary Metal-Oxide Semiconductor)互补金属氧化物半导体。Sensor 将从 lens 上传导过

从零开始搭建Linux驱动开发环境

参考: 韦东山视频第10课第一节内核启动流程分析之编译体验 第11课第三节构建根文件系统之busybox 第11课第四节构建根文件系统之构建根文件系统韦东山书籍《嵌入式linux应用开发完全手册》 其他《linux设备驱动程序》第三版 平台: JZ2440、mini2440或TQ2440 交叉网线和miniUSB PC机(windows系统和Vmware下的ubuntu12.04) 一、交叉编译环境的选型 具体的安装交叉编译工具,网上很多资料都有,我的那篇《arm-linux- gcc交叉环境相关知识》也有介绍,这里我只是想提示大家:构建跟文件系统中所用到的lib库一定要是本系统Ubuntu中的交叉编译环境arm-linux- gcc中的。即如果电脑ubuntu中的交叉编译环境为arm-linux-

二、主机、开发板和虚拟机要三者互通 w IP v2.0》一文中有详细的操作步骤,不再赘述。 linux 2.6.22.6_jz2440.patch组合而来,具体操作: 1. 解压缩内核和其补丁包 tar xjvf linux-2.6.22.6.tar.bz2 # 解压内核 tar xjvf linux-2.6.22.6_jz2440.tar.bz2 # 解压补丁

cd linux_2.6.22.6 patch –p1 < ../linux-2.6.22.6_jz2440.patch 3. 配置 在内核目录下执行make 2410_defconfig生成配置菜单,至于怎么配置,《嵌入式linux应用开发完全手册》有详细介绍。 4. 生成uImage make uImage 四、移植busybox 在我们的根文件系统中的/bin和/sbin目录下有各种命令的应用程序,而这些程序在嵌入式系统中都是通过busybox来构建的,每一个命令实际上都是一个指向bu sybox的链接,busybox通过传入的参数来决定进行何种命令操作。 1)配置busybox 解压busybox-1.7.0,然后进入该目录,使用make menuconfig进行配置。这里我们这配置两项 一是在编译选项选择动态库编译,当然你也可以选择静态,不过那样构建的根文件系统会比动态编译的的大。 ->Busybox Settings ->Build Options

USB摄像头的工作原理

USB摄像头的工作原理 2010-04-06 15:03 摄像头的工作原理 摄像头的工作原理大致为:景物通过镜头(LENS)生成的光学图像投射到图像传感器表面上,然后转为电信号,经过A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(DSP)中加工处理,再通过USB接口传输到电脑中处理,通过显示器就可以看到图像了。 注1:图像传感器(SENSOR)是一种半导体芯片,其表面包含有几十万到几百万的光电二极管。光电二极管受到光照射时,就会产生电荷。 注2:数字信号处理芯片DSP(DIGITAL SIGNAL PROCESSING)功能:主要是通过一系列复杂的数学算法运算,对数字图像信号参数进行优化处理,并把处理后的信号通过USB等接口传到PC等设备。 DSP结构框架: 1. ISP(image signal processor)(镜像信号处理器) 2. JPEG encoder(JPEG图像解码器) 3. USB device controller(USB设备控制器) 四、摄像头的主要结构和组件 从摄像头的工作原理就可以列出摄像头的主要结构和组件: 1、主控芯片(详情请参阅:《影响摄像头的关键

元器件是什么?》) 2、感光芯片(详情请参阅:《影响摄像头的关键元器件是什么?》) 3、镜头(详情请参阅:《影响摄像头的关键元器件是什么?》) 4、电源 摄像头内部需要两种工作电压:3.3V和2.5V,因此好的摄像头内部电源也是保证摄像头稳定工作的一个因素。 五、摄像头的一些技术指标 1、图像解析度/分辨率(Resolution): ●SXGA(1280 x1024)又称130万像素 ●XGA(1024 x768)又称80万像素 ●SVGA(800 x600)又称50万像素 ●VGA(640x480)又称30万像素(35万是指648X488) ●CIF(352x288) 又称10万像素 ●SIF/QVGA(320x240) ●QCIF(176x144) ●QSIF/QQVGA(160x120) 2、图像格式(image Format/ Color space) RGB24,I420是目前最常用的两种图像格式。 ●RGB24:表示R、G、B三种颜色各8bit,最多可表现256级浓淡, 从而可以再现256*256*256种颜色。 ●I420:YUV格式之一。 ●其它格式有: RGB565,RGB444,YUV4:2:2等。 3、自动白平衡调整(AWB) 定义:要求在不同色温环境下,照白色的物体,屏幕中的图像应也是白色的。 色温表示光谱成份,光的颜色。色温低表示长波光成分多。 当色温改变时,光源中三基色(红、绿、蓝)的比例会发生变化, 需要调节三基色的比例来达到彩色的平衡,这就是白平衡调节的实际。 4、图像压缩方式 JPEG:(joint photographic expert group)静态图像压缩方式。 一种有损图像的压缩方式。压缩比越大,图像质量也就越差。当图像精度要求 不高存储空间有限时,可以选择这种格式。目前大部分数码相机都使用JPEG格式。 5、彩色深度(色彩位数) 反映对色彩的识别能力和成像的色彩表现能力,实际就是A/D转换器的量

读取usb摄像头的程序简介

使用MATLAB进行USB摄像头的编程 编程 2009-05-19 08:52:07 阅读475 评论0 字号:大中小订阅 在CSDN上看了一篇“如何使用MATLAB进行USB2.0摄像头的编程”的博文,感觉不错,现转摘如下: 整个过程我们需要做如下几件事情: 1、查询USB2.0Camera 的具体参数(imaqhwinfo) 2、创建视频输入对象(videoinput) 3、图像预览和显示(preview、stoppreview、closepreview和image) 4、获取视频图像(getsnapshot) 5、图像获取设备的获取和设置(get和set) 6、关闭视频对象(delete) 在正式讲解之前,我想说明下几个个在图像获取工具箱中的术语: 图像获取设备:比如摄像头、扫描仪 图像获取适配器:主要的目的是通过驱动在Matlab和图像获取设备之间传递信息 ROI:region-of-interest 感兴趣区域 在说说几个常用的函数,我们这里只是说明它的作用,具体如何使用参考帮助系统 getselectedsource imaqfind isvalid peekdata getdata imaqmontage 给我们一个摄像头我们必须知道他的相关参数,才可能进行我们的编程下。当然我们可以查询商家手册,但是那个累不累人呀。 Matlab的图像获取工具箱为我提供了imaqhwinfo(),来获取PC上以安装的图像获取硬件信息 没有输入参数时,返回一个结构体,它包含了系统中存在的适配器和Matlab相关的版本信息(第一次我们一般使用这个) 代码: >> info=imaqhwinfo

如何实现Linux设备驱动模型

文库资料?2017 Guangzhou ZHIYUAN Electronics Stock Co., Ltd. 如何实现Linux 设备驱动模型 设备驱动模型,对系统的所有设备和驱动进行了抽象,形成了复杂的设备树型结构,采用面向对象的方法,抽象出了device 设备、driver 驱动、bus 总线和class 类等概念,所有已经注册的设备和驱动都挂在总线上,总线来完成设备和驱动之间的匹配。总线、设备、驱动以及类之间的关系错综复杂,在Linux 内核中通过kobject 、kset 和subsys 来进行管理,驱动编写可以忽略这些管理机制的具体实现。 设备驱动模型的内部结构还在不停的发生改变,如device 、driver 、bus 等数据结构在不同版本都有差异,但是基于设备驱动模型编程的结构基本还是统一的。 Linux 设备驱动模型是Linux 驱动编程的高级内容,这一节只对device 、driver 等这些基本概念作介绍,便于阅读和理解内核中的代码。实际上,具体驱动也不会孤立的使用这些概念,这些概念都融合在更高层的驱动子系统中。对于大多数读者可以忽略这一节内容。 1.1.1 设备 在Linux 设备驱动模型中,底层用device 结构来描述所管理的设备。device 结构在文件中定义,如程序清单错误!文档中没有指定样式的文字。.1所示。 程序清单错误!文档中没有指定样式的文字。.1 device 数据结构定义 struct device { struct device *parent; /* 父设备 */ struct device_private *p; /* 设备的私有数据 */ struct kobject kobj; /* 设备的kobject 对象 */ const char *init_name; /*设备的初始名字 */ struct device_type *type; /* 设备类型 */ struct mutex mutex; /*同步驱动的互斥信号量 */ struct bus_type *bus; /*设备所在的总线类型 */ struct device_driver *driver; /*管理该设备的驱动程序 */ void *platform_data; /*平台相关的数据 */ struct dev_pm_info power; /* 电源管理 */ #ifdef CONFIG_NUMA int numa_node; /*设备接近的非一致性存储结构 */ #endif u64 *dma_mask; /* DMA 掩码 */ u64 coherent_dma_mask; /*设备一致性的DMA 掩码 */ struct device_dma_parameters *dma_parms; /* DMA 参数 */ struct list_head dma_pools; /* DMA 缓冲池 */ struct dma_coherent_mem *dma_mem; /* DMA 一致性内存 */ /*体系结构相关的附加项*/ struct dev_archdata archdata; /* 体系结构相关的数据 */ #ifdef CONFIG_OF

Linux设备驱动编程模型(基本编)

Linux设备驱动程序设计 15年来,Linux从一份大学生的作业演变成了Windows最强劲的竞争对手,在网络、企业、政府和 消费电子市场中逐步占据了重要的地位,在有些领域甚至成了最主要的角色。15年来,Linux在欧洲、在美国、在亚洲向微软发起强劲挑战,以至微软CEO鲍尔默一度相信微软会被Linux击败。 随着Linux进入嵌入式设备领域后,关注和投身Linux开发的开发人员越来越多,但目前市面上介绍Linux开发的资料却非常稀少,很多开发人员感到入行无门,我参照《Linux驱动开发详解》(华清远见,宋宝华)以及其他一些参考资料,编写了本教案,由于时间仓促,没有对应制作相关的ppt,请同学们谅解,希望能给大家一些帮助。 在讲课之前,我们预备把所有的参考资料都列举出来,详细的知识点请大家去对应查找我们所列出的 参考书籍。 1、《Linux程序设计》(人民邮电出版社,陈健等译第3版本)主要关注第18章 2、《Linux驱动开发详解》(华清远见,宋宝华) 3、《嵌入式设计及Linux驱动开发指南-基于ARM9处理器(第2版)》(电子工业出版社,孙天泽) 4、《嵌入式软件调试技术》(电子工业出版社,罗克露等) 5、《嵌入式Linux应用开发详解》(电子工业出版社,洗进等) 6、《嵌入式Linux程序设计案例与实验教程》(机械工业出版社,俞辉) 7、《嵌入式系统课程设计》(机械工业出版社,陈虎等) 还有一些互连网资料,这里就不一一列举了。请大家尽量去找这些资料进行学习。 第一讲Linux设备驱动编程之引言 目前,Linux软件工程师大致可分为两个层次: (1)Linux应用软件工程师(Application Software Engineer):主要利用C库函数和Linux API进行应用软件的编写; (2)Linux固件工程师(Firmware Engineer):主要进行Bootloader、Linux的移植及Linux设备驱动程序的设计。 一般而言,固件工程师的要求要高于应用软件工程师的层次,而其中的Linux设备驱动编程又是Linux 程序设计中比较复杂的部分,究其原因,主要包括如下几个方面: (1)设备驱动属于Linux内核的部分,编写Linux设备驱动需要有一定的Linux操作系统内核基础; (2)编写Linux设备驱动需要对硬件的原理有相当的了解,大多数情况下我们是针对一个特定的嵌 入式硬件平台编写驱动的; (3)Linux设备驱动中广泛涉及到多进程并发的同步、互斥等控制,容易出现bug; (4)由于属于内核的一部分,Linux设备驱动的调试也相当复杂。 目前,市面上的Linux设备驱动程序参考书籍非常稀缺,少有的经典是由Linux社区的三位领导者Jonathan Corbet、Alessandro Rubini、Greg Kroah-Hartman编写的《Linux Device Drivers》(目前该书

linux设备驱动程序开发流程

一. Linux device driver 的概念 系统调用是***作系统内核和应用程序之间的接口,设备驱动程序是***作系统 内核和机器硬件之间的接口.设备驱动程序为应用程序屏蔽了硬件的细节,这样 在应用程序看来,硬件设备只是一个设备文件, 应用程序可以象***作普通文件 一样对硬件设备进行***作.设备驱动程序是内核的一部分,它完成以下的功能: 1.对设备初始化和释放. 2.把数据从内核传送到硬件和从硬件读取数据. 3.读取应用程序传送给设备文件的数据和回送应用程序请求的数据. 4.检测和处理设备出现的错误. 在Linux***作系统下有两类主要的设备文件类型,一种是字符设备,另一种是 块设备.字符设备和块设备的主要区别是:在对字符设备发出读/写请求时,实际 的硬件I/O一般就紧接着发生了,块设备则不然,它利用一块系统内存作缓冲区, 当用户进程对设备请求能满足用户的要求,就返回请求的数据,如果不能,就调用请求函数来进行实际 的I/O***作.块设备是主要针对磁盘等慢速设备设计的,以免耗费过多的CPU时间 来等待. 已经提到,用户进程是通过设备文件来与实际的硬件打交道.每个设备文件都 都有其文件属性(c/b),表示是字符设备还蔤强樯璞?另外每个文件都有两个设 备号,第一个是主设备号,标识驱动程序,第二个是从设备号,标识使用同一个 设备驱动程序的不同的硬件设备,比如有两个软盘,就可以用从设备号来区分

他们.设备文件的的主设备号必须与设备驱动程序在登记时申请的主设备号 一致,否则用户进程将无法访问到驱动程序. 最后必须提到的是,在用户进程调用驱动程序时,系统进入核心态,这时不再是抢先式调度.也就是说,系统必须在你的驱动程序的子函数返回后才能进行其他的工作.如果你的驱动程序陷入死循环,不幸的是你只有重新启动机器了,然后就是漫长的fsck.//hehe (请看下节,实例剖析) 读/写时,它首先察看缓冲区的内容,如果缓冲区的数据 如何编写Linux***作系统下的设备驱动程序 Roy G 二.实例剖析 我们来写一个最简单的字符设备驱动程序.虽然它什么也不做,但是通过它 可以了解Linux的设备驱动程序的工作原理.把下面的C代码输入机器,你就会获得一个真正的设备驱动程序.不过我的kernel是2.0.34,在低版本的kernel 上可能会出现问题,我还没测试过.//xixi #define __NO_VERSION__ #include

相关文档
最新文档