編譯目標平台修改x86
① 1、設置默認的目標平台
在項目目錄中運行以下命令來查看默認目標平台的配置:
當前顯示的目標平台為「x86_64-unknown-linux-gnu」,表示CPU架構為x86_64,操作系統為Linux,ABI(應用程序二進制介面)為gnu。同時,從「release: 1.45.0-nightly」信息可知,項目使用的Rust編譯器版本為nightly。
目標平台的JSON描述可以通過特定命令查看。在項目目錄外執行此命令時,會顯示錯誤,因為需要nightly版本才能使用不穩定的特性。在項目目錄內執行時,會得到包含CPU架構、操作系統、ABI、指針寬度、int類型寬度及大小端等信息的JSON輸出。
對於基於RISC-V架構的內核開發,目標平台應為「riscv64imac-unknown-none-elf」。官方默認支持此平台,其JSON描述顯示panic-strategy策略為abort,即默認不需要棧展開功能。
為了指定默認目標平台為「riscv64imac-unknown-none-elf」,可通過命令進行設置。編譯成功後,在「target/riscv64imac-unknown-none-elf/debug」目錄下生成的二進制文件「rust_os」顯示CPU架構為RISC-V,採用64位小端模式,靜態鏈接且未被精簡,便於調試。
為簡化編譯參數,可將target參數配置到當前工程的配置文件中。首先創建.cargo目錄並新建config文件,配置好target參數後,即可使用「cargo build」命令進行編譯。
為查看和分析生成的二進制文件,需安裝binutils工具集,包含如objmp和obj等工具。通過調用「rust-objmp」檢查是否安裝成功。
使用「rust-objmp -x」查看可執行程序的元信息,包括入口地址等關鍵信息。執行「rust-objmp -d」則可查看可執行程序的反匯編代碼。
通過「cargo build」編譯生成的ELF格式可執行程序,可以通過「rust-obj」將其轉換為內核鏡像。使用「--strip-all」和「-O binary」參數剝離調試信息和符號信息,最終生成名為「kernel.bin」的內核鏡像文件。
② 試圖載入格式不正確的程序。 (異常來自 HRESULT:0x8007000B)
HRESULT:0x8007000B是插件支持的編譯環境錯誤,解決方法如下:
1、 在電腦上開啟編程軟體,同時開啟編譯後運行報錯的項目,准備工作就緒。
注意事項:
相同的錯誤代碼,有可能導致的原因不同。