簡體   English   中英

使用“riscv32-unknown-elf-gcc”時如何設置指令和數據內存地址?

[英]How do i set up instruction & data memory address when using "riscv32-unknown-elf-gcc"?

我設計了RISCV32IM處理器,我使用了“riscv32-unknown-elf-gcc”來生成測試代碼。

但是,生成的代碼的 PC(指令存儲器地址)值和數據存儲器地址具有任意值。 我使用了這個命令:

riscv32-unknown-elf-gcc -march=rv32im -mabi=ilp32 -nostartfiles test.c

我可以知道我是否可以設置我想要的指令和數據存儲器地址嗎?

謝謝。

謝謝你的答案。

我只設計了硬件,這是我第一次使用軟件工具鏈。 即使我的問題很初級,也請理解。

該圖是“-v”選項的結果。 在此處輸入圖片說明

我無法修改腳本文件,因為我在 DOCKER 環境中使用了 riscv 工具鏈。 所以,我嘗試復制腳本文件(elf32lriscv.x),修改它。 我將其修改為 0x10000 ==> 0x00000。 復制腳本的文件名為“test5.x”。

它是按如下方式執行的。 我究竟做錯了什么?

在此處輸入圖片說明

riscv 編譯器使用默認鏈接器腳本來放置文本和日期部分...。

如果將-v選項添加到命令行riscv32-unknown-elf-gcc -v -march=rv32im -mabi=ilp32 -nostartfiles test.c ,您將看到 collect 2 使用的鏈接器腳本(通常是 -melf32lriscv . 你可以在${path_to_toolchain}/riscv32-unknown-elf/lib/ldscripts/找到鏈接器腳本(默認是 .x)。

您還可以使用riscv32-unknown-elf-ld --verbose就像@Frant 所解釋的那樣。 但是,如果工具鏈是使用 enable multilib 編譯的並且您編譯為 rv64 但默認為 rv32,則您需要小心,反之亦然。 可能情況並非如此,但要確保您可以使用-A elf32riscv為 rv32 指定拱門。

要設置地址,您可以創建自己的鏈接描述文件或復制和修改默認的鏈接描述文件。 您只能像@Frant 解釋的那樣修改可執行文件開始,或者進行更多修改並將任何您想要的位置放置在您想要的位置。

准備好自己的鏈接器腳本后,您可以使用 -Wl,-T,${own_linker_script } 將其傳遞給鏈接器。 你的命令將是riscv32-unknown-elf-gcc -march=rv32im -mabi=ilp32 -nostartfiles test.c -Wl,-T,${own_linker_script }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM