目錄

UEFI for Simics QSP

延續上一篇 Intel Simics Simulator,這一篇要來介紹怎麼 Build 出一個 Intel Public Simics 可以用的 UEFI BIOS。

下載與建置給 simics QSP 用的 UEFI image

由於前面已經很多文章介紹怎麼建置 Tianocore UEFI,這邊就直接列出如何抓 code 不再贅述。

小記

本文撰寫於 2024/07/12

使用當前最新 tag edk2-stable202405 為範例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
REM create a new directory for the source code(change to what you want)
set WORKSPACE=e:\repo\uefi-simics
mkdir %WORKSPACE%
REM e:
cd %WORKSPACE%

REM clone source code
git clone http://github.com/tianocore/edk2 --recursive
git clone https://github.com/tianocore/edk2-platforms --recursive
git clone https://github.com/tianocore/edk2-non-osi --recursive
git clone https://github.com/intel/FSP --recursive

cd %WORKSPACE%\edk2
git checkout edk2-stable202405 -b edk2-stable202405

REM set PACKAGES_PATH=%WORKSPACE%\edk2;
REM set PACKAGES_PATH=%PACKAGES_PATH%;%WORKSPACE%\edk2-platforms
REM set PACKAGES_PATH=%PACKAGES_PATH%;%WORKSPACE%\edk2-platforms/Platform/Intel
REM set PACKAGES_PATH=%PACKAGES_PATH%;%WORKSPACE%\edk2-platforms/Silicon/Intel
REM set PACKAGES_PATH=%PACKAGES_PATH%;%WORKSPACE%\edk2-platforms/Features/Intel

cd %WORKSPACE%
edk2\edksetup.bat VS2019

cd %WORKSPACE%\edk2-platforms\Platform\Intel
REM set PYTHON_HOME=C:\Python312
python build_bios.py -p BoardX58Ich10X64

REM The generated UEFI BIOS located at %WORKSPACE%\Build\SimicsOpenBoardPkg\BoardX58Ich10\DEBUG_VS2015\FV\BOARDX58ICH10.fd

然後你以為就結束了嗎? 這篇絕對不是用來水文章數的 …. 我們還需要將這顆 BIOS 換進去 Simics 阿。

產生我們自己的 disk image

我們還需要產生一個 disk image 用來放一些 Efi shell 或是你想要的任何東西進去。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
REM Go into command prompt with administrator privileges
REM and run `diskpart` for next commands

REM Change file path to yours, 1024 means size is 1024 MB
create vdisk file=c:\Users\XXXX\simics-projects\my-simics-project-1\targets\qsp-x86\disk.vhd maximum=1024
select vdisk file=c:\Users\XXXX\simics-projects\my-simics-project-1\targets\qsp-x86\disk.vhd
attach vdisk
clean
create partition primary
assign
format quick fs=fat32

到這邊你應該可以從檔案總管發現有一個新的磁碟掛上來,大小為 1G,然後你可以開始在裡面放東西

1
detach vdisk

如果都放好了就把它 detach 掉。

產生我們自己的 simics script

到了這個步驟,我們已經有了 UEFI image,還有一個想要用來開機的 disk image,接下來我們可以來準備該怎麼告訴 simics 要怎麼使用這兩個東西了。

若你已經安裝好 simics 而且產生了 project,預設應該會建立在 c:\Users\XXXX\simics-projects\ 這個位置下面會有你自己建立的 project name 的目錄,舉例為 my-simics-project-1

我們在該 project 下的 targets\qsp-x86\ 產生一隻 my.simics,在裡面輸入

1
2
3
4
5
6
7
8
# Point to your UEFI image
$bios_image = "e:\\repo\\uefi-simics\\Build\\SimicsOpenBoardPkg\\BoardX58Ich10\\DEBUG_VS2015\\FV\\BOARDX58ICH10.fd"
# Point to your disk image
$disk0_image="c:\\Users\\XXXX\\simics-projects\\my-simics-project-1\\targets\\qsp-x86\\disk.vhd"
$show_con0=TRUE
# directory name `simics-qsp-x86-6.0.80` might changed in different version of simics
run-command-file "E:\\Simics\\simics-qsp-x86-6.0.80\\targets\\qsp-x86\\qsp-hdd-boot.simics"
run

萬事俱備,來試試看!

接著我們回憶一下上一個教學,使用 ISPM 來啟動我們建立的 Project 的 terminal

啟動後直接輸入 simics {path of my.simics}

1
simics.bat c:\Users\XXXX\simics-projects\my-simics-project-1\targets\qsp-x86\my.simics

然後你會看到你自己 build 的 UEFI 跑起來了(logo) 不一樣,而且也有 BIOS 的 serial log

我在我的 disk image 中放了 EFI shell, 還有 RU,來執行看看

後話

可惜的是,沒有 Intel RDC 帳號的話無法下載 Intel System Debugger 不然甚至還能夠做 UEFI 的 source level debug 喔.