|
我写了一个简单的驱动:
main.c:
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/errno.h>
//#include <linux/kmalloc_sizes.h>
#include <linux/slab.h>
#include <linux/mm.h>
MODULE_LICENSE("GPL");
int *j;
static int hello_init(void)
{
j = kmalloc(sizeof(int),GFP_KERNEL);
*j = 10;
printk(KERN_EMERG "hello,world:modele_init\r\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_EMERG "aaaaa\n");
printk(KERN_EMERG "j = %d\n",*j);
printk(KERN_EMERG "hello,world:modele_exit\n");
kfree(j);
}
module_init (hello_init);
module_exit (hello_exit);
..........................................................
Makefile:
ifneq ($(KERNELRELEASE),)
# call from kernel build system
obj-m := main.o
else
KERNELDIR ?= /usr/src/linux-2.6.30.4
#KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.bak *.order *.symvers
depend .depend dep:
$(CC) $(EXTRA_CFLAGS) -M *.c > .depend
ifeq (.depend,$(wildcard .depend))
include .depend
endif
...............................................................................................................
我的配置环境为: 把TQ2440_CD的Linux源码包2.6.30.4解压到了/usr/src/linux-2.6.30.4 ,同时按照《天嵌科技出品-Linux移植之Step By Step_V4.2_20100125.pdf>>编译了zImage, 并且板子的版本我通过uname -r 得知是:2.6.30.4-EmbedSky ,与我使用的内核源代码树一致。
我的问题: 如果我在上面的驱动代码main.c中不使用kmalloc/kfree分配/释放内存,我编译后的驱动程序可以在TQ2440的板子上正常运行,但当我测试kmalloc\kfree的时候,能够
编译驱动成功,但在板子上运行insmod main.ko的时候, 出现 unknown symbol malloc_sizes的问题,然后我在/usr/src/linux-2.6.30.4/mm/slab.c文件中有 malloc_sizes,请问我该如何解决? |
|