欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    嵌入式应用程序设计设备驱动.ppt

    • 资源ID:2870004       资源大小:310.02KB        全文页数:24页
    • 资源格式: PPT        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    嵌入式应用程序设计设备驱动.ppt

    嵌入式应用程序设计第八章 嵌入式Linux设备驱动编程,知识点回顾,TCP/IP模型套接字TCP 套接字编程UDP 套接字编程,滨州学院计算机科学技术系吴殿红,设备驱动的基本概念Linux内核与驱动的关系Linux内核模块结构内核模块命令,本次课内容,滨州学院计算机科学技术系吴殿红,1.设备驱动概念 是处理和操作硬件控制器的软件。驱动程序是内核的一部分,是操作系统内核与硬件设备的直接接口,驱动程序屏蔽了硬件的细节,完成以下功能:对设备初始化和释放;对设备进行管理,包括实时参数设置,以及提供对设备的操作接口;读取应用程序传送给设备文件的数据或者回送应用程序请求的数据;检测和处理设备出现的错误。,8.1 设备驱动编程基础设备驱动,滨州学院计算机科学技术系吴殿红,2.Linux系统的设备分类字符设备通常指以字节为单位顺序读写的设备,如并口设备、虚拟控制台等。块设备通常指以块为单位随机读写的设备,如IDE硬盘、SCSI硬盘、光驱等。网络设备通常是指通过网络能够与其他主机进行数据通信的设备,如网卡等。,8.1 设备驱动编程基础设备驱动,举例:linux设备识别,在linux中任何设备都是文件。所有设备的设备文件节点都在/dev目录下。#:ls al/dev,滨州学院计算机科学技术系吴殿红,3.设备驱动程序的特点 内核代码 内核接口 内核机制和服务 可装载 可设置 动态性,8.1 设备驱动编程基础设备驱动,滨州学院计算机科学技术系吴殿红,4.设备驱动程序与整个软硬件系统的关系,8.1 设备驱动编程基础设备驱动,滨州学院计算机科学技术系吴殿红,1.Linux的内核模块Linux内核采用可加载内核模块化设计(Loadable Kernel Module,LKM)内核模块:是一些可以让操作系统内核在需要时载入和执行的代码。是一种目标对象文件,通常由一组函数和数据结构组成。内核的一个模块可以以两种方式被编译和加载。直接编译进Linux内核,随同Linux启动时加载;编译成一个可加载和删除的模块。,8.1 设备驱动编程基础内核模块编程,8.1 设备驱动编程基础内核模块编程,C语言程序 Linux内核模块运行 用户空间 内核空间入口 main()module_init()指定;出口 main()module_exit()指定;编译 gcc c Makefile连接 ld insmod运行 直接运行 insmod调试 gdb kdbug,kdb,kgdb等,2.Linux内核模块与应用程序的区别,8.1 设备驱动编程基础内核模块编程,3.内核模块相关命令insmod module.oLoad the module注意,只有超级用户才能使用这个命令rmmod module Unload the modulelsmodList all modules loaded into the kernel这个命令和cat/proc/modules等价modprobe-r Load the module specified and modules it depends,举例:模块相关命令,lsmodinsmod hello.ormmod hellomodprobe/lib/modules/linux版本号/modules.dep/etc/modprobe.conf modeproble r hello,最简单的内核模块例子,#include#include#includeMODULE_LICENSE(GPL);static int _init hello_init(void)printk(“Hello kernel.n);return 0;static void _exit hello_exit(void)printk(“bye bye.n);module_init(hello_init);module_exit(hello_exit);,生成makefile文件,Makefile文件obj-m:=hello.oall:make-C/usr/src/linux-2.4.20/M=$(shell pwd)modulesclean:make-C/usr/src/linux-2.4.20/M=$(shell pwd)modules clean,编译装载过程,$lshello.c Makefile$makemake-C/usr/src/linux-2.4.20/M=/wu/char_8 modules$lshello.c hello.mod.c hello.mode.o hello.omake.log Makefile modules.order$sudo insmod hello.o$dmesg|tail-1Hello kernel$lsmod|grep hellohello 1216 0$sudo rmmod hello$dmesg|tail-1bye bye.,不需要编写Makefile的方法,gcc编译后加上-DMODULE-DLINUX 参数例如:gcc-DMODULE-DLINUX-I/usr/src/linux-2.4.20/include-c-o hello.o hello.c 注意:-I选项跟着Linux内核源代码中Include目录的路径。,滨州学院计算机科学技术系吴殿红,4.内核模块的程序结构一个Linux内核模块主要由以下几个部分组成。模块加载函数(必须)模块卸载函数(必须)模块许可证声明(必须)模块参数(可选)模块导出符号(可选)模块作者等信息声明(可选),8.1 设备驱动编程基础内核模块编程,滨州学院计算机科学技术系吴殿红,static int _init initialization_function(void)/*初始化代码*/module_init(initialization_function);,模块加载函数,滨州学院计算机科学技术系吴殿红,static void _exit cleanup_function(void)/*释放代码*/module_exit(cleanup_function);,模块卸载函数,滨州学院计算机科学技术系吴殿红,module_param(参数名,参数类型,参数读/写权限访问许可掩码)宏为模块声明一个参数支持的参数类型byte,short,ushort,int,uint,long,ulong,bool,charp,invboolarray(module_param_array(name,type,nump,perm)例如:static char*str_param=Linux Module Program;static int num_param=4000;module_param(num_param,int,S_IRUGO);module_param(str_param,charp,S_IRUGO);参数在模块加载时传递#insmod hello.o test=2,模块参数,滨州学院计算机科学技术系吴殿红,导出符号EXPORT_SYMBOL(符号名);EXPORT_SYMBOL_GPL(符号名);模块声明与描述MODULE_AUTHOR(author);MODULE_DESCRIPTION(description);MODULE_VERSION(version_string);MODULE_DEVICE_TABLE(table_info);MODULE_ALIAS(alternate_name);,导出符号与模块声明与描述,#include#include#include static char*whom=world;static int howmany=1;module_param(howmany,int,0444);module_param(whom,charp,S_IRUGO);static int _init hello_init(void)int i;for(i=0;i howmany;i+)printk(“(%d)Hello,%sn”,i,whom);return 0;static void _exit hello_exit(void)printk(Goodbye worldn);MODULE_LICENSE(GPL);MODULE_DESCRIPTION(“A simple module program”);MODULE_VERSION(“V1.0”);MODULE_AUTHOR(“wdh);module_init(hello_init);module_exit(hello_exit);,举例:带参数的内核模块,sudo insmod hello.o howmany=10 whom=Tom,小结,设备驱动概念Linux中设备驱动的分类内核模块的两种编译加载方式内核模块编程思考:改进前面程序,

    注意事项

    本文(嵌入式应用程序设计设备驱动.ppt)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开