嵌入式原理与设计 第10章 linux内核驱动原理

嵌入式原理与设计 第10章 linux内核驱动原理

ID:9972680

大小:245.52 KB

页数:27页

时间:2018-05-12

嵌入式原理与设计 第10章 linux内核驱动原理_第1页
嵌入式原理与设计 第10章 linux内核驱动原理_第2页
嵌入式原理与设计 第10章 linux内核驱动原理_第3页
嵌入式原理与设计 第10章 linux内核驱动原理_第4页
嵌入式原理与设计 第10章 linux内核驱动原理_第5页
资源描述:

《嵌入式原理与设计 第10章 linux内核驱动原理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第10章Linux内核驱动原理第10章Linux内核驱动原理10.1Linux驱动程序概述10.2Linux驱动程序的相关知识10.3驱动程序的结构10.1Linux驱动程序概述Linux驱动程序概念Linux驱动程序分类Linux驱动程序概念在Linux中,系统调用是内核(kernel)和应用程序之间的接口,而设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。Linux中将所有设备视为文件。Linux驱动程序分类在

2、Linux操作系统的驱动程序分成三种类型:字符设备(chardevice)块设备(blockdevice)网络设备(netdevice)Linux驱动程序分类字符设备字符设备特殊文件进行I/O操作不经过操作系统的缓冲区,进行I/O操作时每次只传输一个字符。典型的字符设备如:鼠标、键盘、串口等。字符设备可以通过字符设备文件来访问。Linux驱动程序分类块设备使用随机访问的方式传输数据,并且数据总是具有固定大小的块。为了提高数据传输效率,块设备驱动程序内部采用块缓冲技术。典型的块设备如:光盘、硬盘、软盘等。块设备可以通过网络块文件来访问。Linux驱动

3、程序分类网络设备是一种特殊的设备,与字符设备和块设备不同,网络设备并没有文件系统的节点,也就是说网络设备没有设备文件。在Linux的网络系统中,使用UNIX的socket机制。系统与驱动程序之间通过专有的数据结构进行访问。系统内部支持数据的收发,对网络设备的使用需要通过socket,而不是文件系统的节点。网络设备最重要的特点是没有文件系统的节点。10.2Linux驱动程序的相关知识内核模块的作用模块的编程结构和使用内核模块编写的注意事项Linux设备文件Linux对设备文件的操作设备文件相关的数据结构内核模块的作用Linux设备驱动属于内核的一部分

4、,它可以使用两种方式被编译和加载:1、直接编译进Linux内核,随同Linux启动时加载,随时可以使用驱动程序;2、编译成一个可加载和删除的模块,使用insmod加载,rmmod删除。内核模块的作用模块插入(rmmod)后,运行在内核空间模块的编程结构和使用#include#include#include#include#include/*函数声明*/staticintmodule_init(voi

5、d);staticvoidmodule_cleanup(void);/*注册模块函数*/module_init(module_init);module_exit(module_cleanup);声明模块的初始化和卸载函数使用两个宏注册模块的初始化和卸载函数模块的编程结构和使用/*模块初始化*/staticintmodule_init(void){printk(KERN_CRIT"moduleinitfails");return0;}/*模块退出*/staticvoidmodule_cleanup(void){printk(KERN_CRIT"m

6、oduleinitexif");return;}Linux模块中的函数声明为static,它们不会被直接调用。使用注册的方式调用。内核模块编写的注意事项内存分配函数:模块运行在内核空间内,它并没有链接C语言标准的函数库。因此,内存分配不能使用C语言的库函数malloc()和free(),而需要使用内核空间的对应函数。这两个函数定义在slab.h中。#includevoid*kmalloc(size_tsize,intflags);voidkfree(constvoid*);比malloc()多一个参数。内核模块编写的

7、注意事项由于不能使用C语言库,在内核中打印调试信息也不能使用printf。在打印调试信息的功能上,内核应该使用内核的打印函数printk。printk在kernel/printk.c中定义和实现:intprintk(constchar*fmt,...)printk(KERN_DEBUG"priority=7");printk(KERN_INFO"priority=6");printk(KERN_NOTICE"priority=5");printk(KERN_WARNING"priority=4");printk(KERN_ERR"p

8、riority=3");printk(KERN_CRIT"priority=2");printk(KERN_ALE

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

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

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