我要找的值其實就是 104
#define EFI_CONNECTION_FIN EFIERR (104)
#define EFI_CONNECTION_RESET EFIERR (105)
#define EFI_CONNECTION_REFUSED EFIERR (106)
StdLib\LibC\Uefi\select.c - select function
StdLib\LibC\Uefi\SysCalls.c - poll function -> StdLib\BsdSocketLib\poll.c - BslSocketPoll function
DEBUG Status
Status 都用 %r 印出較多,如果 index 有定義在 mStatusString 這個 Array,便會印出定義好的字串;如果沒有,其值就是一個 16 進位值。
Stdlib\EfiSocketLib\Socket.c
EslSocketRxStart 這支函數,在檢查 pPort->pSocket->RxError 如果發現有 error,其值可能是來自下面其中之一:
MdeModulePkg\Universal\Network\Tcp4Dxe\Tcp4Main.c - Tcp4Receive
MdeModulePkg\Universal\Network\Tcp4Dxe\SockInterface.c - SockRcv
順序是先 Tcp4Receive,裡面會再呼叫 SockRcv。
我先用 build -p MdeModulePkg\MdeModulePkg.dsc -a X64 -t VS2015x86,build 出我自己的 Tcp4Dxe.efi,過程中會出錯,那是因為我是整個 Module 全 build,故跑到最後可能因為設定問題會失敗,但不影響我要的檔案產出。
後來查了一下,也可以只 build Tcp4Dex.efi。
build -p MdeModulePkg\MdeModulePkg.dsc -m MdeModulePkg\Universal\Network\Tcp4Dxe\Tcp4Dxe.inf -a X64 -t VS2015x86
接著使用 drivers 找到系統內建的 Tcp4 Driver,查到第一個欄位 DRV 的值,接著使用 unload XX 去卸載它。
最後則是用 load Tcp4Dxe.efi 的方式載入我 build 出來的檔案。
這樣我就可以看到相關訊息,至少我找到了 EFI_CONNECTION_FIN 這個錯誤發生的地方了XD
沒有留言:
張貼留言