Связывание файла скрипта компоновщика с исходным кодом - PullRequest
5 голосов
/ 29 марта 2010

Я новичок в компиляторе GNU.

У меня есть файл исходного кода на C, который содержит некоторые структуры и переменные, в которых мне нужно разместить определенные переменные в определенных местах.

Итак, я написал файл сценария компоновщика и использовал __ attribute__("SECTION") при объявлении переменной в исходном коде C.

Я использую компилятор GNU (cygwin) для компиляции исходного кода и создания файла .hex, используя опцию -objcopy, но я не понимаю, как связать файл скрипта компоновщика при компиляции, чтобы соответствующим образом переместить переменные.

Я прилагаю файл сценария компоновщика и исходный файл C для справки.

Пожалуйста, помогите мне связать файл сценария компоновщика с моим исходным кодом при создании файла .hex с использованием 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 исходный код:

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; 

Мое намерение состоит в том, чтобы поместить переменные раздела "BASE_TABLE" по адресу, определенному в файле сценария компоновщика, а остальные переменные в "SEG_HEADER", определенном в файле сценария компоновщика выше.

Но после компиляции, когда я заглядываю в файл .hex, разные переменные раздела находятся в разных шестнадцатеричных записях, расположенных по адресу 0x00, а не по адресу, указанному в файле сценария компоновщика.

Помогите, пожалуйста, связать файл сценария компоновщика с исходным кодом.

Существуют ли какие-либо параметры командной строки для связывания файла сценария компоновщика, если они есть, предоставьте мне информацию о том, как использовать эти параметры.

Заранее спасибо,

SureshDN.

Ответы [ 3 ]

2 голосов
/ 30 марта 2010

Сначала я компилирую все свои файлы c в объектные файлы, а затем связываю их с:

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

Из документации 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 голосов
/ 11 мая 2010

Спасибо за ответ,

Я нашел еще один параметр компоновщика в GCC, "ld" и параметр -T, чтобы связать разделы с исходным кодом.

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

Спасибо Суреш

2 голосов
/ 30 марта 2010

Попробуйте gcc -Xlinker -T (linker script name) (c sources files)

...