编译目标平台修改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、 在电脑上开启编程软件,同时开启编译后运行报错的项目,准备工作就绪。
注意事项:
相同的错误代码,有可能导致的原因不同。