amlogicからS805/S812 SoCのカーネル(uImage)をコンパイルしようとしています。私はC++やコンパイラの知識が十分に届かないため、おそらく1つを除いてすべてのコンパイルエラーを解決することができました。アームgcc5のクロスコンパイル - memcpyの適切な使用
エラーを与える行がある:私は、ファイルphydev.cに存在する問題を、説明させて
memcpy(&phydev->name, &dev_para->name, MAX_DEVICE_NAME_LEN*sizeof(char));
これらは、(クロス)コンパイラのエラーです:
drivers/amlogic/../../../hardware/amlogic/nand/amlnf/dev/phydev.c: In function ‘amlnand_phydev_init’:
drivers/amlogic/../../../hardware/amlogic/nand/amlnf/dev/phydev.c:1114:10: error: passing argument 1 of ‘memcpy’ discards ‘const’ qualifier from pointer target type [-Werror=discarded-array-qualifiers]
memcpy(&phydev->name, &dev_para->name, MAX_DEVICE_NAME_LEN*sizeof(char));
^
In file included from include/linux/string.h:17:0,
from include/linux/dynamic_debug.h:111,
from include/linux/kernel.h:14,
from include/linux/cache.h:4,
from include/linux/time.h:4,
from include/linux/stat.h:18,
from include/linux/module.h:10,
from drivers/amlogic/../../../hardware/amlogic/nand/amlnf/dev/../include/../include/amlnf_type.h:18,
from drivers/amlogic/../../../hardware/amlogic/nand/amlnf/dev/../include/../include/amlnf_dev.h:4,
from drivers/amlogic/../../../hardware/amlogic/nand/amlnf/dev/../include/phynand.h:4,
from drivers/amlogic/../../../hardware/amlogic/nand/amlnf/dev/phydev.c:14:
/root/Downloads/Beelink3/arm-src-kernel-2015-01-15-321cfb5a46/arch/arm/include/asm/string.h:16:15:
note: expected ‘void *’ but argument is of type ‘const char (*)[16]’
extern void * memcpy(void *, const void *, __kernel_size_t);
^
私はこれを数日間把握しようとしています。直接割り当て(配列ではうまくいきません)、strcpyの代わりに使うなどの試みがありましたが、これはより多くのエラーをもたらし、正確な根本原因を見つけることはできません。私はいくつかの種類のキャストまたは中間定数ボイドptrが必要だと思うが、私はこれをどのように修正するかという手がかりはない。
誰でも私にこれに関するアドバイスを提供し、解決方法を教えてください。 memcpy関数はarch/arm/include/asm/string.hに定義されています しかし、このファイルではうまくいかないようです。
多くのおかげで、
ヴィム
は '&dev_para-> NAME'を見てください。それは 'const'かもしれないし、関数が変更したいかもしれないパラメーターを取っているようです。 – wally
右。 constオブジェクトへのコピーは、verbottenです。 Linuxカーネルにこのようなコードが実際に含まれていると私は驚いているので、ここではもっと基本的なことが起こっています。そして私はC++がこれと何をしているのか本当に分かりません。 LinuxカーネルはC++ではなくC言語で書かれています。 –
エラーは、あなたが 'const'オブジェクト' phydev-> name'を書こうとしていることを示しています。これを解決するには、 'memcpy'行を削除してください。もっと多くのコードを見ることなくもっと有用なことを言うのは難しいです。 constを投げ捨ててはいけません。周囲のコードを見て、コードが定数を変更しようとしている理由を尋ねます。 –