我在這一個上有問題。我正在使用帶有DS-5的ARM Cortex-A9來創建裸機固件。我修改了我的鏈接器文件,故意將.data部分LMA放置在文本和rodata部分的旁邊,因爲它的默認運行時間VMA位於1MB,而.bin圖像大約爲1MB,但包含90%的零。所以我故意讓LMA!= VMA來節省空間。我還在start.S中添加了一個代碼,將.data部分從lma重定位到vma。當VMA!下的ELF加載= LMA
但是在裝載在DS-5所產生的ELF文件時,它已經加載所有部向其VMA。因此,我的start.S代碼應該重新定位數據,從垃圾內容的LMA複製到已經正確的VMA,並且不久之後這些垃圾會導致錯誤。
我已經受夠了不平等的VMA和LMA二進制中的Cortex-M4以其精靈調試經驗,用gdb,並沒有任何問題存在,但它是微控制器。在我目前的arm處理器應用程序中,我將如何模擬elf調試將數據從其LMA正確複製到VMA的場景。使用二進制格式引導單機時最有可能沒有問題,但現在我們仍然在進行elf調試,所以我必須解決這個問題。
我不知道DS-5,但請檢查在加載ELF文件時是否可以在腳本上重定位這些部分。至少T32是可能的。 – juansolsona
ARM DS-5是我們用來開發在ARM上運行的固件的IDE。它建立在Eclipse之上。它是加載elf文件直接從SDRAM運行並允許我們調試的文件。 – ubermensch
我看了一下DS5中的調試器命令(https://static.docs.arm.com/dui0452/y/DUI0452Y_debugger_command_reference.pdf),看起來好像是你可以在load命令上應用一個偏移量,看看第1.3.85頁。 DS5也支持類似命令語法(CMM)的T32,但似乎只是部分的,不過您可以在0xaddress處查看「data.load.elf FileName.AXF reloc .text」(http://www2.lauterbach.com/pdf /general_ref_d.pdf) 希望它有幫助。 – juansolsona