2016-11-24 67 views
0

我想建立一個可重定位的庫(也就是說,除了局部變量之外,我還希望強制庫的位置在內存中的固定位置。我認爲這必須在makefile中完成,但我很困惑我必須做些什麼才能迫使庫在一個固定位置加載。這是使用mb-gcc。如何在微博版中爲固定地址編譯庫

我需要的原因這是我想寫一個加載程序,我不想在實際上正在執行其他程序的副本的代碼上打開一個加載程序。因此,我希望正在執行復制的程序位於其他位置的某個位置used(ie。ddr)。

如果我有編譯到庫中的所有函數,例如,我需要什麼特殊的makefile參數來強制它在位置0x80000000處加載。

任何幫助將不勝感激。提前致謝。

回答

0

你寫一個linker script,並且告訴編譯器/連接器使用-T script.ld選項來使用它(到gcc和/或ld,這取決於你如何建立你的固件文件)。

在音樂庫中的C源文件,你可以使用__attribute__((section ("name")))語法把你functionsvariables到特定部分。鏈接器腳本可以決定將每個部分放在哪裏 - 通常在這些類型的設備的固定地址處。 (您經常會看到類似#define FIRMWARE __attribute__((section(".text.firmware")))或類似的宏聲明,以使代碼更易於閱讀和理解。)

如果您爲您的庫創建單獨的固件文件,則不需要添加屬性到您的代碼,只需編寫鏈接描述文件將.text(可執行代碼),.rodata(只讀常量)和.bss(未初始化的變量)部分放在合適的地址。

網頁搜索microblaze "linker script"找到一些有用的例子,甚至更多的指南。其中一些必須適合您的工具。