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 用于调试的信息