2014-10-01 14 views
1

我使用的是一款sumsung arm-cortexA8芯片S5PV210。在其文檔中,程序將開始在0xd0200010處執行。現在我成功地運行了我的程序。但我仍然有一些問題。我如何確保裸機臂固定地址的輸入功能?

起初,我用鏈接命令「-Ttext 0xd02000010 -e main」,並認爲它會把主函數放到地址0xd0200010。但是我發現它只是把.text部分放到0xd0200010上。如果我在.c文件中改變了函數的順序,即使.text部分仍然放在0xd0200010上,但main函數不會在該地址上,而「-e main」根本不起作用。

那麼,我怎樣才能使主要功能在0xd0200010?我可以通過編譯器和鏈接器命令來完成嗎?

+0

通常情況下,您會編寫用於設置'C'環境的彙編程序(例如清零BSS數據,設置堆棧等)。然後你跳到你的主程序'bl_main'。此彙編程序代碼位於唯一部分,您使用自定義鏈接程序腳本將該代碼定位在圖像的開頭。對於* ELF *圖像(非二進制),您可以使用'ENTRY(start)'鏈接器來指定初始控制的位置。這對二進制文件不起作用,幾乎你應該使用[自定義鏈接腳本](https://sourceware.org/binutils/docs/ld/Scripts.html)。網絡上有各種例子。 – 2014-10-01 14:46:36

+0

是的,你是對的...我也明白了,謝謝 – demonguy 2014-10-04 14:23:17

回答

1

我的工作出來..

ELF文件用於OS平臺,那麼入口點被定義爲ELF文件的頭。

但是對於裸機系統,它不能讀取elf文件的信息,所以它必須轉換成二進制文件,它不包含入口點的任何信息。換句話說,裸機系統沒有「入口點」的概念。所以-e主選項不適用於二進制文件。

有很多方法可以放在一個固定address.I C函數只是張貼我的解決方案吧

  1. 在用戶定義的部分聲明的主要功能

    INT主要()屬性((section(「。main」)))

  2. 使用鏈接器腳本,將section放在需要的地址上。

    SECTIONS { = 0×0000 的.text:(文本) { led.o(。主要) * } ........ }