2016-04-11 10 views
0

Ich versuche, einen Kernel (uImage) für das S805/S812 SoC von amlogic zu kompilieren. Ich habe es geschafft, alle Kompilierungsfehler bis auf einen zu lösen, wahrscheinlich weil meine Kenntnisse von C++ und Compilern nicht weit genug reichen. Lassen Sie mich erklären, das Problem, das in einer Datei phydev.c existieren:Kreuzkompilierung für Arm gcc5 - Korrekte Verwendung von memcpy

Die Linie den Fehler gibt, ist:

memcpy(&phydev->name, &dev_para->name, MAX_DEVICE_NAME_LEN*sizeof(char)); 

Dies sind die (Kreuz) Compiler-Fehler:

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); 
      ^

I habe versucht, dies für mehrere Tage herauszufinden, auch versuchen direkte Zuweisung (die offensichtlich nicht auf Arrays funktioniert), mit Strcpy statt und so weiter, aber das ergibt nur mehr Fehler und ich kann nicht die genaue Ursache finden. Ich denke, ich brauche eine Art von Besetzung oder dazwischen konstantes void ptr, aber ich habe keine Ahnung, wie ich das beheben kann.

Könnte jemand so freundlich sein, mir Ratschläge zu geben und wie man es löst. Die memcpy Funktion ist in arch/arm/include/asm/string.h definiert. Aber es schien keine gute Idee zu sein, mit dieser Datei zu spielen.

Vielen Dank,

Wim

+1

Werfen Sie einen Blick auf '& dev_para-> name'. Es scheint, als wäre es "const" und die Funktion nimmt einen Parameter, den sie ändern möchte. – wally

+1

Rechts. Kopieren in ein const Objekt ist verbotten. Ich wäre überrascht, wenn der Linux-Kernel tatsächlich solchen schlampigen Code enthält, also läuft hier etwas Grundlegenderes. Und ich weiß nicht wirklich, was C++ damit zu tun hat. Der Linux-Kernel ist in C geschrieben, nicht in C++. –

+0

Der Fehler zeigt an, dass Sie versuchen, ein 'const' Objekt zu schreiben,' phydev-> name'. Um das zu lösen, könntest du die 'memcpy' Zeile löschen; Es ist schwer, etwas nützlicheres zu sagen, ohne mehr Code zu sehen. Werfen Sie die const nicht weg.Sehen Sie sich den umgebenden Code an und fragen Sie sich, warum der Code versucht, eine Konstante zu ändern. –

Antwort

0

Tatsächlich hatte jemand klug genug gewesen: Struct phydev { const char * name; ...

die const entfernt und alles war in Ordnung (zumindest die Memcpy Linie. Aber ich kann strcpy oder strdup oder was auch immer verwenden. Es wurde versucht, auf eine Konstante zu schreiben.

Nach Trog Debuggen all die anderen Fehler konnte ich das U-Boot-Image machen. Habe es noch nicht getestet.

Auch viele Funktionen statisch gemacht, anstatt benutzte statische Variablen in lokale Attribute zu kopieren. Weiß nicht, was es wird tue ... (wahrscheinlich mit einem Segmentierungsfehler oder etwas zusammenstoßen :-).

Ich werde auf meine tt warten müssen l USB-Adapter jetzt ...

Wenn jemand nicht weiß, wo für diese Sache einen adb Treiber zu finden und es unterstützt fw_setenv oder etwas ....

Denken, es wird die Leertaste auf tty1 einmal die ttl werden Drücken Adapter kommt an.

Danke Jungs für all Ihre Hilfe. Wenn ich es schaffe Ubuntu auf diesem Feld zu bekommen Ich werde einen Blog darüber schreiben :-)

Beifall & dank

Wim