通用加载器
loader 设备允许用户在启动时将多个镜像或数值加载到 QEMU。
将数据写入内存
可以在命令行指定内存值,语法如下:
-device loader,addr=<addr>,data=<data>,data-len=<data-len> \
[,data-be=<data-be>][,cpu-num=<cpu-num>]
<addr>保存数据的地址。
与 QEMU 其他数值选项一样,默认按十进制解释。十六进制值需加 0x 前缀。
<data>要写入地址的值,最多 8 字节。
<data-len>数据长度,单位为字节。指定 data 时必须同时提供此参数。
<data-be>设为 true 时,以大端字节序写入客户机,默认使用小端。
<cpu-num>指定使用哪个 CPU 的地址空间加载数据。未指定时使用第一个 CPU。
将 0x8000000e 写入 0xfd1a0104 的示例:
-device loader,addr=0xfd1a0104,data=0x8000000e,data-len=4
设置 CPU 程序计数器
loader 可从命令行设置 CPU 的 PC,语法如下:
-device loader,addr=<addr>,cpu-num=<cpu-num>
<addr>要赋给 CPU PC 的值。
默认按十进制解释,十六进制值需加 0x 前缀。
<cpu-num>要设置 PC 的 CPU 编号。
将 CPU 0 的 PC 设为 0x8000:
-device loader,addr=0x8000,cpu-num=0
加载文件
loader 还可将文件载入内存,支持 ELF、U-Boot、Intel HEX 和原始镜像。语法为:
-device loader,file=<file>[,addr=<addr>][,cpu-num=<cpu-num>][,force-raw=<raw>]
<file>要加载到内存的文件。
<addr>文件加载地址。原始镜像必需,其他格式忽略。
默认按十进制解释,十六进制需加 0x 前缀。
<cpu-num>指定 CPU,可选,具有两个效果:
使用该 CPU 的地址空间加载数据
将该 CPU 的 PC 设为原始文件加载地址,或可执行格式头部指定的入口
未指定时,通过第一个 CPU 的地址空间加载,不修改任何 CPU 的 PC。
目前无法只指定地址空间而不同时设置对应 CPU 的 PC。
因为此选项修改启动 PC,所以只应对启动镜像使用。
<force-raw>force-raw=on 强制按原始镜像处理文件,可将本来受支持的可执行格式 当作原始数据加载。
加载 ELF 并由 CPU0 启动的示例:
-device loader,file=./images/boot.elf,cpu-num=0