2010-03-29 8 views
5

Ich bin neu im GNU-Compiler.Verknüpfen der Linker-Skriptdatei mit dem Quellcode

Ich habe eine C-Quellcode-Datei, die einige Strukturen und Variablen enthält, in denen ich bestimmte Variablen an einem bestimmten Ort platzieren muss.

Also, ich habe eine Linker-Skript-Datei geschrieben und verwendet __ attribute__("SECTION") bei Variablendeklaration, in C-Quellcode.

Ich verwende einen GNU-Compiler (Cygwin), um den Quellcode zu kompilieren und eine .hex-Datei mit der Option -objcopy zu erstellen.

Ich füge die Linker-Skriptdatei und die C-Quelldatei als Referenz an.

Bitte helfen Sie mir die Linker-Skriptdatei mit meinem Quellcode zu verknüpfen, während Sie die .hex-Datei mit GNU erstellen.

/*linker script file*/ 
/*defining memory regions*/ 

     MEMORY 
     { 
     base_table_ram  : org = 0x00700000, len = 0x00000100 /*base table area for BASE table*/ 
     mem2    : org =0x00800200, len = 0x00000300 /* other structure variables*/ 
     } 
/*Sections directive definitions*/ 

     SECTIONS 
     { 
     BASE_TABLE : { } > base_table_ram 

     GROUP     : 
      { 
        .text  : { } { *(SEG_HEADER) } 
        .data  : { } { *(SEG_HEADER) } 
        .bss   : { } { *(SEG_HEADER) } 

      } > mem2 

     } 

C-Quellcode:

const UINT8 un8_Offset_1 __attribute__((section("BASE_TABLE"))) = 0x1A; 
const UINT8 un8_Offset_2 __attribute__((section("BASE_TABLE"))) = 0x2A; 
const UINT8 un8_Offset_3 __attribute__((section("BASE_TABLE"))) = 0x3A; 
const UINT8 un8_Offset_4 __attribute__((section("BASE_TABLE"))) = 0x4A; 
const UINT8 un8_Offset_5 __attribute__((section("BASE_TABLE"))) = 0x5A;  
const UINT8 un8_Offset_6 __attribute__((section("SEG_HEADER"))) = 0x6A; 

Meine Absicht ist es, die Variablen des Abschnitts „BASE_TABLE“ an der Adresse zu platzieren i die Linker-Skript-Datei definiert und die übrigen Variablen in der „SEG_HEADER“ definiert in die Linker-Skriptdatei oben.

Aber nach dem Kompilieren, wenn ich in der .hex-Datei schaue die verschiedenen Abschnitt Variablen befinden sich in verschiedenen Hex-Datensätze, an einer Adresse von 0x00, nicht die in Linker-Skript-Datei angegeben.

Bitte helfen Sie mir beim Verknüpfen der Linker-Skript-Datei mit dem Quellcode.

Gibt es Befehlszeilenoptionen zum Verknüpfen der Linker-Skript-Datei, wenn mir die Informationen zur Verwendung der Optionen zur Verfügung stehen.

Vielen Dank im Voraus,

SureshDN.

Antwort

2

Versuchen gcc -Xlinker -T (linker script name) (c sources files)

2

ich zuerst alle meine c-Dateien kompilieren Dateien zum Objekt und diese miteinander verknüpfen mit:

gcc -Xlinker -T"xxx.lds" (all object files)

Von den gcc docs:

`-Xlinker OPTION' 
    Pass OPTION as an option to the linker. You can use this to 
    supply system-specific linker options which GNU CC does not know 
    how to recognize. 
2

Vielen Dank für die Antwort,

Ich habe eine m gefunden ore Linker-Option in GCC, "ld" und die Option -T, um die Abschnitte mit dem Quellcode zu verknüpfen.

ld -T (linker scriptname) -o (final objfile) (objectfile of source file)

Dank Suresh