蜂鸣器驱动程序设计 2

蜂鸣器驱动程序设计 2

ID:13473913

大小:560.53 KB

页数:21页

时间:2018-07-22

蜂鸣器驱动程序设计 2_第1页
蜂鸣器驱动程序设计 2_第2页
蜂鸣器驱动程序设计 2_第3页
蜂鸣器驱动程序设计 2_第4页
蜂鸣器驱动程序设计 2_第5页
资源描述:

《蜂鸣器驱动程序设计 2》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、合肥师范学院嵌入式系统开发技术课程设计专业:计算机科学与技术(嵌入式)班级:嵌入式应用技术学号:11044103411104410471110441060姓名:钱鹏鹏汪新妹郭航峰设计题目:蜂鸣器驱动程序设计2014年05月1.绪论31.1概要31.2设计内容42.开发环境的搭建42.1Redhat的安装42.2安装arm-linux-gcc交叉编译器92.3安装及编译linux-2.6.29-mini2440-20090708内核93.字符设备驱动相关知识93.1模块机制93.2字符设备开发基本步骤103.3主设备号和次设备号113.4实现字符驱动程序124.蜂鸣器原

2、理144.1蜂鸣器的种类和工作原理144.2开发板上蜂鸣器原理图分析154.3GPB0参数155.总体设计165.1设计思路165.2设计步骤166.驱动及测试程序176.1beep.c176.2beep_tset.c217.运行结果及截图22综合设计总结与思考25第20页1.绪论1.1概要linux驱动在本质上就是一种软件程序,上层软件可以在不用了解硬件特性的情况下,通过驱动提供的接口,和计算机硬件进行通信。系统调用是内核和应用程序之间的接口,而驱动程序是内核和硬件之间的接口,也就是内核和硬件之间的桥梁。它为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是

3、一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。linux驱动程序是内核的一部分,管理着系统中的设备控制器和相应的设备。它主要完成这么几个功能:对设备初始化和释放;传送数据到硬件和从硬件读取数据;检测和处理设备出现的错误。一般来说,一个驱动可以管理一种类型的设备。例如不同的U盘都属于massstorage设备,我们不需要为每一个U盘编写驱动,而只需要一个驱动就可以管理所有这些massstorage设备。为方便我们加入各种驱动来支持不同的硬件,内核抽象出了很多层次结构,这些层次结构是linux设备驱动的上层。它们抽象出各种的驱动接口,驱动只需要填写相应的

4、回调函数,就能很容易把新的驱动添加到内核。一般来说,linux驱动可以分为三类,就是块设备驱动,字符设备驱动和网络设备驱动。块设备的读写都有缓存来支持,并且块设备必须能够随机存取。块设备驱动主要用于磁盘驱动器。而字符设备的I/O第20页操作没有通过缓存。字符设备操作以字节为基础,但不是说一次只能执行一个字节操作。例如对于字符设备我们可以通过mmap一次进行大量数据交换。字符设备实现比较简单和灵活。1.2设计内容本次设计是简单的字符设备驱动设计,基于mini2440的蜂鸣器的驱动设计。2.开发环境的搭建2.1Redhat的安装创建一个虚拟机:点击菜单栏File->New

5、->Virtualmachine。点击下一步。选择Typical选项。第20页第20页选择Linux下的RedHatLinux填写虚拟机的命名和存储地址。第20页选择磁盘大小第20页2.2安装arm-linux-gcc交叉编译器将arm-linux-gcc-4.3.2.tgz复制到虚拟机的root目录下解压文件:tarzxvfarm-linux-gcc-4.3.2.tgz在bash_profile里添加路径:gedit~/.bash_profiel路径/root/usr/local/arm/4.3.2/binsource~/.bash_profile使更改生效2.3安

6、装及编译linux-2.6.29-mini2440-20090708内核复制内核到root目录下解压内核文件tarzxvflinux-2.6.29-mini2440-20090708.tgz使内核文件生效:cpconfig_mini2440_n35.config使用make命令完成编译3.字符设备驱动相关知识3.1模块机制Linux提供了机制被称为模块(Module)的机制提供了对许多模块支持,包括但不限于,设备驱动每个模块由目标代码组成(没有连接成一个完整可执行程序)insmod将模块动态加载到正在运行内核rmmod程序移除模块Linux内核模块的程序结构lstat

7、icint__initbeep_init(void)---模块初始化函数通过alloc_chrdev_region来分配设备号beep_cdev来对设备进行各种操作。比如在加载内核模块时,模块的加载函数会自动被内核执行,完成模块的相关初始化工作第20页lstaticvoid__exitbeep_exit(void)---模块卸载函数(必须)当通过unregister_chrdev_region命令卸载某模块时,模块的卸载函数会自动被内核执行,完成与模块装载函数相反的功能lMODULE_LICENSE()---模块许可证声明(必须)模块许可证(LICE

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。