- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux驱动序开发
Linux驱动程序开发 - 驱动程序基本框架
育龙网?WWW.CHINA-B.C0M?? 2009年06月11日??来源:互联网
育龙网核心提示: 前言 不管是Windows还是Linux,驱动程序都扮演着重要的角色。应用程序只能通过驱动程序才能同硬件设备或系统内核通讯。Linux内核对不管是Windows还是Linux,驱动程序都扮演着重要的角色。应用程序只能通过驱动程序才能同硬件设备或系统内核通讯。Linux内核对不同的系统定义了标准的接口(API),应用程序就是通过这些标准的接口来操作内核和硬件。驱动可以被编译的内核中(build-in),也可以做为内核模块(Module)存在于内核的外面,需要的时候动态插入到内核中运行。
就像你学习操作系统概念时所了解的那样,Linux内核也分为几个大的部分:进程管理、内存管理、文件系统、设备控制、网络系统等,参考图1-1。
这里就不对Linux系统内核的各个部分做过多的介绍了,在后面的学习中你就会逐渐地对这些概念有个更深入的了解。其实Linux内核的精髓远不止这些,对于一个Linux内核的爱好者或开发者来说,最好详细的浏览内核源代码,订阅Linux内核相关的邮件列表,或是登陆Linux开发社区。更多的信息,请登陆Linux内核官方网站:
一个简单的驱动
下面我们来编写第一个驱动程序,它很简单,在运行时会输出‘Hello World’消息。
// hello.c#include linux/init.h
#include linux/module.h
#include linux/kernel.h
static int __init hello_init(void)
{ printk(KERN_ALERT Hello World!\n); return 0;}static void __exit hello_exit(void)
{ printk(KERN_ALERT Goodbye World!\n);}module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE(GPL);
这就是一个简单的驱动程序,它什么也没做,仅仅是输出一些信息,不过对于我们来说这已经足够了。保存这个程序,命名为hello.c。在写一个Makefile文件用来编译它,Makefile和hello.c文件保存在同一个目录下。
##Makefileifneq ($(KERNELRELEASE),)MODULE_NAME = helloworld$(MODULE_NAME)-objs := hello.oobj-m := $(MODULE_NAME).oelseKERNEL_DIR = /lib/modules/`uname -r`/buildMODULEDIR := $(shell pwd).PHONY: modulesdefault: modulesmodules: make -C $(KERNEL_DIR) M=$(MODULEDIR)
modulesclean distclean: rm -f *.o *.mod.c .*.*.cmd *.ko rm -rf .tmp_versionsendif 编译并运行这个模块:
//需要root权限来运行makeinsmod helloworld.kormmod helloworld.ko
尽管我们对它的一些细节还不够了解,它确实神奇的工作了,这个Hello World信息输出到了屏幕终端上,你可以通过运行dmesg来看到这些信息。
驱动基础 我们通过分析上面的代码来了解一个驱动程序的基本概念。
头文件 就像你写C程序需要包含C库的头文件那样,Linux内核编程也需要包含Kernel头文件,大多的Linux驱动程序需要包含下面三个头文件:
#include linux/init.h#include linux/module.h#include linux/kernel.h
init.h 定义了驱动的初始化和退出相关的函数, kernel.h 定义了经常用到的函数原型及宏定义 module.h 定义了内核模块相关的函数、变量及宏。 初始化 任何一个驱动都去需要提供一个初始化函数,当驱动加载到内核中时,这个初始化函数就会被自动执行,初始化的函数原型定义如下:
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);
__ini
您可能关注的文档
- IGBT组成的流斩波调速系统设计(论文).doc
- III型专变采终端公网技术协议(试用).doc
- imagewae12.1 的学习笔记.doc
- iOS应用架构-开篇.docx
- IPO史上最严查令凸显会计师地位.doc
- IPQC及不合处理.doc
- IQC来料检验样标准.doc
- ISW卧式离心选型参数表.docx
- ITU内部知识权披露管理分析.doc
- IT公司月份工总结.doc
- 2024年证券分析与咨询服务项目投资申请报告代可行性研究报告.docx
- 2024年铬酸酐项目资金申请报告代可行性研究报告.docx
- 2024年清洁胶项目资金申请报告代可行性研究报告.docx
- 2024年肉松饼项目投资申请报告代可行性研究报告.docx
- 2024年陆上泵项目资金需求报告代可行性研究报告.docx
- 2024年未硫化复合橡胶及其制品项目资金需求报告代可行性研究报告.docx
- 2024年精密温控节能设备项目资金筹措计划书代可行性研究报告.docx
- 2024年汽车覆盖件模具项目资金筹措计划书代可行性研究报告.docx
- 宋词行书钢笔字帖.pdf
- 我的暑假生活作文三年级300字10篇.pdf
最近下载
- 集体备课简报(精选12篇).doc
- 探究锥体的体积公式.PPT
- 华医网2024年基于核心胜任力的灾害救护能力的提升课后练习答案.docx
- 国家工作人员“低买高卖”行为之法律定性-—以张某、刘某贪污案为例.pdf
- 北师大版(2024)一年级数学上册课件 1.1 走进美丽乡村(1).pptx VIP
- 住院患者安全教育PPT参考幻灯片.ppt
- 群体传播与组织传播.ppt VIP
- 2022-2024年国际经济与贸易专业人才培养调研报告.docx VIP
- 小学数学项目化教学这:基于教学评一体化的大单元整体设计《测量》.pdf VIP
- 2024年深化党建引领推进“五治融合”加强基层治理体系和治理能力现代化建设实施方案.docx VIP
文档评论(0)