- 1、本文档共48页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
设备驱动程序设计基础课件
设备驱动程序设计基础;本章提纲;设备驱动程序基本概念;设备驱动程序基本概念;系统调用是操作系统内核和应用程序之间的接口,而设备驱动程序是操作系统内核和设备硬件之间的接口,设备驱动程序为应用程序屏蔽了硬件的细节,这样,在应用程序看来,硬件设备只是一个设备文件(所有设备都在/dev下),应用程序可以象操作普通文件一样对硬件设备进行操作,可以使用open, read,等系统调用象操作普通文件一样操作设备文件,如open(“/dev/consle”,O_RDONLY)?等。;;此外,设备驱动程序是内核的一部分,它需要完成以下功能:1.对设备初始化和释放。2.把数据从内核传送到硬件和从硬件读取数据.(内核和设备之间的数据传递)。3.读取应用程序传送给设备文件的数据和回送应用程序请求的数据(内核空间和用户空间的数据传递)。4.检测和处理设备出现的错误。;;Linux设备驱动的分类;;;;;;;;;;/* Example Minimal Character Device Driver */
#include linux/init.h
#include linux/module.h
#include linux/kernel.h
static int __init hello_init(void)
{
printk(Hello Example Init\n);
return 0;
}
static void __exit hello_exit(void)
{
printk(Hello Example Exit\n);
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR(Chris Hallinan);
MODULE_DESCRIPTION(Hello World Example);
MODULE_LICENSE(GPL);;;;Makefile;;;初始化
任何一个驱动都去需要提供一个初始化函数,当驱动加载到内核中时,这个初始化函数就会被自动执行,初始化的函数原型定义如下:
?typedef int (*initcall_t)(void); 驱动程序是通过module_init宏来声明初始化函数的:
static int __init hello_init(void){??? printk(KERN_ALERT Hello World!\n);??? return 0;}module_init(hello_init); __init 宏告诉编译器如果这个模块被编译到内核则把这个函数放到(.init.text)段,这样当函数初始化完成后这个区域可以被清除掉以节约系统内存。Kenrel启动时看到的消息“Freeing unused kernel memory: xxxk freed”同它有关。初始化函数是有返回值的,只有在初始化成功是才返回0,否则返回错误码(errno)。
;;;内核模块相关工具;;/* Example Minimal Character Device Driver */
#include linux/module.h
static int debug_enable = 0; /* Added driver parameter */
module_param(debug_enable, int, 0);
/* and these 2 lines */
MODULE_PARM_DESC(debug_enable, Enable module debug mode.);
static int __init hello_init(void) {
/* Now print value of new module parameter */
printk(Hello Example Init - debug mode is %s\n, debug_enable ? enabled : disabled)
return 0; }
static void __exit hello_exit(void) { printk(Hello Example Exit\n); }
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR(Chris Hallinan);
MODULE_DESCRIPTION(Hello World Example); MODULE_LICENSE(GPL);;;;;;struct file_operations {?? ?struct module *owner;?
您可能关注的文档
- 嗜铬细胞瘤诊治进展10.26课件.ppt
- 失血性休克动物模型实验报告课件.ppt
- 声声慢 10月26日课件.ppt
- 华为OSN8800课件.ppt
- 实习1 常用频率指标课件.ppt
- 商务礼仪11课件.ppt
- 华为网络培训课件课件.ppt
- 守纪律,明规矩——学习《新条例》课件.ppt
- 实践与综合应用内容课件.ppt
- 实用管理学 第11章课件.ppt
- 2024-2025学年人教版小学数学四年级下册教学计划及进度表.docx
- 2024-2025学年北师大版小学数学二年级下册教学计划及进度表.docx
- 2024-2025学年人教版小学数学五年级下册教学计划及进度表.docx
- 2024-2025学年人教大同版(2024)小学英语三年级下册教学计划.docx
- 2024-2025学年人教精通版(三起)(2024)小学英语三年级下册教学计划.docx
- 2024-2025学年统编版初中道德与法治八年级下册教学计划及进度表.docx
- 2024-2025学年统编版(2024)初中道德与法治七年级下册教学计划及进度表.docx
- 2023-2024学年上海黄埔区中考二模综合测试(物理部分)试卷及答案.pdf
- 2024-2025学年外研版(三起)(2024)小学英语三年级下册教学计划及进度表.docx
- 2025届北京市北京第四中学高三冲刺模拟数学试卷含解析.doc
文档评论(0)