2建立和运行模块

2.4编译和加载

基本编译命令obj-m := hello.o

obj-m命令属于kbuild,只有指定源码树,才能执行此命令,因为此命令存在于源码树的scrip文件夹内。

 

当出现多文件时

obj-m := module.o

module-objs := file1.o file2.o

 

在终端下运行下面make命令,才能编译

make -C /usr/src/linux-headers-2.6.38-8-generic M=/home/anthony/workspace/emacsproject/driver/ modules

-C指定内核源码目录

M指定试图建立的目标目录

 

一个简单的makefile文件实例

ifneq ($(KERNELRELEASE),)

    obj-m := hello.o

else

    KERNELDIR ?= /lib/modules/$(shell uname -r)/build

    PWD := $(shell pwd)

default:

    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

endif

 

如果运行错误:

1)源码目录指定错误(目录里面不是真正的源代码文件,只是一些编译文件,包括各种makefile)

2)如果说Makefile文件找不到,就是文件名错误,修改成指定的文件名即可,比如Makefile,因为源码树里面使用的是Makefile

------------------------------------------------------------------------------

2.4.3 版本依赖

模块代码需要为每个它要连接的内核版本重新编译。

UTS_RELEASE

这个宏定义扩展成字符串,描述了这个内核树的版本。

LINUX_VERSION_CODE

这个宏定义扩展成内核版本的二进制形式,版本号发行号的每个部分用一个字节表示。例如2.6.10 编码132618(0x02060a)

KERNEL_VERSION(major,minor,release)

这个宏定义用来建立一个整形版本编码,从组成一个版本号的单个数字。

2.6模块参数

 

 

KERN_EMERG 用于紧急事件,一般是系统崩溃前的提示信息

  KERN_ALERT 用于需要立即采取动作的场合

  KERN_CRIT 临界状态,通常设计验证的硬件或软件操作失败

  KERN_ERR 用于报告错误状态.设备驱动程序通常会用它报告来自硬件的问题

  KERN_WARNING 就可能出现的问题提出警告.这些问题通常不会对系统造成严重破坏

  KERN_NOTICE 有必要提示的正常情况.许多安全相关的情况用这个级别汇报

  KERN_INFO 提示性信息.有很多驱动程序在启动时用这个级别打印相关信息

  KERN_DEBUG 用于调试的信息

你可能感兴趣的:(linux设备驱动程序)