Linuxデバイスドライバを作成しようとしています。私は "memcpy"を使用しようとするまで、本当にうまく動作するようにしています。私はそれだけで私を警告し、「作る」とき私も、コンパイラエラーを取得しない:Linuxデバイスドライバ:シンボル "memcpy"が見つかりません
WARNING: "memcpy" [/root/homedir/sv/main.ko] undefined!
と私はinsmodのを経由してロードしようとしたとき、私はコンソールに乗る:
insmod: error inserting './main.ko': -1 Unknown symbol in module
とdmesgの上:
main: Unknown symbol 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を使っています(私は2.6.37-rc1以降にしか動かないユーザモード-linuxでやっています)。どんな助けでも大歓迎です。
私はあなたが欠けていると思います。#include '...明らかに、Linuxヘッダの1つにすでに含まれている場合を除きます:p –
Machinarius
@Drknezzそれは使用できないためです。カーネルはホストされた環境ではなく、stdioもありません。コードにはstdioが含まれていないので、それを含める理由もありません。 – hobbs
@Hintonそれはリンクエラーです。コンパイルエラーではありません。どのようにモジュールを構築していますか?ああ、申し訳ありませんが、 – hobbs