LIUNX驱动中内核模块与编译模块不匹配解决方案

上一篇 / 下一篇  2008-01-07 13:37:14

在写LINUX驱动中会出现内核模块和编译模块不匹配的问题 例如在REDHAT9.0 中有内核版本2.4.20-8

其实还是2.4.20的内核,后面的-8表示需要的补丁包号。如果不加载补丁,在编译驱动程序时,内核仍然会用2.4.20 去编译。也能够正常编译。但在加载驱动模块时,就不能正常加载。对于这种情况有几种解决方案

(1)指定编译的头文件  I/usr/src/linux-2.4.20-8/include

(2)强制性加载  inmod  -f **.o

对于强制性加载会发出警告,但可以不理会他。

 建议用第一种方案。

对第一种方案的Makefile 可以这样写。

CC = gcc

INCLUDEDIR= /usr/src/linux-2.4.20-8/include

CFLAGS = -D__KERNEL__ -D__MODULE -I/$(INCLUDEDIR)

ifdef CONPIG_SMP

CFLAGS += -D__SMP__ -DSMP

endif

EXEC = hello

OBJC= hello.o

SRC =hello.c

all : $(EXEC)

$(OBJC): $(SRC)

          $(LD) -r $^ -o $@

clean:

       rm -f *.o *~core

 117-102 117-301 190-721 000-746


TAG:

引用 删除 Guest   /   2008-07-13 19:23:10
3
您写的Makefile中缺少关于LD的定义.另外据<linux设备驱动程序>中国电力出版社ISBN7-5083-0221-4第26页的介绍,并不需要连接.那LD的具体的作用是什么?手动按照您给的方法完成了编译,加载后有警告,但提示已经加载,但是不能按照该书同页介绍的方法卸载.能否指点一二.谢谢.
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-10-16  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 1796
  • 日志数: 21
  • 建立时间: 2007-08-23
  • 更新时间: 2008-03-11

RSS订阅

Open Toolbar