




免费预览已结束,剩余60页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本 科 生 毕 业 论 文(设计) 题 目 基于三星嵌入式平台的传感器驱动 开发及测试 Sensor Driver Development and Test Based On Samsung Embedded Platform 姓名学号 吴陈炜 3080102786 指导教师 金心宇 教授 年级专业 08级信息与通信工程 所在学院 信息与电子工程学系 摘要 以平板电脑、智能手机为代表嵌入式便携设备是时下主流的消费类电子产品。与PC平台不同,嵌入式便携设备通常采用以Linux内核为基础的Android等更加适合其处理器架构的操作系统。传感器设备是便携设备中提高用户体验的重要组成部分。Android支持加速度传感器、磁传感器、陀螺仪传感器组成的九轴传感器。九轴传感器在Linux内核层通过I2C协议与处理器通信,向上层提供数据完成数据融合。TC4项目是Samsung半导体中国研究所针对Exynos4x12多核应用处理器的开发成立的项目。该项目将在Samsung的平板电脑平台上首次加入九轴传感器。本文就将研究在TC4平台上九轴传感器驱动的实现方法,并且在硬件上得到验证,最终给出测试结果。关键词:嵌入式系统 设备驱动 九轴传感器 AbstractTablet , smart phone on behalf of portable embedded devices, have been popular consumer electronic products. Different from personal computer, portable embedded devices tend to ship operating systems which are more suitable to the architecture of application processor, such as Android, a Linux kernel based OS.Sensors are important parts of portable devices which could improve user experience. Android supports nine-axis sensor that is composed of a accelerometer, a magnetic field and a gyroscope. In the kernel layer based on Linux in Android OS, the nine-axis sensor communicates with the processor through I2C protocol providing raw data for the data fusion in upper layers.TC4 is the project established in Samsung Semiconductor China Research Center for the design and solution of a multi-core processor named Exynos 4x12. In this project 9-axis sensor will be firstly applied in Samsung tablet. This paper studies the method of driver for 9-axis sensor, and shows the test results obtained in hardware verification.Keywords: Embedded system Device driver 9-axis sensor目录第一章 引言11.1背景11.1.1 嵌入式系统的广泛应用11.1.2 传感器设备的应用21.2 最新研究成果21.2.1 几种常见的嵌入式开发平台21.2.2 传感器设备的应用现状41.3 本文的主要内容51.3.1 在TC4平台上实现九轴传感器驱动51.3.2 研究的重点和难点61.4 论文研究的目的:在TC4平台上实现九轴传感器驱动7第二章 TC4平台简介82.1基于Exynos4x12处理器的tablelet开发平台82.2 TC4项目BSP简介92.2.1交叉编译器92.2.2 Bootloader程序92.2.3嵌入式操作系统102.2.4调试、下载工具102.2.5开发板上设备的驱动程序122.2.6开发板相关的技术文档132.3 Linux开发环境132.3.1 基于Linux开发环境概述132.3.2 基于Linux的文本编辑器142.3.3 基于Linux的编译器和调试器142.3.4多用户开发环境Git162.4 本章小结16第三章 Linux字符型设备驱动方法173.1字符设备器驱动程序基本概念173.2字符设备的数据结构193.2.1 file_operations结构体193.2.2 file结构体203.2.3 inode结构体203.3 字符设备的高级操作223.3.1 ioctl操作223.3.2 poll操作223.4 Linux字符设备驱动程序的组成233.5 本章小结24第四章 Linux中的I2C设备驱动254.1 I2C总线概述254.2 I2C的硬件结构254.3 I2C的软件架构274.3.1 I2C协议的GPIO口模拟284.3.2 Linux下的I2C体系284.4 本章小结34第五章 九轴传感器的设备驱动程序345.1 bma250的设备驱动程序345.1.1模块化编程子程序355.1.2装载和卸载函数的实现365.1.3.bma250驱动的探测和移除子程序365.1.4 bma250的配置函数375.1.5 bma250读函数的实现405.1.6 bma250电源管理和配置函数的实现405.2.hmc5883的驱动程序425.3.mpu3050的驱动程序435.4 本章小结45第六章 传感器性能测试及结果466.1 测试环境的搭建466.2 九轴传感器的测试496.2.1使用app软件测试九轴传感器性能496.2.1使用自己编写的应用程序测试加速度传感器506.2.2 使用app软件测试磁传感器和陀螺仪性能516.3 本章小结53第七章 总结与展望54第一章 引言1.1背景1.1.1 嵌入式系统的广泛应用 嵌入式系统是计算机的一种应用形式,通常指嵌入在宿主设备中的微处理机系统。它所强调的要点是:计算机不为表现自己,而是辅助它所在的宿主设备,使得宿主设备的功能智能化、网络化。 公认的,我们可以把嵌入式系统定义为一种以计算机技术为基础,面向应用的,软硬件可裁剪,适用于系统对功能、成本、体积、功耗有严格要求的专用计算机系统。它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,用于实现它对其他设备的控制、监视或管理功能。 随着现代信息技术和Internet技术的快速发展,各种各样的数字化产品得到普及;嵌入式系统已经渗透到了生活的各个角落手机、平板电脑、电子商务、航空航天、军事装备等等(如图1.1所示)。嵌入式系统有着广泛的应用前景和发展潜力,嵌入式系统技术已经成为了最热门的技术之一。1图1.1 嵌入式系统的应用 平板电脑(Tablet),是一种小型、方便携带的个人电脑,以触摸屏作为基本的输入设备。平板电脑是介于手机和笔记本电脑之间的一种嵌入式设备。平板电脑的命名由微软公司在2002年秋季提出,但由于当时的硬件技术水平还未成熟,使得平板电脑并不受人们的关注。 2010年1月27日,Apple公司解决了电容触摸屏的技术问题,发明了多点触摸技术,推出iPad,开创了平板电脑的时代。从此,平板电脑得到了有力的推广,享有非常高的市场规模。世界各大IT厂商都开始已经开始拓展平板电脑业务。对嵌入式系统的开发,准确地来说是对平板电脑的开发,成为了工业界研究的热点。 1.1.2 传感器设备的应用 在主流的平板电脑和只能手机当中,加速度传感器和磁传感器已经成为标配。 加速度传感器通过MEMS器件向处理器提供三个方向的加速度数值。经过一系列的算法之后,在手势识别、环境感知、游戏控制、磁盘保护等方面,为智能手机带来了许多前所唯有的应用。 磁传感器的本质是一个电子罗盘,最主要的功能就是导航和定位。它通过霍尔传感器来检测地球磁场倾角,而磁传感器能提供精确的3D行进方向。自2010年iPhone4采用陀螺仪起,陀螺仪在手机中被迅速采用。陀螺仪的应用包括提升各种“Motion Control”界面的用户体验、图形稳定、游戏和导航等,成为提升高端手机体验的重要配置。 在许多应用方案中,三轴加速度传感器、三轴陀螺仪、三轴磁传感器已经被集成到了一起,组成了九轴感测组件。比如整合加速计、陀螺仪和磁感应计,并均衡地利用三者的各自优点,可在在导航解决方案的核心部分实现一个所谓的惯性测量单元(IMU)。整合MEMS加速计、陀螺仪和地磁感应计的模块正在进入更多市场。 1.2 最新研究成果1.2.1 几种常见的嵌入式开发平台(1)ARM9开发平台三星2410平台 三星2410开发平台采用了基于ARM9架构的应用处理器S3C2410A,在尽可能小的电路版图上集成了64MSDRAM、64MNandFlash、音频输入与输出、以太网卡、USBHost、USBSlave、触摸屏、标准串口、液晶显示屏、调试口、红外通信收发器、SD/MMC卡插座、A/D和D/A转换模块等丰富的硬件资源,并且引出了CPU的50根信号引脚,可以作为用户接口以便进行硬件扩展。2S3C2410应用处理器是韩国三星公司设计的一款基于ARM920T内核的16/32位RISC嵌入式微处理器,主要面向手持设备(比如智能手机、平板电脑等)以及高性价比、低功耗的应用。运行的频率可以达到203MHz。ARM920T内核由ARM9TDMI、MMU(存储管理单元)和高速缓存三部分组成。其中MMU可以管理虚拟内存,16KB的地址和16KB的高速Cache组成了高速缓存。ARM920T具有两个协处理器:CP14和CP15。CP14用于调试控制,CP15用于存储系统控制以及测试控制。在外设方面,S3C2410具有4个外部请求线的DMA。3个通用异步串行端口、2通道SPI、一个多主I2C总线,一个I2S总线控制器、两个USBHost、一个USB Device、117个通用IO口。S3C2410平台许多开发商和培训机构使用的经典开发平台,开发者可以充分发挥想象力,设计制造出小体积,高性能的嵌入式应用产品。(2)ARM11开发平台三星6410平台 与S3C2410一样,S3C6410也是三星公司的一款应用处理器,与S3C2410不同的是,6410处理器基于ARM1176JZF-S内核。相对于过去的芯片,外设更加完善,而且运行频率高达667MHz。6410处理器包括分立的16KB指令和16KB数据组成的Cache、16KB指令和16KB数据的TCM。还包括一个完全的MMU来处理虚拟存储管理。ANR1176JZF-S的架构能支持JAVA加速。S3C6410有极佳的外部存储器接口能力,可以满足高端的通信业务带宽的要求。该处理器具有双总线架构,一路用于内存总线、一路用于Flash总线,可以并行地访问。DRAM端口能配置为移动DDR或标准SDRAM。Flash/ROM端口支持NAND FLASH、NOR FLASH、CF、OneNAND和ROM类型外部存储器。为消减系统总成本和增强总体功能,S3C6410集成了许多硬件外设,比如摄像头接口、TFT真彩色LCD控制器、4通道UART、电源系统管理、32通道DMA、4通道定时器、I2C总线接口、I2C总线接口、通用I/O接口、USBHost、USBOTG、3通道SD/MMC Host控制器以及时钟生成生PLL。该处理器采用了90nmCMOS工艺,它低功耗、简洁、精美且全静态的设计使得S3C6410非常适合低成本、低功耗的应用。这些强大的功能使得S3C6410可以支持许多工业标准的操作系统。1.2.2 传感器设备的应用现状 ANDROID4.0操作系统中,Google提供了11中传感器供应用层使用。包括返回x、y、z三轴的加速度数值的加速度传感器(G-sensor);返回x、y、z三轴的环境磁场数据的磁力传感器(M-sensor);返回三轴的角度数据,方向数据的单位是角度的方向传感器(O-sensor);返回x、y、z三轴的角加速度数据的陀螺仪传感器(Gyro-sensor);检测实时的光线强度的光线感应传感器;返回当前的压强的压力传感器;返回当前的温度的温度传感器;检测物体与手机的距离的接近传感器;输出重力数据的重力传感器(GV-sensor);返回减去重力加速度之后加速度值的线性加速度传感器(LA-sensor)以及返回旋转矢量的旋转矢量传感器(RV-sensor)。一下是Android4.0源码中对系统支持的11种传感器的宏定义及注释。#define SENSOR_TYPE_ACCELEROMETER 1 /加速度#define SENSOR_TYPE_MAGNETIC_FIELD 2 /磁力#define SENSOR_TYPE_ORIENTATION 3 /方向#define SENSOR_TYPE_GYROSCOPE 4 /陀螺仪#define SENSOR_TYPE_LIGHT 5 /光线感应#define SENSOR_TYPE_PRESSURE 6 /压力#define SENSOR_TYPE_TEMPERATURE 7 /温度#define SENSOR_TYPE_PROXIMITY 8 /接近#define SENSOR_TYPE_GRAVITY 9 /重力#define SENSOR_TYPE_LINEAR_ACCELERATION 10/线性加速度#define SENSOR_TYPE_ROTATION_VECTOR 11/旋转矢量 利用这些传感器我们可以制作出各种有趣的应用程序和游戏。在这些传感器中,比较重要和常用的,也是笔者在本项目中参与驱动开发的传感器是加速度计传感器、磁传感器和陀螺仪。1.3 本文的主要内容1.3.1 在TC4平台上实现九轴传感器驱动 ANDROID4.0操作系统中,Google提供了11中传感器供应用层使用。包括返回x、y、z三轴的加速度数值的加速度TC4平台是SSCR(三星半导体中国研究所)为了开发以多核处理器Exynos4x12为核心的平板电脑手机的嵌入式系统开发平台。 根据摩尔定律计算机以每18个月提升一倍的速度不断在提高性能,向着速度更快、效率更高、性能更强的方向发展。但由于受到器件的限制,在集成电路尺寸小到一定程度的时候,我们必须考虑到量子效应。因此,单独从提供一个内核的运行效率的方法是有局限性的。现代处理器正在朝着多个处理器核心并行运算的方向发展。 本项目采用Exynos系列处理器便是多核处理器。在处理器的名称中,x表示核心的数量,即4212表示双核处理器;4412表示4核处理器。Exynos 4212是三星公司于2011年9月发布的新型双核处理器。该处理器采用32 nm制程,拥有两枚主频为1.5 GHz的Cortex-A9通用处理核心,拥有32/32 KB I/D Cache, 1 MB L2 Cache,并且集成ARM Mali 400 MP图形处理核心。在视频方面,Exynos 4210支持单路WXGA和双路WSVGA视频输出,支持HDMI v1.3a高清标准,可以拍摄1080p、30fps标准高清视频;Exynos 4210提供了6.4GB/s的内存带宽,支持LPDDR2/DDR2/DDR3内存。 Exynos 4412则是今年年初才推出的四核处理器,拥有32nm HKMG(高K金属栅极技术)制程,支持双通道LPDDR2 1066。新的32nm HKMG技术可以帮助降低功耗,和其前代比,会减低20% 的功耗。Exynos 4412四核处理器仍然集成Mali-400MP图形处理器,但三星公司已将这颗图形处理器主频由此前的266MHz提升至400MHz,新闻稿指出会比现有的双核机型整体性能提升60%,图像处理提升 50%。3在传感器方面,TC4平台就之前的tablet而言,将新加入陀螺仪传感器。使得传感系统更加准确。从而带来更加的用户体验。总之,TC4平台相对于之前的三星嵌入式开发平台,在处理器性能上提升了一个台阶。第一、从之前的单核处理器升级到了多核处理器;第二、处理器运行主频更高,达到了1.5GHz;第三、在外设方面更加丰富,特别是与传感器相关的I2C接口数量上,达到了8个之多。这些都使得TC4平台的总体性能达到了世界领先的水平。传感器(G-sensor);返回x、y、z三轴的环境磁场数据的磁力传感器(M-sensor);返回三轴的角度数据,方向数据的单位是角度的方向传感器(O-sensor);返回x、y、z三轴的角加速度数据的陀螺仪传感器(Gyro-sensor);检测实时的光线强度的光线感应传感器;返回当前的压强的压力传感器;返回当前的温度的温度传感器;检测物体与手机的距离的接近传感器;输出重力数据的重力传感器(GV-sensor);返回减去重力加速度之后加速度值的线性加速度传感器(LA-sensor)以及返回旋转矢量的旋转矢量传感器(RV-sensor)。4 利用这些传感器我们可以制作出各种有趣的应用程序和游戏。在这些传感器中,比较重要和常用的,也是笔者在本项目中参与驱动开发的传感器是加速度计传感器、磁传感器和陀螺仪。1.3.2 研究的重点和难点 在主流的平板电脑和只能手机当中,加速度传感器和磁传感器已经成为标配。 加速度传感器通过MEMS器件向处理器提供三个方向的加速度数值。经过一系列的算法之后,在手势识别、环境感知、游戏控制、磁盘保护等方面,为智能手机带来了许多前所唯有的应用。 磁传感器的本质是一个电子罗盘,最主要的功能就是导航和定位。它通过霍尔传感器来检测地球磁场倾角,而磁传感器能提供精确的3D行进方向。自2010年iPhone4采用陀螺仪起,陀螺仪在手机中被迅速采用。陀螺仪的应用包括提升各种“Motion Control”界面的用户体验、图形稳定、游戏和导航等,成为提升高端手机体验的重要配置。 在许多应用方案中,三轴加速度传感器、三轴陀螺仪、三轴磁传感器已经被集成到了一起,组成了九轴感测组件。比如整合加速计、陀螺仪和磁感应计,并均衡地利用三者的各自优点,可在在导航解决方案的核心部分实现一个所谓的惯性测量单元(IMU)。整合MEMS加速计、陀螺仪和地磁感应计的模块正在进入更多市场。1.4 论文研究的目的:在TC4平台上实现九轴传感器驱动 在TC4项目中,开发组分为BSP(板极支持包)部门、Midware(中间件)部门、Hardware(硬件)部门和SQA(软件质量保证)部门等。本课题涉及到的驱动程序设计属于BSP部分。TC4平台将采用最新的Android4.0操作系统,这在业界是领先的。全新的4.0版本的操作系统,将带来全新的UI人性化体验界面、提供针对多核处理器的优化功能、全面提升运行速度;最重要的是,Android4.0将统一智能手机和平板电脑系统:谷歌新一代安卓系统Ice Cream Sandwich将只有一个版本,同时支持智能手机、平板电脑,这将解决安卓 3.x系统和安卓 2.x操作系统版本分化的问题,开发者为平板电脑和智能手机开发的应用也将可以通用。 本论文的目的就是首次在Exynos4x12的多核处理器tablet平台下实现九轴传感器的驱动。使得TC4平台下,Android4.0操作系统能使用九轴传感器。在实现的方法上,由于传感器要求的传输速率并不高,因此在通信协议上考虑使用I2C的接口方式。Exynox4x12芯片在内部已经集成了I2C的模块。所以只需要操控内部的控制器就可以实现数据的传输。 Android4.0系统在底层采用的是Linux3.0的内核。和之前的Linux内核一样,它支持I2C的体系结构,在内核代码中已经定义好了规范的结构体和接口函数。开发人员需要理清各个结构之间的关系,正确调用接口函数,来实现对设备的驱动,使得处理器可以和器件通信。 在选择器件的时候,器件生产商会提供一些解决方案。这些方案是编写驱动程序的参考材料。和操作系统抽象封装下层一样。驱动程序也会提供一些操作系统之上与硬件无关的函数库。正确使用这些函数库,是编写正确驱动的关键。总之,在三星平板电脑的开发平台上首次实现九轴传感器是本课题的重点和创新点,解决新版本Android的兼容性问题是本课题的难点。第2章 TC4平台简介2.1基于Exynos4x12处理器的tablelet开发平台 随着智能手机、平板电脑等便携式手持设备的快速发展,应用处理器(AP)被广泛应用到各种嵌入式系统当中。应用处理器市场也以每年10%左右的增长率不断壮大。笔者实习所在的三星公司,是世界领先的应用处理器供应商。其芯片因性能优越,被联想、富士通、英华达等多家移动终端制造商使用。TC4平台是面向平板电脑的开发平台,采用的主处理器是Exynos4x12。是三星公司推出多核处理器(x表示内核的数量,x为2时表示双核,x为4时表示4核)。下面以4212为例做简单介绍。Exynos4212采用32纳米高-K 金属栅极(HK/MG)低功耗工艺。双核Exynos 4212为移动设备系统架构师提供了一个新的解决方案,支持高品质用户体验及智能手机和平。4212处理器内置两个Cortex-A9 1GHz核心和1MB二级缓存,拥有1G LP DDR2 800内存,并内置有Mali-400 MP图形处理芯片,绑定8GB存储卡。其他配置方面,该芯片包含了TFT24位真彩色LCD控制器、相机接口、MIPI DSI、CSI-2、电源管理、嵌入式GPS和GLONASS、MIPIslim接口管理、MIPI HSI等;还包含有4个UART、24通道DMA、定时器、通用IP口、3个I2S、S/PDIF输出、8个IIC总线接口、3个HS-SPI、2个USB2.0、4个SD主机及高速多媒体卡接口和四个锁相环时钟等。大大提高了整体功能。4212常采用双核架构,五倍的图形性能的提高和广泛的内存带宽使其能够满足消费者对栩栩如生的多媒体内容立即地、有反应般地传输的需求。此外,4210支持先进的多媒体功能,诸如视频编码器/解码器,使消费者用每秒30帧的速度录制和播放1080P全高清的高分辨率图像。还4212提供了一个来源广泛的高速内存接口,包括低功耗DDR2,DDR3和一个非易失性内存主机。多种编解码器是可提供给用户环境更方便的利用的,尤其是作为多媒体来源不同的用户。对于4412,它与4212具有相似的特征,依然采用了1.5GHz的主频,但是核心的数量从双核上升到了四核。值得一提的是,在传感器支持方面,TC4平台在传感器的支持方面非常领先,不但支持光传感器、加速度传感器等。还可以加入陀螺仪、磁传感器等新型传感器,实现更加丰富多彩的应用。2.2 TC4项目BSP简介 BSP(Board Support Packet)是针对嵌入式系统开发用的工具包,里面包含了针对开发板的各种开发软件、工具和文档等等。在本课题涉及的TC4项目中,具体的内容如下:2.2.1交叉编译器 本项目使用arm-2009q3交叉编译器,能将C语言的源程序编译成机器可以识别的二进制文件,生成镜像供板子开发使用。对于小的程序,可以通过arm-2009q3 hello.c -o hello命令来编译;当工程文件复杂时,则通常使用Makefile文件中的CC/CFLAGS选项来配置编译器的类型,使用make命令就能快捷编译。2.2.2 Bootloader程序Bootloader程序是用来完成系统启动和系统软件加载工作的程序。它完成处理器和周边电路正常运行所需要的初始化工作,屏蔽了底层硬件的差异,使上层软件的编写和移植更加方便。5TC4项目使用了Uboot模板,通过修改at91rm9200dk.h代、更改Makefile文件,可以编译生成能启动到开发板上的bootloader镜像。本项目的bootloader原理框图如下,bootloader可以大致分成4个步骤,bl1(Bootloader Stage1)、bl2(Bootloader Stage 2)、TZ(TrustZone)和uboot(Universal Bootloader) 。通过分配空间、加载程序、加密之后跳转到操作系统启动。Bootloader除了有启动操作系统的功能之外,还具有烧录功能。在裸板的情况下,硬件部门只能通过JTAG口来烧录程序至芯片中的emmc中,当uboot已经录入,在uboot模式下,可以通过fastboot等工具直接烧写操作系统内核的镜像、操作系统的外壳镜像,甚至新的bootloader的镜像。2.2.3嵌入式操作系统TC4平台是针对Samsung公司Exynos 4x12应用处理器片上系统开发的平台。该平台面向平板电脑、智能手机等手持设备,重点开发Android4.0系统。Android系统的内核基于linux。比如最新的4.0 Icecream Sandwich(ICS)系统的内核版本是linux3.0。在这个内核之上,Android还定义了系统运行库层、应用程序框架层和应用程序层。Uboot可以从官网ftpftp:/ftp.denx.de/pub/u-boot/下载,Linux内核的源程序可以从上下载,Android代码可以通过linux系统从的open source project中下载。整个解决方案的开发的核心就是对这三个prject的修改,能够移植到TC4的硬件平台上。2.2.4调试、下载工具TC4平台使用一系列工具连接开发用的PC机和开发板,用于烧录和调试代码,以发现系统bug、完善功能。具体的工具如下:(1)Trace32TRACE32是由德国Lauterbach公司研制开发的一款仿真测试工具。TRACE32作为一种真正集成化、通用性系统仿真器可以组合成多种方案,可以支持网络方案、实验室单机方案、异地光纤方案等,它具有全模块化、积木式结构、可支持JTAG及BDM接口和所有CPU,能够提供软件分析、端口分析、波形分析以及软件测试等强大功能。使用trace32工具时,主要修改.cmm格式的文件,使得其中的配置符合开发板即可,具体来说,需要在cmm文件中使用movi write emmc-uboot + add命令,来指定烧录的位置,本工程中,地址的值为40000000。通过trace32,可以通过JTAG口烧录uboot到开发版中,在板子出现故障、uboot无法正常启动的时候经常会使用到。(2)adbadb的全称为Android Debug Bridge,就是起到调试桥的作用。借助adb工具,我们可以管理设备或手机模拟器的状态。还可以进行很多操作,如安装软件、系统升级、运行shell命令等等。其实简而言说,adb就是连接Android设备与PC端的桥梁,可以让用户在电脑上对Android系统进行全面的操作。 在开发过程中,adb用来下载测试程序到开发板中,一个典型的例子就是monkey测试,需要下载测试代码到板子中,然后对板子进行一些随机的模拟点击操作,仿真人体对其的大量点击,完成压力测试,找到系统稳定性上潜在的问题。adb常用的命令有:adb devices来查看连接设备adb install/unistall来安装/卸载软件adb shell来登录设备shell,继而使用adb shell命令adb push将电脑上的文件或者文件夹复制到设备上adb pull将手机上的文件或者文件夹复制到电脑上adb help显示adb的帮助信息(3)fastbootfastboot是一种使用usb接口进行刷机的工具。fastboot可以将镜像文件通过usb线将pc机上的文件烧录到开发板上。在使用fastboot的时候,要和SecureCRT配合,在CRT终端输入fastboot X(x默认值为0,代表烧录emmc,x可以设置为1,代表烧录sd卡)后可以在cmd窗口下进行烧录命令的操作。常用的命令如下:fastboot flash bootloader pathuboot.bin 烧录uboot。fastboot flash ramdisk pathramdisk-uboot.img 烧录ramdisk-uboot。fastboot flash kernel pathzImage 烧录kernel。fastboot flash system pathsystem.img 烧录android镜像。fastboot -w 清除缓存区中的内容。(4)dnwDNW工具是三星公司自己开发的烧录工具,具有和fastboot类似的作用,用来下载镜像文件至电路板。dnw的优点是使用图形界面,操作更加简单。在终端输入dnw addr(TC4工程下,addr为40000000),然后在dnw菜单栏中点击transmit,选择好路径即可,继而在终端输入movi write emmc-uboot 40000000,最后重启板子即可完成烧录。(5)其他工具另外还有一些小的工具能完成一些烧录工作,比如用于制作SD卡的工具等等,这些工具都会根据客户的需求打包给客户。2.2.5开发板上设备的驱动程序驱动程序是连接软硬件的桥梁。硬件只有在驱动程序的带动下才能被处理器识别和处理器进行通信。驱动程序的代码已经打包作为一个目录防止在linux内核的代码当中了。一些和平台相关的代码,被放在arch目录下。比如本项目TC4平台,处理器是exynos4412或者exynos4212,平台驱动代码被放置在TC4_Kernel/arch/arm目录下。另外一些比较通用的代码,则可能放在TC4_Kernel/drivers目录下。本课题研究九轴传感器的驱动,TC4项目使用的Bosch的Bma250三轴加速度传感器、Honeywell公司的Hmc5883三轴磁传感器和Invensense公司的mpu3050三轴陀螺仪。这些代码被放置在TC4_Kernel/drivers/misc目录下和其他(例如c2c、eeprom等)驱动程序在同一个目录下,便于文件的管理。驱动程序的开发需要对软件和硬件都有所了解。硬件方面,要求编写驱动程序的工程师阅读和硬件一起发行的Datasheet。Datasheet中的内容非常丰富,不同的内容分别在不同的阶段用到,对于驱动工程师来说,最主要的内容是硬件当中的一些参数设置和寄存器的使用。这些将在驱动程序中。软件方面,驱动程序的编写需要和操作系统结合起来。所以要掌握操作系统的有关接口的知识。比如九轴传感器使用的是I2C总线,处理器内部已经集成了多个I2C模块,Linux内核中也配合内核中I2C模块的代码,并且定义好了接口。传感器芯片的提供商在销售芯片的同时,会提供函数库和参考代码,根据开发平台的特性,重新编写代码,使得硬件能在新的平台上正常的工作,驱动程序的任务就完成了。本文的主题就是九轴传感器驱动的实现,将在后文中作详细的说明。2.2.6开发板相关的技术文档在提供代码的同时,BSP中还需要包含操作指南等技术文档。知道用户自己编译文件烧录镜像。技术文档需要按照规范书写,易于阅读、便于操作。比如Installation Guide等。2.3 Linux开发环境2.3.1 基于Linux开发环境概述 Linux是开放源代码的自由操作系统,它为用户提供了最大限度的自由度。由于嵌入式系统千差万别,往往需要针对具体的应用进行修改和优化,因而获得源代码就变得至关重要了。Linux的软件资源十分丰富,每一种通用程序在Linux上几乎都可以找到,并且数量还在不断增加。在Linux上开发嵌入式应用软件一般不用从头做起,而是可以选择一个类似的自由软件作为原型,在其上进行二次开发。 Linux从诞生之日起就与Internet密不可分,支持各种标准的Internet网络协议,并且很容易移植到嵌入式系统当中。此外,Linux还支持ext2、fat32、romfs等文件系统,这些都为开发嵌入式系统应用打下了很好的基础。 Linux相对与windows相比,具有安全性高、支持多用户/多任务等特点,在开发中能给团队带来合作上的便利,因此被广泛地使用在了工程开发当中。 Linux环境下使用命令行操作,用户通过键入shell命令来和linux内核交互。对于开发来说,能实现文件的管理,常用的操作指令有:帮助命令:help,man,whatis,whereis显示文件内容命令:cat,more,less,head ,tail,od,file,touch文件内容查询命令:grep文件查找命令:find,locate文件比较命令:diff,comm文件权限命令:chmod文件复制、删除和移动命令:cp,rm,mv打包命令:tar2.3.2 基于Linux的文本编辑器 Linux还提供了强大的文字编辑器和编译器,能实现代码的编辑和编译。比较常用的编辑器有两个,nano和vi。 Nano是一款单模式的编辑器,操作使用比较简单,与windows中notepad(记事本)的用法非常相似。不同的是一些关于系统的操作需要使用快捷键,比如使用Ctrl+O保存修改;使用Ctrl+X退出文本。 Vi则是公认的最强大的编辑器。基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insertmode)和底行模式(last line mode),各模式的功能区分如下命令行模式下,用户可以控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。 只有在Insert mode下,才可以做文字输入,按ESC键可回到命令行模式。底行模式(last line mode)。将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号等。使用相关的指令,可以实现对文本的复制、替换、查询、跳转操作。具体的操作方式在linux界面下的帮助文档中可以获得。2.3.3 基于Linux的编译器和调试器(1) GccGCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。它是一套 以 GPL 及 LGPL 许可证所发行的自由软件,也是 GNU计划的关键部分。GCC能处理C语言和C+语言。在安装了GCC之后,就可以按照GCC的规范来使用这个编译器。GCC最基本的用法是gcc options filenames。其中options就是编译器所需要的参数,filenames给出相关的文件名称。在一些庞大的工程中,通常有难以计数的源文件,按其类型、功能、模块分别放在若干个目录中,如果用gcc直接编译这些文件,不仅非常耗时,而且难以管理。于是,我们可以使用Makefile文件来定义编译的规则,用它来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作,极大提高了软件开发的效率。makefile文件写好以后,只要使用make命令就可以解释makefile中的内容。有关makefile的编写,可以参考文献和有关规范。(2)Gdbgdb是gnu开源组织发布的一个强大的linux下程序调试工具。主要帮助开发者完成四方面的任务:启动程序,按照自己定义的要求运行程序可以让调试的程序在所指定的调置断点处停住。当程序停止时,可以检查此时程序中的时间,比如查看当前状态下程序中指定的变量的值和地址。动态改变程序的运行环境。gdb的具体操作可以参考文献。(3)终端仿真程序Secure CRTSecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,同时支持Telnet和rlogin协议。SecureCRT是一款用于连接运行包括Windows、UNIX和VMS的远程系统的理想工具。SSH的英文全称是 Secure Shell。传统的网络服务程序,如:ftp 和telnet 在本质上都是不安全的,因为它们在网络上用明文传送口令和数据别有用心的人非常容易就可以截获这些口令和数据。而通过使用 SSH客户端与服务器端通讯时,用户名及口令均进行了加密,有效防止了对口令的窃听。同时通过 SSH的数据传输是经过压缩的,所以可以提高数据的传输速度,既然如此我们为什么不使用它呢。SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x 和2.x。至于具体如何安装服务器端,普通用户就不需要关心了。通过CRT,一方面可以远程登录到服务器上,使用服务器的硬件来对代码进行编译,利用SSH的特性,可以保证传输的安全性。出了登录远程服务器以外,还可以通过SecureCRT用串口连接开发板访问硬件。CRT可以用来配合后面提到的fastboot/dnw等工具进行烧录镜像等工作。在调试工作当中,板子上的信息可以通过串口打印到PC终端上。根据打印的信息就可以找到bug所在的位置,便于程序的调试。2.3.4多用户开发环境GitGit工具是用于 Linux 内核开发的版本控制工具。使用git工具,开发者只需要用几行简单的代码就可以完成文件的上传、删除、下载等等。我们可以把整个系统分为workspace、host和remote host等几个部分。Workspace中的工程师修改完自己的代码以后,可以push到host中,经过host的整理调试没有问题之后,形成一个repository,push到remote host上。Linux的应用很广,可以用在mobile上、平板电脑上、车载系统上等,每个模块都有专门负责的内核开发团队,host可以认为是公司的一个开发组,remote host就可以认为是这些核心团队。通过分布式的开发,代码模块得到补充,源源不断地升级。因此Linux是世界上参与人数最多的操作系统。本项目由于涉及团队中多人同时开发,因此也使用git工具来完成代码的更新维护。在实际的使用工程中,经常使用到的命令如下:下载命令:git clone git/path/source.git更新命令:git pull检查命令:git status上传命令:git push2.4 本章小结 本章重点介绍了TC4项目及其开发环境,和本课题涉及的BSP部分内容。总的来说,Linux强大的多用户的开发环境非常适合大型工程的开发,而驱动程序是BSP的重要组成部分。作为开发者,需要深入理解开发的原理并且熟练使用开发工具。第三章 Linux字符型设备驱动方法3.1字符设备器驱动程序基本概念 Linux 的众多优良特性之一就是可以在运行时扩展由内核提供的特性的能力。这意味着你可以在系统正在运行着的时候增加内核的功能(也可以去除)。每块可以在运行时添加到内核的代码,被称为一个模块。Linux 内核提供了对许多模块类型的支持,包括但不限于,设备驱动。每个模块由目标代码组成(没有连接成一个完整可执行文件),可以动态连接到运行中的内核中,通过 insmod 程序,以及通过 rmmod 程序去连接。 在Linux内核当中,每个设备驱动都对应着一定类型的硬件设备,并且被赋予一个主设备号。设备驱动的列表和它们的主设备号可以在(/proc/devices中找到。每个设备驱动管理下的物理设备也被赋予一个从设备号。无论这些设备是否真的安装,在/dev目录中都将有一个文件,称作设备文件,对应着每一个具体设备。6 对设备的分类方法有很多中,按照LINUX操作系统的分类标准,可以将设备分成字符设备、块设备和网络接口设备三种。不同的设备对应不同的设备驱动。(1)字符设备 一个字符设备是一种可以当作一个字节流来存取的设备。例如键盘、打印机、串口等等。在LINUX等嵌入式操作系统中,字符设备以特定的文件方式在文件目录树中占据位置并且拥有相应的结点。结点中的文件类型指明该文件是字符设备,可以使用与普通文件相同的文件操作命令对字符设备文件进行操作,例如打开、关闭、读写、控制等。驱动程序的编写可以通过编写相应的函数来完成,以对上层提供访问接口。(2)块设备 块设备则是按照一定数量字节数读取数据的设备。例如磁盘、光盘、SD卡等存储设备。块设备将信息存储在固定大小的块中,每个块都有自己的地址。数据块的大小通常在512字节到32768字节之间。块设备的基本特征是每个块都能独立于其他的块而读写。在LINUX中,允许
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 部门级安全培训材料课件
- 【高考模拟】2026届普通高等学校招生全国统一考试最 新 数学模拟试卷3(含解析)
- 海藻酸盐包装力学优化-洞察及研究
- 部署消防安全培训课件
- 遨游汉字课件
- 2023-2024学年广州市东江外语实验学校八年级(下)第一次限时训练物理试题
- 2025年广东省广州市中考物理三轮冲刺《机械运动》
- 国际标准体系差异对出口型刨刀产品认证成本的结构性挤压效应
- 口腔解剖变异区域刮治效率提升的3D打印定制化工具设计
- 反向刮水器总成在极端环境(-40℃至85℃)下的热应力变形补偿机制
- 2025至2030有机聚合物钽电容器行业发展趋势分析与未来投资战略咨询研究报告
- 建筑培训教学课件
- 学习乐理音程课件
- 爆破安全培训课件
- 管线物探基本知识培训课件
- 医护人员护理文书书写规范模板
- 财务岗招聘笔试题目及答案
- 急诊急救业务知识培训课件
- 生产安全事故应急条例讲解
- 2025上教师资格笔试考试试题与答案(初中化学考生回忆版)
- 《中国名菜》课程标准
评论
0/150
提交评论