




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
字符驱动实例 本实验电路图 4个LED指示灯的接口电路 驱动程序 include include include include include include include include include include include include include include include include 定义request mem region所需的头文件 定义I O读写 I O内存读写所需的头文件 定义ioctl函数所需的头文件 定义ioctl函数所需的头文件 定义延迟与定时器函数所需的头文件 定义中断函数所需的头文件 defineCDRIVER NAME LED chrdev defineGPFCON 0X56000050 defineGPFDAT 0X56000054 defineGPFUP 0X56000058 staticvoid gpfcon staticvoid gpfdat staticvoid gpfup intCDRIVER MAJOR 0 intCDRIVER MINOR 0 intcount 1 定义物理地址 定义映射后的虚拟地址指针 loff tLED llseek structfile filp loff toff intwhence intLED ioctl structinode inode structfile filp unsignedintcmd unsignedlongarg intLED open structinode inode structfile filp intLED release structinode inode structfile filp externstructfile operationsLED fops structcdev LED cdev dev tLED dev structfile operationsLED fops owner THIS MODULE llseek LED llseek open LED open release LED release staticint initLED init void if request mem region GPFCON 12 CDRIVER NAME printk KERN ERR LED io Xisnotfree n GPFCON return EBUSY gpfcon ioremap nocache GPFCON 4 gpfdat ioremap nocache GPFDAT 4 gpfup ioremap nocache GPFUP 4 if gpfcon printk KERN ERR LED ioremapfailed n iounmap gpfcon return EINVAL 申请I O内存 I O内存映射 若映射不成功 释放 if gpfdat printk KERN ERR LED ioremapfailed n iounmap gpfdat return EINVAL if gpfup printk KERN ERR LED ioremapfailed n iounmap gpfup return EINVAL return0 若映射不成功 释放 若映射不成功 释放 intLED open structinode inode structfile filp printk LEDDeviceisopened n writel readl gpfcon 设为输出端口 上拉禁止 输出低电平 灯亮 输出高电平 灯灭 Release intLED release structinode inode structfile filp printk LEDDeciceisreleased n writel readl gpfcon staticvoid exitLED exit void printk UnloadingLED cdevnow n iounmap gpfcon iounmap gpfdat iounmap gpfup cdev del LED cdev unregister chrdev region LED dev count 释放内存 makefile ifneq KERNELRELEASE obj m LED chrdev oelseKERNELDIR usr src fs2410 2 6 8 PWD shellpwd default MAKE C KERNELDIR M PWD endif 最终生成LED chrdev ko的可执行文件 应用程序 include include include include include include include defineDEVICE GPIOTEST dev LED chrdev intmain intargc char argv intfd fd open DEVICE GPIOTEST O RDONLY 提供对文件控制的函数open等 提供对I O控制的函数 提供错误号errno的定义 用于错误处理 linux unix的系统调用 包含了许多系统服务的函数原型 例如read write等函数 if fd 0 perror cannotopendevice exit 1 close fd return0 makefile CC usr local 3 3 2 bin arm linux gccLD usr local 3 3 2 bin arm linux ldINCLUDE usr local 3 3 2 include LIB usr local 3 3 2 lib TEST LED TEST LED o LD rTEST LED o oTEST LEDTEST LED o TEST LED c CC O2 Wall I INCLUDE L LIB cTEST LED c oTEST LED o 最终生成TEST LED的可执行文件 将驱动程序编译进内核 在超级终端下将驱动程序LED chrdev ko和应用程序TEST LED下载到 tmp路径下执行Chmod755LED chrdev koChmod755TEST LEDInsmodLED chrdev ko TEST LED观察灯的情况 将驱动程序编译进内核 一 将驱动程序LED chrdev c放在相应的目录下 比如对于字符设备 就放置在fs2410 drivers char 二 修改drivers Makefile文件三 修改drivers Kconfig配置文件四 重新编译内核 下载 将驱动程序放在相应的目录下 修改drivers char Makefile 修改drivers char Makefile 修改drivers char Kconfig 这些将出现在内核的编译配置中 简化我们的设计 对I O端口定义的简化 加入头文件 include对I O端口操作的简化 加入头文件 include include include I O端口不同功能的定义 对特殊功能寄存器的定义 include 在中包含了对I O端口操作的函数externvoids3c2410 gpio cfgpin unsignedintpin unsignedintfunction externvoids3c2410 gpio pullup unsignedintpin unsignedintto externvoids3c2410 gpio setpin unsignedintpin unsignedintto externunsignedints3c2410 gpio getpin unsignedintpin 函数在arch arm mach s3c2410 gpio c中定义 s3c2410 gpio cfgpin 设定特定端口的功能 eg s3c2410 gpio cfgpin S3C2410 GPA0 S3C2410 GPA0 ADDR0 s3c2410 gpio cfgpin S3C2410 GPF7 S3C2410 GPF7 OUTP 将GPF7设置成输出端口 s3c2410 gpio cfgpin voids3c2410 gpio cfgpin unsignedintpin unsignedintfunction staticvoid base unsignedlongmask unsignedlongcon unsignedlongflags base ioremap nocache S3C2410 GPIO PA BASE pin 0 x0000004 if pin S3C2410 GPIO BANKB mask 1 S3C2410 GPIO OFFSET pin else mask 3 S3C2410 GPIO OFFSET pin 2 local irq save flags con raw readl base 0 x00 con 将端口对应的GPnCON寄存器进行I O内存映射 根据相应的功能对GPnCON寄存器的对应位写入相应的值 externvoids3c2410 gpio pullup unsignedintpin unsignedintto s3c2410 gpio pullup 设置特定端口的上拉 to 1 disablethepull up 0 enablethepull up 例子 s3c2410 gpio pullup S3C2410 GPB0 0 s3c2410 gpio pullup S3C2410 GPF7 1 s3c2410 gpio getpin unsignedints3c2410 gpio getpin unsignedintpin 设置特定输入端口的值 返回非0 高电平 0 低电平 例子 s3c2410 gpio getpin S3C2410 GPB0 s3c2410 gpio getpin S3C2410 GPE8 s3c2410 gpio getpin unsignedints3c2410 gpio getpin unsignedintpin staticvoid data unsignedlongoffs S3C2410 GPIO OFFSET pin data ioremap nocache S3C2410 GPIO PA BASE pin 0 x04 0 x0000004 return raw readl data 将端口对应的GPnDAT寄存器进行I O内存映射 读入GPnDAT寄存器中对应位的值 s3c2410 gpio setpin externvoids3c2410 gpio setpin unsignedintpin unsignedintto 设置特定输出端口的高 低电平 to 1 高电平 0 低电平 例子 s3c2410 gpio setpin S3C2410 GPB0 0 s3c2410 gpio setpin S3C2410 GPF7 0 对驱动程序的修改 include include 对I O端口定义的头文件 对I O端口操作的头文件 staticint initLED init void s3c2410 gpio cfgpin S3C2410 GPF7 S3C2410 GPF7 OUTP s3c2410 gpio pullup S3C2410 GPF7 1 s3c2410 gpio setpin S3C2410 GPF7 0 return EINVAL intLED open structinode inode structfile filp printk LEDDeviceisopened n s3c2410 gpio setpin S3C2410 GPF7 0 ssleep 1 s3c2410 gpio setpin S3C2410 GPF7 1 ssleep 1 s3c2410 gpio setpin S3C2410 GPF7 0 try module get THIS MODULE return0 Release intLED release structinode inode structfile filp printk LEDDeciceisreleased n s3c2410 gpio cfgpin S3C2410 GPF7 S3C2410 GPF7 INP s3c2410 gpio pullup S3C2410 GPF7 0 s3c2410 gpio setpin S3C2410 GPF7 1 module put THIS MODULE return0 中断驱动程序的简化 include include 对各个中断号的定义 对中断寄存器定义的头文件 asm arm arch s3c2410 irq h Irq 表示所要申请的中断号 中断号在include asm arm arch s3c2410 irq h中定义 asm arm arch s3c2410 irq h include 在中定义有中断操作的相关函数 可以通过extern语句加入这些函数 在中定义有中断操作的相关函数s3c irq mask unsignedintirqno 中断屏蔽s3c irq unmask unsignedintirqno 中断使能s3c irq ack unsignedintirqno 清中断挂起void inits3c2410 init irq void 中断初始化s3c irqext mask unsignedintirqno 外部中断屏蔽s3c irqext ack unsignedintirqno 清外部中断挂起s3c irqext unmask unsignedintirqno 外部中断使能 函数 s3c irq mask unsignedintirqno 参数 irqno表示中断号作用 屏蔽特定中断例子 s3c irq mask IRQ EINT0 s3c irq mask unsignedintirqno uns
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 氧化钨制备工数字化技能考核试卷及答案
- 偏钨酸铵制备工技术考核试卷及答案
- 造球工转正考核试卷及答案
- 晶片加工工新员工考核试卷及答案
- 2025年高三年级组长教学反馈与改进计划
- 电机铁芯叠装工上岗考核试卷及答案
- 法与法律规范教学设计-2025-2026学年中职专业课-经济法律法规-纳税事务-财经商贸大类
- 2025年度创始人股权分红与公司人力资源规划协议
- 2025年度房地产项目投资合同书(含物流地产)
- 2025版文化艺术外包劳动合同标准范本
- 二零二五版森林抚育项目苗木种植及管护合同2篇
- 药物作用机理创新-洞察分析
- 毕业设计(论文)-口腔助手微信小程序的设计与实现
- ICH《M10:生物分析方法验证及样品分析》
- 电力金具选型手册输电线路金具选型
- 初中开学第一课安全课件
- 2025年企业知识产权管理高效执行方案全面贯标体系实操模板集锦
- 鼻咽通气管日常护理
- 有害物质过程管理系统HSPM培训教材
- DB11T 1649-2019 建设工程规划核验测量成果检查验收技术规程
- 电磁场与电磁波(第五版)完整全套教学课件
评论
0/150
提交评论