2016-04-11 5 views
0

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に定義されています しかし、このファイルではうまくいかないようです。

多くのおかげで、

ヴィム

+1

は '&dev_para-> NAME'を見てください。それは 'const'かもしれないし、関数が変更したいかもしれないパラメーターを取っているようです。 – wally

+1

右。 constオブジェクトへのコピーは、verbottenです。 Linuxカーネルにこのようなコードが実際に含まれていると私は驚いているので、ここではもっと基本的なことが起こっています。そして私はC++がこれと何をしているのか本当に分かりません。 LinuxカーネルはC++ではなくC言語で書かれています。 –

+0

エラーは、あなたが 'const'オブジェクト' phydev-> name'を書こうとしていることを示しています。これを解決するには、 'memcpy'行を削除してください。もっと多くのコードを見ることなくもっと有用なことを言うのは難しいです。 constを投げ捨ててはいけません。周囲のコードを見て、コードが定数を変更しようとしている理由を尋ねます。 –

答えて

0

実際に誰かが十分にスマートだった: 構造体のphydev { のconstのchar *名; CONSTとすべてが、少なくともmemcpyのライン(大丈夫だった。しかし、私はそれが一定に書き込みをしようとしていた。strcpyのかのstrdupまたは何を使用することができます削除 ...

すべてのトラフをデバッグした後、

また、使用された静的変数をローカル属性にコピーするのではなく、多くの関数を静的にしました。何が起こるのか分かりません。 do ...(おそらく、いくつかのセグメンテーション違反や何かでクラッシュするかもしれません:-)

私は私のttを待たなければなりません今リットルのUSBアダプタ...誰もがこの事のためにADBのドライバを検索する場所を知っていて、それがサポートしていない限り

fw_setenvか何か....

が、それはTTL一度TTY1にスペースバーを押すことになると思いますアダプターが到着します。

ご協力いただきありがとうございます。私はこのボックスの上のUbuntuを取得するために管理している場合、私はそれについてのブログを投稿します:-)

乾杯&おかげ

ヴィム