我试着编译简单的内核模块。但接受以下信息
--------------------------------------------------------------------------------

make -C /lib/modules/3.18.3/build SUBDIRS=/home/sekwon/study/tree/b+tree modules
make[1]: Entering directory `/home/sekwon/study/linux-3.18.3'
Building modules, stage 2.
MODPOST 1 modules
WARNING: "btree_insert" [/home/sekwon/study/tree/b+tree/lsk_b+tree.ko] undefined!
WARNING: "btree_geo32" [/home/sekwon/study/tree/b+tree/lsk_b+tree.ko] undefined!
WARNING: "btree_init" [/home/sekwon/study/tree/b+tree/lsk_b+tree.ko] undefined!
WARNING: "btree_destroy" [/home/sekwon/study/tree/b+tree/lsk_b+tree.ko] undefined!
make[1]: Leaving directory `/home/sekwon/study/linux-3.18.3'

--------------------------------------------------------------------------------
下面是我的模块源代码
--------------------------------------------------------------------------------
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/btree.h>

struct btree_head bptree_head;

static int bptree_init(void)
{
   int i, val[10];
   unsigned long key[10];
   int result;
   printk(KERN_ALERT"B+tree start!\n");

   for(i = 0; i < 10; i++)
   {
       key[i] = 1*(i+1);
       val[i] = 10*(i+1);
   }

   result = btree_init(&bptree_head);

   for(i = 0; i < 10; i++)
   {
       result = btree_insert(&bptree_head, &btree_geo32, &key[i], &val[i], 0);
       printk(KERN_ALERT"Insert key(%ld) val(%d)\n",key[i],val[i]);
   }

   printk(KERN_ALERT"Insert finish\n");
   return 0;
}

static void bptree_exit(void)
{
    printk(KERN_ALERT "B+tree finish\n");
    btree_destroy(&bptree_head);
}

module_init(bptree_init);
module_exit(bptree_exit);

MODULE_LICENSE("Dual BSD/GPL");

--------------------------------------------------------------------------------
下面是我的Makefile
--------------------------------------------------------------------------------
obj-m   :=lsk_b+tree.o

KDIR    :=/lib/modules/$(shell uname -r)/build
PWD     :=$(shell pwd)

default:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

clean:
    rm -rf *.ko
    rm -rf *.mod.*
    rm -rf .*.cmd
    rm -rf *.o

--------------------------------------------------------------------------------
哪一个有问题??
请帮帮我~!!

最佳答案

我解决了这个问题!!
我发现编译后的内核模块不包括B树模块(B Tree)
所以,我试图更改编译B树模块的配置

10-05 20:50
查看更多