嵌入式的驱动编程

收藏

预览图
编号:68133123    类型:共享资源    大小:1.75MB    格式:DOC    上传时间:2020-04-06 上传人:ng****60 IP属地:河南
15
积分
关 键 词:
嵌入式 驱动 编程
资源描述:
嵌入式论文 论文题目: 驱动程序编程项目 学生姓名: 专 业:计算机科学与技术 班 级: 学 号: 指导教师: 2012年 12月08日 目录 摘要: 1 关键词: 1 第一章 引言 1 1.1 嵌入式驱动程序的背景 1 1.2嵌入式系统驱动程序的结构 2 第二章 驱动程序设计平台构建 3 2.1 嵌入式系统开发平台构建 3 2.2 驱动程序设计所需的工具 3 2.2.1 软件 3 2.2.2 硬件 4 第三章Bootloader移植与下载 5 3.1 vivi的总流程图 5 3.2 vivi源代码安装 5 3.3 vivi代码分析 6 3.4 vivi编译 7 3.5 vivi烧写 8 第四章 内核移植及下载 10 4.1 内核总流程图 10 4.2 内核源代码安装 10 4.3 内核编译 11 4.4 内核的烧写 12 第五章 驱动程序设计 12 5.1 触摸屏工作原理 12 5.2 驱动程序设计流程图 14 5.3 触摸屏设备驱动中数据结构 14 5.4 驱动程序的调试 16 参考文献 16 摘要: 驱动程序是操作系统内核与机器硬件之间的接口。软件平台由嵌入式Linux操作系统、嵌入式图形用户界面(GUI)、GNU交叉编译调试工具组成加上外围接口电路模块构成。Embest Edukit Ⅲ 教学实验平台是一款功能强大的32位嵌入式开发板,该驱动程序就是基于此开发板。 关键词: 驱动、Bootloader、内核、移植、烧写。 第一章 引言 1.1 嵌入式驱动程序的背景 在Linux操作系统下有3类主要的设备文件类型:块设备、字符设备和网络设备。这种分类方法可以将控制输入/输出设备的驱动程序与其他操作系统软件分离开来。 字符设备与块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般紧接着发生。块设备则不然,它利用一块系统内存作为缓冲区,若用户进程对设备的请求能满足用户的要求,就返回请求的数据;否则,就调用请求函数来进行实际的I/O操作。块设备主要是针对磁盘等慢速设备设计的,以免耗费过多的CPU时间用来等待。网络设备可以通过BSD套接口访问数据。 每个设备文件都有其文件属性(c/b),表示是字符设备还是块设备。另外每个文件都有2个设备号,第一个是主设备号,标识驱动程序;第二个是从设备号,标识使用同一个设备驱动程序的、不同的硬件设备。设备文件的主设备号必须与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法访问驱动程序。 系统调用时操作系统内核与应用程序之间的接口,设备驱动程序是操作系统内核与机器硬件之间的接口。设备驱动程序是内核的一部分,它完成以下功能: *对设备初始化和释放 *把数据从内核传送到硬件和从硬件读取数据 *读取应用程序传送给设备文件的数据和回送应用程序请求的数据 *检测和处理设备出现的错误 MTD(Memory Technology Device)设备是闪存芯片、小型闪存卡、记忆棒之类的设备,它们在嵌入式设备中的使用正在不断增加。MTD驱动程序是在Linux下专门为嵌入式环境开发的新的一类驱动程序。相对于常规块设备驱动程序,使用MTD驱动程序的优点在于他们能更好的支持、管理给予闪存设备,有基于扇区的擦除和读/写操作的更好的接口。 1.2嵌入式系统驱动程序的结构 Linux的设备驱动程序可以分为3个主要组成部分: 1. 自动配置和初始化子程序,负责监测所要驱动的硬件设备是否存在和能否正常工作。如果该设备正常,则对这个设备及其相关的设备驱动程序需要的软件状态进行初始化。这部分驱动程序仅在初始化时被调用一次。 2. 服务于I/O请求的子程序,又称为驱动程序的上半部分。调用这部分程序是由于系统调用的结果。这部分程序在执行时,系统仍认为是与进行调用的进程属于同一个进程,只是由用户态变成了核心态,具有进行此系统调用的用户程序的运行环境,因而可以在其中调用sleep()等与进行运行环境有关的函数。 3. 中断服务子程序,又称为驱动程序的下半部分。在Linux系统中,并不是直接从中断向量表中调用设备驱动程序的中断服务子程序,而是由Linux系统来接收硬件中断,再由系统调用中断服务子程序。中断可以在任何一个进程运行时产生,因而在中断服务程序被调用时,不能依赖于任何进程的状态,也就不能调用任何与进程运行环境有关的函数。因为设备驱动程序一般支持同一类型的若干设备,所以一般在系统调用中断服务子程序时,都带有一个或多个参数,以唯一标识请求服务的设备。 在系统内部,I/O设备的存/取通过一组固定的入口点来进行,这组入口点是由每个设备的驱动程序提供的。 第二章 驱动程序设计平台构建 2.1 嵌入式系统开发平台构建 嵌入式系统平台包括硬件设计平台和软件开发平台两部分:硬件平台由基本系统(包括CPU和存储器)加上外围接口电路模块构成。软件平台由嵌入式Linux操作系统、嵌入式图形用户界面(GUI)、GNU交叉编译调试工具组成加上外围接口电路模块构成。 2.2 驱动程序设计所需的工具 2.2.1 软件 (1)Embest Online Flash Programmer For ARM:Embest Flash在线编程器; (2)HYPER TERMINAL(超级终端; (3) EmbestIDE Pro for ARM: 用于嵌入式软件开发的新一代集成开发环境,是一个高度集成的图形界面操作环境,包含编辑器、编译汇编链接器、调试器、工程管理、Flash 编程等工具;支持的开发语言包括标准C和汇编语言。 (4)cygwin: Cygwin是一个在windows平台上运行的unix/Linux模拟环境,是cygnus solutions公司开发的自由软件。 2.2.2 硬件 Embest Edukit Ⅲ 教学实验平台是一款功能强大的32位嵌入式开发板,里面采用了SAMSUNG公司的以ARM7TDMI-S为内核的处理器S3C44B0X,同时可以兼容S3C2410,具有JTAG调试等调试功能。板上提供了一些键盘、LED和串口等一些常用功能模块,并且具有IDE硬件接口,CF存储卡接口、网接口和SD卡接口等等,对用户在32位ARM嵌入式领域进行开发实验非常方便。 Embest EduKit-III教学实验平台主要功能模块如下: S3C2410开发板具有8通道模拟输入的10位CMOS模数转换器(ADC)。它将输入的模拟信号转换为10位的二进制数字代码。在2.5MHz的A/D转换器时钟下,最大转化速率可达到500KSPS。A/D转换器是循环类型的,其支持片上采样和保持功能,并支持掉电模式。 S3C2410开发板的AIN[7]和AIN[5]用于连接触摸屏的模拟信号输入。触摸屏接口电路一般由触摸屏,4个外部晶体管和一个外部电压源组成。 触摸屏接口的控制和选择信号(nYPON,YMON,nXPON和XMON)连接切换X坐标和Y坐标转换的外部晶体管。模拟输入引脚(AIN[7],AIN[5])则连接到触摸屏引脚。 触摸屏的AIN[7]连接触摸屏的X+引脚,而AIN[5]连接触摸屏的Y+引脚的。要控制触摸屏的引脚(X+,X-,Y+,Y-),就要应用4个外部晶体管,并采用控制信号nYPON, YMON, nXPON和XMON来控制晶体管的打开与关闭。 第三章Bootloader移植与下载 3.1 vivi的总流程图 3.2 vivi源代码安装 进入cygwin,Vivi 源代码的安装: $> source /tmp/edukit-2410/set_env_linux.sh Linux 编译环境变量设置 $> cd $WORKDIR $> tar -xvjf /tmp/edukit-2410/vivi-20030929.tar.bz2 $> ls … vivi … …为$WORKDIR 目录下其他内容 正确解压后,可以看到相比之前多了一个vivi目录,即vivi源代码的安装目录,后面的vivi配置及编译都得进入vivi目录进行。 再为EduKit-2410 实验系统打入vivi源代码的补丁文件: $> cd vivi $>patch-p1 source /tmp/edukit-2410/set_env_linux.sh Linux 编译环境变量设置 $> cd $WORKDIR/vivi $> make clean $>make menuconfig输入配置smdk2410:Nand boot或smdk2410-amd:Nor Flash boot 其中,运行make menuconfig 后,选择Load an Alternate Configuration file,配置文件名称如下: smdk2410:编译vivi 在Nand Flash(K9S5608)中运行; smdk2410-amd:编译vivi 在Nor Flash(AM29LV160DB)中运行。 这两个配置文件在\usr\local\src\edukit-2410\vivi\arch\def-configs\中,须复制到\usr\local\src\edukit-2410\vivi\中;或者可以在menuconfig 中输入全部路径。 配置好后,输入 $> make 如果编过程中没有出现错误,则编译后的执行文件存放\usr\local\src\edukit-2410\vivi\目录,文件名为vivi。 3.5 vivi烧写 1) 首先把SW104短接(从Nand Flash启动),运行Embest online Flash Programmer for ARM(version 3.0以上),点击菜单Settings选择Configure…项,配置当前使用的Embest JTAG仿真器型号为PowerICEARM9,并设置相应的参数; 2) 点击菜单File 选择Open打开烧写配置文件 S3C2410&NandFLash_vivi.cfg,在Flash Programmer的Program页中选择要烧写的文件:vivi.bon&load.bin; 3) 点击按钮Progarm开始烧写,直到烧写成功; 4) 连接串口线到PC 机COM1,运行光盘中提供的Windows超级终端Hyper Terminal.ht; 5) 把开发板重新加电,程序运行后,在超级终端上可以看到串口输出类似以下信息: 6) 看到以上信息后,表示正在等待用户从超级终端下载文件。这时,请点击超级终端菜单"传送"选择Xmodem方式下载vivi.nand文件,点击OK后等待下载烧写结束即可。 第四章 内核移植及下载 4.1 内核总流程图 4.2 内核源代码安装 运行cygwin,执行以下命令完成cygwin 环境下的Linux源代码的安装: $> source /tmp/edukit-2410/set_env_linux.sh Linux编译环境变量设置 $> cd $WORKDIR $> tar –xvjf /tmp/edukit-2410/linux-2.4.18-rmk7-pxa1-mz5-i2c.tar.bz2 $> ls … kernel … …为$WORKDIR 目录下其他内容 正确解压后,相比之前可以看到多了一个kernel目录,即kernel源代码的安装目录,后面的Linux配置及编译都得在kernel目录进行。 实验中提供的linux内核已经包含了Linux源代码的补丁文件、I2C和网络驱动模块。 4.3 内核编译 在Cygwin 中依次执行以下命令完成Linux的编译过程: $> source /tmp/edukit-2410/set_env_linux.sh Linux编译环境变量设置 $> cd $WORKDIR $> cd kernel $> make mrproper 清除所有的旧的配置和旧的编译目标文件等 $> make xconfig 在图形界面下对内核进行配置 执行make xconfig 后,弹出以下内核定制界面: 选择 Load configuration from File项,配置文件smdk2410new1的路径是:\tmp\edukit-2410\linux kernel\kernel\ ,名称为smdk2410new1。根据提示加载配置文件后,点击“Save and Exit”按钮,然后执行下列命令: $> make dep 搜索Linux编译输出与源代码之间的依赖关系并生成依赖文件。 $> make clean 清除构造内核时生成的目标文件、模块文件和临时文件。 $> make zImage 生成压缩的内核映像文件 编译通过后,在 ./arch/arm/boot/目录下生成内核的压缩映像文件为“zImage” 4.4 内核的烧写 1) 首先SW104设为短接(从Nand Flash 启动),并确定已经烧写vivi.nand,加电。 2) 在vivi启动等待中,敲入空格键进入vivi界面环境,并输入以下命令: vivi> load flash kernel x <回车> 烧写更新内核约4 分钟即可烧写完毕。 3) 点击超级终端菜单中的“传送”,选“发送文件”zImage(选择xModem 方式传送)烧写结束,重起实验板,观测超级终端窗口提示信息就可以启动linux 内核,但没有因为文件系统,系统会提示出错信息。 第五章 驱动程序设计 5.1 触摸屏工作原理 5.1.1 普通转换模式 普通转换模式(AUTO_PST = 0,XY_PST = 0)是用作一般目的下的ADC转换。这个模式可以通过设置ADCCON和ADCTSC来进行对AD转换的初始化;而后读取ADCDAT0(ADC数据寄存器0)的XPDATA域(普通ADC转换)的值来完成转换。 5.1.2 分离的X/Y轴坐标转换模式:X轴坐标转换和Y轴坐标转换 X轴坐标转换(AUTO_PST=0且XY_PST=1)将X轴坐标转换数值写入到ADCDAT0寄存器的XPDATA域。转换后,触摸屏接口将产生中断源(INT_ADC)到中断控制器。 Y轴坐标转换(AUTO_PST=0且XY_PST=2)将X轴坐标转换数值写入到ADCDAT1寄存器的YPDATA域。转换后,触摸屏接口将产生中断源(INT_ADC)到中断控制器。 5.1.3 自动(连续)X/Y轴坐标转换模式 自动(连续)X/Y轴坐标转换模式(AUTO_PST=1且XY_PST= 0)以下面的步骤工作:触摸屏控制器将自动地切换X轴坐标和Y轴坐标并读取两个坐标轴方向上的坐标。触摸屏控制器自动将测量得到的X轴数据写入到ADCDAT0寄存器的XPDATA域,然后将测量到的Y轴数据到ADCDAT1的YPDATA域。自动(连续)转换之后,触摸屏控制器产生中断源(INT_ADC)到中断控制器。 5.1.4 等待中断模式 当触摸屏控制器处于等待中断模式下时,它实际上是在等待触摸笔的点击。在触摸笔点击到触摸屏上时,控制器产生中断信号(INC_TC)。中断产生后,就可以通过设置适当的转换模式(分离的X/Y轴坐标转换模式或自动X/Y轴坐标转换模式)来读取X和Y的位置。 5.1.5 静态模式 当ADCCON寄存器的STDBM位被设为1时,Standby模式被激活。在该模式下,A/D转换操作停止,ADCDAT0寄存器的XPDATA域和ADCDAT1寄存器的YPDATA(正常ADC)域保持着先前转换所得的值。 5.2 驱动程序设计流程图 5.3 触摸屏设备驱动中数据结构 (1) 触摸屏的file_operations static struct file_operations s3c2410_fops={ owner: THIS_MODULE, open: s3c2410_ts_open, read: s3c2410_ts_read, release: s3c2410_ts_release, #ifdef USE_ASYNC fasync: s3c2410_ts_fasync,//异步通知 #endif poll: s3c2410_ts_poll,//轮询 }; (2) 触摸屏设备结构体的成员与按键设备结构体的成员类似,也包含一个缓冲区,同时包括自旋锁、等待队列和fasync_struct指针 typedef struct { unsigned int penStatus; /* PEN_UP, PEN_DOWN, PEN_SAMPLE */ TS_RET buf[MAX_TS_BUF]; /* protect against overrun(环形缓冲区) */ unsigned int head, tail;/* head and tail for queued events (环形缓冲区的头尾)*/ wait_queue_head_t wq; //* 等待队列数据结构 spinlock_t lock; //* 自旋锁 #ifdef USE_ASYNC struct fasync_struct *aq; #endif #ifdef CONFIG_PM struct pm_dev *pm_dev; //友善之臂专有的,我后面的代码删除了这段 #endif } TS_DEV; (3) 触摸屏结构体中包含的TS_RET值的类型定义,包含X、Y坐标和状态(PEN_DOWN、PEN_UP)等信息,这个信息会在用户读取触摸信息时复制到用户空间 typedef struct { unsigned short pressure; //* 压力,这里可定义为笔按下,笔抬起,笔拖曳 unsigned short x; //* 横坐标的采样值 unsigned short y; //* 纵坐标的采样值 unsigned short pad; //* 填充位 } TS_RET; (4) 在触摸屏设备驱动中,将实现open()、release()、read()、fasync()和poll()函数,因此,其文件操作结构体定义 触摸屏驱动文件操作结构体:static struct file_operations s3c2410_fops={ } 5.4 驱动程序的调试 使用s3c2410_ts.c触摸屏驱动编写应用程序,读取触摸屏的触点坐标值及动作信息(触点x坐标值,y坐标及是否有压力值press),并在串口中断打印出来对触摸屏设别的操作有打开设备,关闭设备,读操作等。编写应用程序读取触摸屏的触点坐标值及动作信息时,只需利用触摸屏驱动程序便可实现,先打开触摸屏设备,然后调用读函数即可。 其中,触摸笔动作取值如下: #define PEN_UP 0 /* 触摸笔抬笔,即触摸屏不被压下 */ #define PEN_DOWN 1 /* 触摸笔下笔,即触摸屏被压下 */ #define PEN_FLEETING 2 /* 触摸笔拖动 */ 结构体定义如下: typedef struct { unsigned short pressure; /* 触摸笔动作 */ unsigned short x; /* 触点x座标值 */ unsigned short y; /* 触点y座标值 */ unsigned short pad; }TS_RET; 参考文献 [1] 徐英慧,等. ARM9 嵌入式系统设计——基于 S3C2410 与 Linux[M]. 北京航空航天大学出版社 [2] 于明,等. ARM9 嵌入式系统设计与开发教程[M]. 北京:电子工业出版社 [3] 田泽. 嵌入式系统开发与应用实验教程(第二版)[M]. 北京:北京航空航天大学出版社 [4] 孙纪坤,等.嵌入式 Linux 系统开发技术详解——基于ARM[M]. 北京:人民邮电出版社 [5] 田泽. ARM9嵌入式 Linux 开发实验与实践. 北京:航空航天大学出版社 [6] 南金瑞,等. 嵌入式车载信息系统开发与应用[M]. 北京:电子工业出版社 [7] 王田苗. 嵌入式系统设计与实例开发[M].2版. 北京:清华大学出版社 [8] 俞建新,等. 嵌入式应用程序开发综合实验9例[M]. 北京:清华大学出版社 [9] 黄智伟,等. ARM9 嵌入式系统设计基础教程. 北京:北京航空航天大学出版社 [10] 赵宏,等. 嵌入式系统应用教程. 北京:人民邮电出版社 18
内容简介:
-
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:嵌入式的驱动编程
链接地址:https://www.renrendoc.com/p-68133123.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!