嵌入式Linux驱动开发课件.ppt

嵌入式Linux驱动开发课件.ppt

ID:57064618

大小:1.82 MB

页数:39页

时间:2020-07-30

嵌入式Linux驱动开发课件.ppt_第1页
嵌入式Linux驱动开发课件.ppt_第2页
嵌入式Linux驱动开发课件.ppt_第3页
嵌入式Linux驱动开发课件.ppt_第4页
嵌入式Linux驱动开发课件.ppt_第5页
资源描述:

《嵌入式Linux驱动开发课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、嵌入式Linux驱动开发课程安排Linux设备驱动概念字符设备驱动开发设备驱动硬件操作设备操作层次Linux系统软件层次应用程序库内核驱动程序的关系什么是设备驱动程序1作为操作系统的一部分(OS=Kernel+DeviceDriver)向上为Linux系统提供访问硬件统一调用接口向下用于控制硬件:与Arm裸机程序一样,通过读写硬件寄存器达到控制硬件的目的2、驱动程序的运行是被动的驱动只是告诉内核”我在这里,我能做这些工作”:向内核注册这些工作何时开始,取决于应用程序:应用触发驱动设备驱动分类1、

2、字符设备驱动设备以字节流方式访问(以字节为单位读写)字符设备驱动实现了open、close、read、write等系统调用应用程序通过设备文件(如/dev/ttySAC0)访问设备设备驱动分类2、块设备驱动设备上的数据以块的方式存放(如NAND上的数据以页为单位)块设备驱动程序也向用户层提供open、close、read、wrtie应用通过设备文件(如/dev/sda1)来访问设备块设备驱动特别之处:(1)、操作硬件的实现方式不一样:先将数据组织成块,再操作设备(2)、数据块上的数据按照一定的格

3、式组织:存放文件系统,实现mount设备驱动分类3、网络设备驱动设备上的数据以不固定大小的帧输入与输出没有/dev上对应的设备文件,不通过open、read、write操作系统为网络设备访问分配唯一接口(如eth0)为应用层提供一套数据包传输函数访问接口(SOCKET)设备驱动架构设备驱动开发步骤1、查看原理图、数据手册,了解设备的操作方法2、在内核中找到相近的驱动程序,以它为模板开发3、实现驱动程序的初始化,并向内核注册4、按照内核规定的驱动框架,实现相关操作函数(如open、read、wri

4、te)5、编译驱动程序到内核中,或者编译成模块并挂载(insmod)到内核直接编译进内核将驱动模块源码合入内核源码设备驱动程序应包含在drivers子目录首先确认是否存在于设备驱动程序特性相似的目录名存在则插入相应目录,否则字符类型插入char目录,块类型插入block目录,网络类型插入net目录直接编译进内核修改内核编译选项文件Linux内核支持使用内核编译选项包含到内核中的功能makemenuconfig读入这些内核编译选项文件来配置内核2.6内核编译选项文件为KConfig进入合入了驱动模

5、块的目录,修改改目录下的KConfig,使得合入的驱动能在配置项中显示直接编译进内核Kconfig选项文件语法configHELLO_WORLDbool“helloworld”helpThisisademomakemenuconfig选中“helloworld”,配置完成后在.config中加入CONFIG_HELLO_WORLD=y选项直接编译进内核修改内核源代码中的MakefileMakefile指定了驱动程序的编译规则,使得驱动程序能包含到内核image中Makefile根据makemen

6、uconfig配置设定的编译条件变量,决定是要把特定源代码编译成模块还是包含到内核中,或者是清除。进入合入了驱动模块的目录,修改改目录下的Makefile,使得合入的驱动源码能编译进内核直接编译进内核Makefile文件语法Obj-$(CONFIG_HELLO_WORLD)+=hello_world.o根据配置,CONFIG_HELLO_WORLD可以设置为“y”、“m”、“n”或者“”根据内核编译选项的符号决定包含到内核中或者编译为模块,或者不编译。直接编译进内核确认合入内核的驱动在内核启动时

7、自动运行重新编译并启动新内核,dmesg=>确认“helloworld”已打印出来带__int标志的函数被放入初始化代码段,内核会依次调用初始化代码段的函数模块范例由HelloWrold开始#include#includestaticinthello_init(void){printk(KERN_WARNING"Hello,world!");return0;}staticvoidhello_exit(void){printk(KER

8、N_INFO"Goodbye,world");}module_init(hello_init);module_exit(hello_exit);与应用程序的区别?(main函数?printk?)模块范例1、模块加载函数(必需)安装模块时被系统自动调用的函数,通过module_init宏来指定2、模块卸载函数(必需)卸载模块时被系统自动调用的函数,通过module_exit宏来指定模块范例3、使用Makefile编译内核模块模块范例加载insmod(insmodhello.ko)卸载rmmod

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

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

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