2010-03-29 12 views
5

Soy nuevo en el compilador de GNU.Vinculación del archivo de comandos del enlazador al código fuente

Tengo un archivo de código fuente C que contiene algunas estructuras y variables en las que debo colocar ciertas variables en una ubicación determinada.

Por lo tanto, he escrito un archivo de script utilizado enlazador y el __ attribute__("SECTION") en la declaración de variables, en el código fuente C.

Estoy usando un compilador GNU (cygwin) para compilar el código fuente y crear un archivo .hex usando la opción -objcopy, pero no entiendo cómo vincular mi archivo de script del enlazador en la compilación para reubicar las variables en consecuencia.

Estoy adjuntando el archivo de script del enlazador y el archivo fuente C para la referencia.

Por favor, ayúdenme a vincular el archivo de script del enlazador a mi código fuente, mientras crea el archivo .hex usando GNU.

/*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ódigo fuente en C:

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; 

Mi intención es colocar las variables de la sección "BASE_TABLE" en la dirección i definido el archivo de script enlazador y las variables restantes en el "SEG_HEADER" se define en el archivo de script del enlazador anterior.

Pero después de la compilación cuando miro en el archivo .hex, las diferentes variables de sección están ubicadas en diferentes registros hexadecimales, ubicados en una dirección de 0x00, no la que figura en el archivo de secuencia de comandos del enlazador.

Ayúdenme a vincular el archivo de secuencia de comandos del vinculador al código fuente.

¿Hay alguna opción de línea de comando para vincular el archivo de secuencia de comandos del enlazador, si es que hay alguno que me proporcione la información de cómo usar las opciones?

Gracias de antemano,

SureshDN.

Respuesta

2

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

2

primera vez que compila todos mis archivos de C a los ficheros objeto y luego vincularlos con:

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

De Los documentos gcc:

`-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

Gracias por la respuesta,

He encontrado un m opción de vinculador de mineral en GCC, "ld" y la opción -T para vincular las secciones al código fuente.

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

Gracias Suresh

Cuestiones relacionadas