帮个忙,初学kernel编程遇到问题了!请帮个忙看看!!

初学kernel编程遇到问题了!请帮个忙看看!! - 故障解答 - 电脑教程网

初学kernel编程遇到问题了!请帮个忙看看!!

日期:2006-06-27   荐:
初学kernel编程遇到问题了!请帮个忙看看!!程序如下#include <linux/kernel.h>#include <linux/module.h>int init_module(){ printk("hello world."); return 0;}void cleanup_module(){ printk("GoodBy.");}Makefile如下:# Makefile for a basic kernel moduleCC=gccMODCFLAGS := -Wall -DMODULE -D__KERNEL__ -DLINUXhello.o: hello.c ./usr/include/linux/version.h$(CC) $(MODCFLAGS) -c hello.c执行make后提示如下错误:Makefile:5:*** missing separator. Stop.这个是什么意思啊?它说明的Makefile里错误怎么改啊?如果我不用make,直接:gcc -Wall -DMODULE -D__KERNEL__ -DLINUX -c hello.c则可生成hello.o文件。然后执行insmod hello.o后系统提示:hello.o: kernel-module version mismatch hello.o was compiled for kernel version 2.4.9-9 while this kernek is version 2.4.18-14这是怎么回事啊?我用的是red hat linux 8.0,hello.o 怎么会被编译成2.4.9-9的module呢?这个问题该怎么解决呢?谢谢了先!第二个问题基本解决了。原因是内核与源码版本不一致的问题。内核是2.4.18-14,而version.h里定义为2.4.9-9,把version.h里的改成和内核一致就可以了,(虽然问题解决了,但我不知道这样改对吗?会不会引起别的什么副作用啊??)但是加载后有warning:Warning: loading hello.o will taint the kernel: no license这个怎么解决呢?还有Makefile的问题没有解决,那位知道的话还请赐教啊!对Makefile问题的解答:错误处在对Makefile规则的不清楚上。正确的格式为:hello.o: hello.c ./usr/include/linux/version.h $(CC) $(MODCFLAGS) -c hello.c$(CC)前面应该是个制表符。顺便问一下,如果我想在Makefile里加一些echo语句在make的时候在屏幕上打印一些提示语句的话,应该怎么修改Makefile? 看一下《linux设备驱动程序》里面对你的问题解释的很清楚Warning: loading hello.o will taint the kernel: no license这个怎么解决呢?这样解决:在程序的任何函数的外面加上:MODULE_LICENSE("GPL");多谢各位了。还想问一下,内核与源代码的版本怎么会出现不一致呢,随系统安装上的源码不就应该是与内核同一个版本的吗?为什么会出现这种不一致情况呢?
标签: