ImageVerifierCode 换一换
格式:PPT , 页数:28 ,大小:214KB ,
资源ID:5455588      下载积分:5 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/5455588.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(IT书籍Linux设备驱动程序设计.ppt)为本站上传会员【二***】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

IT书籍Linux设备驱动程序设计.ppt

1、 2006 EmbeddedLinux 设备驱动程序设计Linux设备驱动程序设计郗闽军郗闽军牛建伟牛建伟1 2006 Embedded实验目的学习Linux下进行驱动程序设计的原理掌握Linux设备驱动程序开发的基本过程和设计方法2可整理ppt 2006 Embedded实验内容内核驱动设计入门模块方式驱动程序(5.1)内核驱动设计实验触摸屏驱动(5.2)写一个简单的应用程序,显示触摸位置的坐标(x,y)开发一个LED(数码管)驱动程序,并编写一个应用程序对所开发的驱动程序进行测试(大作业)实验实现的功能是上电复位后,数码管显示数字0-7,然后每一个数字依次闪烁一次,小数点也要点亮,即:0.

2、1.2.3.4.5.6.7.3可整理ppt 2006 EmbeddedLinux的设备驱动程序硬件设备与应用程序之间的一个中间软件层它使得某个特定硬件能够响应一个定义良好的内部编程接口,同时完全隐蔽了设备的工作细节用户通过一组与具体设备无关的标准化的调用来完成相应的操作驱动程序的任务就是把这些标准化的系统调用映射到具体设备对于实际硬件的特定操作上驱动程序是内核的一部分,可以使用中断、DMA等操作驱动程序在用户态和内核态之间传递数据4可整理ppt 2006 Embedded设备驱动程序的分类字符设备字符设备所有能够象字节流一样访问的设备都通过字符设备来实现它们被映射为文件系统中的节点,通常在/d

3、ev/目录下面一般要包含open read write close等系统调用的实现块设备块设备通常是指诸如磁盘、内存、Flash等可以容纳文件系统的存储设备。块设备也是通过文件系统来访问,与字符设备的区别是:内核管理数据的方式不同它允许象字符设备一样以字节流的方式来访问,也可一次传递任意多的字节。网络接口设备网络接口设备通常它指的是硬件设备,但有时也可能是一个软件设备(如回环接口loopback),它们由内核中网络子系统驱动,负责发送和接收数据包。它们的数据传送往往不是面向流的,因此很难将它们映射到一个文件系统的节点上。5可整理ppt 2006 Embedded基本概念主设备号和次设备号主设备

4、号和次设备号主设备号和次设备号能够唯一地标识一个设备128(V2.0以前),256(V2.0以后)主设备号相同的设备使用相同的驱动程序,次设备号用于区分具体设备的实例动态获取主设备号Linux下对设备号的分配请参考Documentation/devices.txt设备文件设备文件 Linux使用设备文件来统一对设备的访问接口,将设备文件放在/dev/目录下设备的命名一般为设备文件名+数字或者字母表示的子类,例如/dev/hda1,/dev/hda2等Linux 2.4以后引入了设备文件系统(devfs)的概念,所有的设备文件作为一个可以挂装的文件系统,这样就可以被文件系统统一管理,从而设备文件

5、就可以挂装到任何需要的地方。一般将主设备建立一个目录,再将具体的子设备文件建立在此目录下。例如,/dev/mtdblock06可整理ppt 2006 Embedded基本概念驱动程序使用的驱动程序使用的2个重要结构个重要结构struct filestruct file_operations7可整理ppt 2006 Embedded基本概念struct file8可整理ppt 2006 Embedded基本概念struct file数据结构数据结构定义位于include/fs.hstruct file结构与驱动相关的成员mode_t f_mode标识文件的读写权限loff_t f_pos当前读写

6、位置unsigned int_f_flag文件标志,主要进行阻塞/非阻塞型操作时检查struct file_operation*f_op 文件操作的结构指针void*private_data驱动程序一般将它指向已经分配的数据struct dentry*f_dentry 文件对应的目录项结构9可整理ppt 2006 Embedded基本概念设备驱动程序接口设备驱动程序接口(struct file_operations),标记化方法:标记化方法:static struct file_operations demo_fops=owner:THIS_MODULE,write:demo_write,re

7、ad:demo_read,ioctl:demo_ioctl,open:demo_open,release:demo_release,;10可整理ppt 2006 Embedded基本概念设备驱动程序接口(设备驱动程序接口(struct file_operations)通常所说的设备驱动程序接口是指struct file_operations,它的定义位于include/linux/fs.h中。在嵌入式系统的开发中,通常只要实现如下几个接口函数就能完成系统所需要的功能init加载驱动程序时,内核自动调用read从设备中读取数据write向字符设备中写数据ioctl控制设备,实现除读写操作以外的其

8、他控制命令open打开设备并进行初始化release关闭设备并释放资源exit 卸载驱动程序时,内核自动调用11可整理ppt 2006 Embedded基本概念驱动程序注册过程(动态分配主设备号)insmod module_name;加载驱动程序,运行init函数(register_chrdev(dev_Major,“module_name”,*fs)查看/proc/devicesmknod /dev/module_name c/b 主设备号 次设备号rmmod module_name ;卸载驱动,运行 exit函数(unregister_chrdev(dev_Major,“module_na

9、me”,*fs))用户程序调用Open(“/dev/module_name”,mode);O_RDWRIoctl()Write()Read()Close()12可整理ppt 2006 Embedded开发驱动程序时须注意的事项中断处理中断是现代微处理器的一个重要功能Linux驱动程序中的中断处理函数extern int request_irq(unsigned int irq,void(*handler)(int,void*,struct pt_regs*),unsigned long flag,const char*dev_name,void*dev_id);/请求为中断号irq分配中断处理

10、函数extern void free_irq(unsigned int,void*);/释放中断 注意事项不能向用户空间发送或者接收数据不能执行有睡眠操作的函数不能调用调度函数谨慎使用全局变量(可重入)自旋锁的使用13可整理ppt 2006 Embedded基本概念字符设备的管理驱动程序模块通过函数int register_chrdev(unsigned int major,const char*name,struct file_operations*fops)完成向内核的注册,其中major是主设备号,name是设备名,fops是针对该设备的驱动程序的接口。在系统中为驱动程序模块建立一个设备

11、节点minjunRedHatAS$mknod/dev/demo c 254 0其中/dev/demo标识设备名为demo,“c”说明是字符设备,254是指定的主设备号,0是次设备号14可整理ppt 2006 Embedded基本概念驱动程序的编译驱动程序的编译以demo.c为例Makefile的形式参考实验指导书命令行的形式minjunRedHatAS$armv4l-unknown-linux-gcc-Wall-c-O-D_KERNEL_-I/home/minjun/embedded/kernel-2410s/include demo.c-o demo.o加载驱动加载驱动minjunRedHa

12、tAS$insmod demo.o卸载驱动卸载驱动minjunRedHatAS$rmmod demo.o15可整理ppt 2006 Embedded基本概念测试程序实例/test.c#include#include#includeint main()int fd;fd=open(/dev/demo,O_RDWR);if(fd 0)exit(fd);/your code hereread(fd,buffer,size);write(fd,buffer,size);.close(fd);return 0;16可整理ppt 2006 Embedded驱动程序的实现驱动程序框架#include#inc

13、lude#include#include /*printk()*/#include /*everything.*/#include /*error codes*/#include /*size_t*/#include#include /*O_ACCMODE*/#include /*COPY_TO_USER*/#include /*cli(),*_flags*/#define DEVICE_NAMEdemo#define demo_MAJOR 250#define demo_MINOR 0static ssize_t demo_write(struct file*filp,const char*

14、buffer,size_t count)copy_from_user(drv_buf,buffer,count);WRI_LENGTH=count;printk(user write data to drivern);/your code herereturn count;17可整理ppt 2006 Embedded驱动程序的实现驱动程序框架static ssize_t demo_read(struct file*filp,char*buffer,size_t count,loff_t*ppos)if(count MAX_BUF_LEN)count=MAX_BUF_LEN;copy_to_us

15、er(buffer,drv_buf,count);printk(user read data from drivern);return count;static int demo_ioctl(struct inode*inode,struct file*file,unsigned int cmd,unsigned long arg)printk(ioctl runingn);switch(cmd)case 1:printk(runing command 1 n);break;case 2:printk(runing command 2 n);break;default:printk(error

16、 cmd numbern);break;return 0;static int demo_open(struct inode*inode,struct file*file)MOD_INC_USE_COUNT;sprintf(drv_buf,device open sucess!n);printk(device open sucess!n);return 0;18可整理ppt 2006 Embedded驱动程序的实现驱动程序框架static int demo_release(struct inode*inode,struct file*filp)MOD_DEC_USE_COUNT;printk(

17、device releasen);return 0;static struct file_operations demo_fops=owner:THIS_MODULE,write:demo_write,read:demo_read,ioctl:demo_ioctl,open:demo_open,release:demo_release,;static int _init demo_init(void)SET_MODULE_OWNER(&demo_fops);result=register_chrdev(demo_MAJOR,demo,&demo_fops);if(result private_

18、data中的数据release与open正好相反释放由open分配的filp-private_data中的数据在最后一次关闭操作时关闭设备使用计数减一20可整理ppt 2006 Embedded驱动程序的实现驱动程序框架read和writeread将数据从内核拷贝到应用程序空间,write则将数据从应用程序空间拷贝到内核。由于用户空间和内核空间的内存映射方式不同,所以在内核和用户空间传输数据的时候需要使用如下的函数unsigned long copy_to_user(void*to,const void*from,unsigned long count);unsigned long copy_

19、from_user(void*to,const void*from,unsigned long count);在阻塞型IO中,read和write调用可能会出现阻塞read调用当前无数据可读,而又没有数据马上可读,这时会睡眠并且等待,write调用也会出现这样的情况等待队列机制wait_queue_head_t;(定义在中)如果声明了等待队列并完成初始化,进程就可以睡眠,可以调用sleep_on的不同变体来完成睡眠(函数声明位于中)大多数情况下应使用“可中断”的函数,如interruptible_sleep_on。睡眠进程被唤醒并不一定代表有数据,也有可能是被其他的信号唤醒,所以醒来后需要测试

20、condition.21可整理ppt 2006 Embedded8段LED显示器外形原理图l 一个数码管(LED)由一个8位的字节控制l当该位为“1”时点亮,为“0”时灭acbdefhg22可整理ppt 2006 EmbeddedLED连接原理图23可整理ppt 2006 EmbeddedLED显示驱动器ZLG7290 I2C LED/键盘 驱动器I2C 串行接口提供键盘中断信号方便与处理器接口可驱动8 位共阴数码管或64 只独立LED 和64 个按键可控扫描位数可控任一数码管闪烁提供数据译码和循环移位段寻址等控制8 个功能键可检测任一键的连击次数无需外接元件即直接驱LED 可扩展驱动电流和驱

21、动电压详细资料参加课程网站上的:zlg7290.pdfzlg7290_led.pdf图1 ZLG7290引脚图24可整理ppt 2006 EmbeddedLED显示驱动器功能框图IIC基地址是0 x70有24个8位寄存器(0 x00 x17),通过IIC总线访问,必须是字节操作主要寄存器 SystemReg 0 x0 FlashOnOff 0 x0c ScanNum 0 x0d DpRam07 0 x10-0 x17 CmdBuf02 0 x7-0 x8两种控制方式:-寄存器映象控制-命令解释控制参考zlg7290.pdf25可整理ppt 2006 EmbeddedLED驱动程序的主要函数st

22、atic int led_write(struct file*filp,const char*buffer,size_t count,loff_t*ppos)static int led_ioctl(struct inode*inode,struct file*file,unsigned int cmd,unsigned long arg)static int led_open(struct inode*inode,struct file*filp)static int led_release(struct inode*inode,struct file*filp)static int _in

23、it led_init(void)static void _exit led_exit(void)static struct file_operations led_fops=owner:THIS_MODULE,open:led_open,release:led_release,write:led_write,ioctl:led_ioctl,;可以使用IIC_Write(char baseAddr,char offSet,char data)来设置寄存器的值(字节操作),该函数在iic.h文件中定义。26可整理ppt 2006 EmbeddedLED测试应用程序框架#include#inclu

24、de#include#include#include int main()int fd;int ret;if(fd=open(/dev/led,O_RDWR)0)printf(open led device failed!n);exit(fd);ioctl();write();close(fd);return 0;27可整理ppt 2006 Embedded下一次实验内容内核驱动设计入门模块方式驱动程序(5.1)在PC linux和开发平台上运行通过内核驱动设计实验触摸屏驱动(5.2)写一个简单的应用程序,显示触摸位置的坐标(x,y)在开发平台上装载驱动程序,运行编写的测试应用程序开发一个LED(数码管)驱动程序,并编写一个应用程序对所开发的驱动程序进行测试(如果做不完,可以在下下次实验接着做)开发led_driver.c开发led_test.c28可整理ppt

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服