Драйвер устройства Linux: символ «memcpy» не найден

] Я пытаюсь написать драйвер устройства Linux. У меня он работал очень хорошо, пока я не попробовал использовать "memcpy". Я даже не получаю ошибку компилятора, когда я "делаю", он просто предупреждает меня:

ПРЕДУПРЕЖДЕНИЕ: "memcpy" [/root/homedir/sv/main.ko] undefined!

Хорошо, и когда я пытаюсь чтобы загрузить через insmod, я получаю на консоли:

insmod: ошибка при вставке './main.ko': -1 Неизвестный символ в модуле

и в dmesg:

main: Неизвестный символ memcpy (err 0)

Я включаю следующее:

#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/init.h>

#include <linux/kernel.h> /* printk() */
#include <linux/slab.h>  /* kmalloc() */
#include <linux/fs.h>  /* everything... */
#include <linux/errno.h> /* error codes */
#include <linux/types.h> /* size_t */
#include <linux/fcntl.h> /* O_ACCMODE */
#include <linux/cdev.h>
#include <asm/system.h>  /* cli(), *_flags */
#include <asm/uaccess.h> /* copy_*_user */

Функция, использующая memcpy:

static int dc_copy_to_user(char __user *buf, size_t count, loff_t *f_pos, 
        struct sv_data_dev *dev)
{
    char data[MAX_KEYLEN];
    size_t i = 0;

    /* Copy the bulk as long as there are 10 more bytes to copy */
    while (i < (count + MAX_KEYLEN)) {
        memcpy(data, &dev->data[*f_pos + i], MAX_KEYLEN);
        ec_block(dev->key, data, MAX_KEYLEN);
        if (copy_to_user(&buf[i], data, MAX_KEYLEN)) {
            return -EFAULT;
        }
        i += MAX_KEYLEN;
     }

     return 0;
 }

Может ли кто-нибудь мне помочь? Я думал, что это в linux / string.h, но все равно получаю ошибку. Я использую ядро ​​2.6.37-rc1 (я использую в пользовательском режиме linux, который работает только с версии 2.6.37-rc1). Любая помощь приветствуется.

# Context dependent makefile that can be called directly and will invoke itself
# through the kernel module building system.
KERNELDIR=/usr/src/linux

ifneq ($(KERNELRELEASE),)

EXTRA_CFLAGS+=-I $(PWD) -ARCH=um
obj-m := main.o

else

KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD = $(shell pwd)

all:
 $(MAKE) V=1 ARCH=um -C $(KERNELDIR) M=$(PWD) modules

clean:
 rm -rf Module.symvers .*.cmd *.ko .*.o *.o *.mod.c .tmp_versions *.order

endif
6
задан Fred Foo 31 December 2010 в 15:21
поделиться