2010-08-03 37 views
1

我在Virtex4 FPGA中使用Xilinx Microblaze CPU內核。我想爲我的當前代碼添加一個新的代碼部分,但是接下來我的代碼將超過它被燒燬的閃存大小。因此我想將附加的代碼刻錄到另一個閃存。在嵌入式系統中將ELF可執行文件拆分爲兩個文件

我的代碼被引導加載程序複製到RAM中,然後引導加載程序跳轉到RAM並開始正常執行。我打算以相同的方式從第二個閃存中複製新代碼,相鄰(在RAM中)從已用閃存複製的代碼。爲此,我實際上需要兩個單獨的elf可執行文件,一個用於每個燒焦的閃存,以及它們之間的確切分隔,定義哪些例程駐留在每個文件中。應該啓用跨文件的例程調用。

我的問題:我怎樣才能生成這些單獨的精靈文件,並在每個文件中有一個精確的例程規範?有沒有辦法將一個可執行文件分成兩個單獨的文件?還是有另一種解決方案來生成單獨的可執行文件/庫文件作爲嵌入式系統中單個鏈接的輸出?

感謝, Ishai

+0

你的RAM比你的閃存大嗎? – 2010-08-03 18:17:01

回答

0

如果你可以使用動態庫,你可能因素一些代碼你的可執行文件的融入其中,並簡單地將一個文件中的每個閃存區域。

2

如果您可以在RAM中重新組合二進制文件,那麼鏈接到單個二進制文件然後拆分生成的文件應該是非常好的。您必須保證boot-loader函數包含在下半部分中。最簡單的方法是創建一個獨立的引導加載程序二進制文件。

您可以使用像splitdd這樣的實用程序在將二進制文件複製到閃存之前對其進行分割。

2
  1. 假設您已經完成了顯而易見的事情,並運行「strip」來生成沒有調試符號的二進制文件的副本。調試信息對實際目標沒有用處。

  2. 如果您的剝離二進制文件仍然大於您的FLASH,您可以使用S-RECORD tools拆分該二進制文件。它除了分割文件之外還有更多的選項,比如添加校驗和,CRC以及支持很多文件格式。

如果你的RAM足夠大以容納你的所有程序,那麼沒有特別需要製作單獨的ELF文件/ DLL。只要將你的程序構建成一個龐大的程序在RAM地址空間中運行,並讓你的引導程序將其中的一部分從閃存加載到RAM中。