如何构建Linux模块

来源:互联网 发布:c语言联合与结构的使用 编辑:程序博客网 时间:2024/05/15 01:28

如何构建Linux模块


http://blog.sina.com.cn/s/blog_520ff7d50100k30u.html 原文

  

Sourcecode:

Hello.c

#include <linux/init.h>

#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)

{

           printk(KERN_ALERT "Hello, world\n");

           return 0;

}

static void hello_exit(void)

{

           printk(KERN_ALERT "Goodbye, cruel world\n");

}

 

module_init(hello_init);

module_exit(hello_exit);

 

Makefile

obj-m :=hello.o

K_DIR = $(shell uname -r)

PWD = $(shell pwd)

all:

           make -C /lib/modules/$(K_DIR)/build M=$(PWD) modules

clean:

           make -C /lib/modules/$(K_DIR)/build M=$(PWD) clean

 

如果模块有多个文件,可以这样写

obj-m :=scull.o

scull-objs := main.o pipe.o access.o

将生成scull.ko模块

 

模块安装:insmod hello.ko

显示已装载的模块:lsmod

模块卸载:rmmod hello

 

编译环境fedro9 kernel 2.6.25-14.fc9.i686

安装内核源码包:

rpm –Uvh kernel-2.6.25-14.fc9.i686.src.rpm

这个命令将 RPM 内容写到路径 /usr/src/redhat/SOURCE

我把代码2.6.25解到/usr/src/kernels/2.6.25-14.fc9.i686下,这和我的模块编译用的Makefile有关。

 

可能遇到的问题

1.出现很多编译错误

到kernel所在目录执行make prepare/ make config,这是没有配置好源码树的原因。可能还需要KBUILD

 

2.错误提示: /bin/sh: scripts/mod/modpost: No such file ordirectory

出现这样的错误,说明scripts下没有生成相应的文件MODPOST,cd到kernel所在目录,执行: makescripts

 

3.安装时失败,提示invalid moduleformat,多是因为编译依据的内核与操作系统不一致(装载时会做很多检查,比如是否支持SMP,这些都是通过makeconfig设置的,也可以将/boot/config-2.6.25-14.fc9.i686拷贝到内核源代码目录下如/usr/src/kernels/2.6.25-14.fc9.i686),首先要保证内核与操作系统一致。

然后,需要修改kernel源代码根目录下的Makefile

EXTRAVERSION = -14.fc9.i686 (这个值根据uname –r的返回结果修改,我的为2.6.25-14.fc9.i686)

 

4.如果没有看到打印信息可以到文件/var/log/messages中去找


0 0
原创粉丝点击