2012年7月6日 星期五
編kernel module遇到一些麻煩
因為工作需要,不時會寫一些小kernel module來用
以往只有一個.c檔, abc.c, Makefile就很簡單.
編出來的module自然就是abc.ko
------------------------------------------------------------
#
# Makefile for abc driver
#
obj-m = abc.o
------------------------------------------------------------
不過因這次內容有點多,
就依功能把分成兩個檔案 abc.c, xyz.c
同時也修改一下Makefile
------------------------------------------------------------
#
# Makefile for abc driver
#
obj-m = abc.o
abc-objs += xyz.o
------------------------------------------------------------
順利地把abc.ko編出來,沒有compile error.
也有看到abc.o, xyz.o等也都編出來.
但module load進去後功能並不如預期.
反覆試了幾次, 發現連module insert成功的message也沒印出來.
後來把module檔dump出來一看
# objdump -S abc.ko
發現裡面只有包括xyz.c內容,
abc.o雖然有編出來,但裡面的內容跟xyz.o完全一樣,
來看是abc.c完全沒有被編到....
這時才發現Makefile的寫法一整個就是錯誤.
把Makefile改寫後編出來的module再變正常~
改寫後的Makefile:
------------------------------------------------------------
#
# Makefile for abc driver
#
obj-m = aaa.o
aaa-objs += xyz.o
aaa-objs += abc.o
------------------------------------------------------------
不過這樣編出來的module檔名會是 aaa.ko
難道是有多個.c檔時,module的名字就不可以跟其中某個檔案一下?
改天再來研究看看...
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言