Linux驱动序开发.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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权限来运行make insmod helloworld.ko rmmod 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

文档评论(0)

hhax1 + 关注
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档