加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux设备驱动程序:找不到符号“memcpy”

发布时间:2020-12-14 01:56:08 所属栏目:Linux 来源:网络整理
导读:我正在尝试编写 Linux设备驱动程序.我已经让它工作得很好,直到我尝试使用“memcpy”.我甚至没有得到编译器错误,当我“制造”它只是警告我: 警告:“memcpy”[/root/homedir/sv/main.ko]未定义! 好的,当我尝试通过insmod加载时,我进入控制台: insmod:插入
我正在尝试编写 Linux设备驱动程序.我已经让它工作得很好,直到我尝试使用“memcpy”.我甚至没有得到编译器错误,当我“制造”它只是警告我:

警告:“memcpy”[/root/homedir/sv/main.ko]未定义!

好的,当我尝试通过insmod加载时,我进入控制台:

insmod:插入’./main.ko’时出错:-1模块中的未知符号

在dmesg上:

main:未知符号memcpy(错误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],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

解决方法

I’m doing it in user-mode-linux

您可以尝试没有用户模式Linux吗?

内核不与libc链接,但UML是一个例外.这可以解释你的链接错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读