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つはエクスポートされているかどうか知っていますか?