2016-04-18 4 views
2

私はこのコードをコンパイルしている:不明の記号:printk_all_partitions

#include <linux/init.h> 
#include <linux/kernel.h> 
#include <linux/module.h> 
#include <linux/genhd.h> // declaration of printk_all_partitions() 


MODULE_LICENSE("GPL"); 


int __init start (void) { 

     printk ("evaluating the module ") ; 
     printk_all_partitions(); 
     printk (" module inserted .. "); 

     return 0 ; 
} 

void __exit x(void) { 
     printk ("module unloaded .."); 
} 

module_init(start); 
module_exit (x); 

MODULE_LICENSE("GPL"); 

メイクファイルは次のとおりです。

EXTRA_CFLAGS += -Wall 
obj-m += printk_all_partitions.o 

all : 
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 

clean : 
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean 

私は

WARNING: "printk_all_partitions" [/root/c++/modulez/multiple_source_files/printk_plm/printk_all_partitions.ko] undefined! 

のegrep -w「のprintkを取得するmakeを実行したときに| printk_all_partitions '/ proc/kallsyms:

私は機能がなければならないことが分かった書き込みを終えた時点で

0x27e1a049 printk vmlinux EXPORT_SYMBOL 

ffffffff8162f135 T printk 
ffffffff81ac7b46 T printk_all_partitions 

今のprintkとprintk_all_partitionsの唯一の違いは、printk_all_partitionsがModule.symvers に存在しないとのprintkがあるということです

しかし、(何とか)Modules.symversが削除され、カーネルソースが利用できなかった場合、printkとprintk_all_partitionsはどちらも "T"で始まります。 1つはエクスポートされているかどうか知っていますか?

答えて

1

通常、このライン

obj-m += printk_all_partitions.o 

は、作成しようとしているモジュールの名前です。この場合、既存のシンボルと同じ名前を付けていますが、意図的なのでしょうか?

関連する問題