pretty code

2018年4月27日 星期五

UEFI network stack

之前在測試 UEFI Application 的網路功能時,都習慣在我自己的小電腦﹝GB-BXi7-4770R﹞上面測試。

一直以來都以為是缺少 Simple Network Protocol,故我有從 UDK 2014 build 出此 driver,只要在 shell 下 load 此 driver,便可以成功使用 network。

最近無意間在 BIOS 選單裡發現下面選項,Boot \ CSM parameters \ Network stack

只要 enable 它後,就不用再手動 load driver 了。

這樣更方便我用自己的電腦驗證公司程式了,不然一塊那麼大的 mother board 放在桌上還得了,重點是還要跟人借 DRAM,一點都不方便。

當然也不用再手動插入 load driver 在我們的 shell script 了,RD 就是要聰明工作才行。

7 則留言:

Leo 提到...

Hi Tylpk
請問你怎麼寫 Shell 下的網路程式,有沒有範例或是文件可以分享,我最近被要求作這方面的東西

tylpk 提到...

Hi ChiChen,

請問你是想要寫什麼?
純 TCP/UDP or HTTP ?

1. 假設用 C,只要使用 StdLib 就像平常寫 socket 程式一樣
2. 假設用 C,但是走 HTTP 協定,直接下載 CurlLib(HP 工程師 porting 的),會比較好用
3. 假設可以用 Python,從 UDK build 一個 Python 直譯器,直接用 Python 原生 module 會更好用

我有其他文章提到這個,如果有不懂的,我們可以再討論

不過如果你是想要做 Server 端,那 UEFI 就不適合了
因為它是 single thread,除非你用 SMP 之類的 protocol
否則效能很差,大概只能應付個 3 ~ 5 台吧

tylpk 提到...

更正一下是使用 EFI MP SERVICES PROTOCOL

Leo 提到...

Hi Sir,

能不能請教你怎麼在UEFI Shell 下拿到 IP 阿?
我連這第一步都搞不定 >"<

我是打算用 Python 來寫, 因為之前有用 Python 寫過 TCP/UDP 的,
我沒用 C 寫過, 不知道怎麼入門

tylpk 提到...

Hi ChiChen,

不確定拿 IP 的意思?

假設要寫 Python

1. 修改 EFI\BOOT\STARTUP.nsh (等於 DOS 的 autoexec.bat)
2. add "ifconfig -s eth0 dhcp" -> 這會幫你取得 IP
3. add "stall 10000000" -> delay 10 秒,以確保已取得 IP
4. add "fs0:" -> 切到外部隨身碟
5. add "fs0:\EFI\Tools\Python.efi xxxxx.py" -> 執行你的 python code

STARTUP.nsh

ifconfig -s eth0 dhcp
stall 10000000
fs0:
fs0:\EFI\Tools\Python.efi xxxx.py

希望有幫助到你

Leo 提到...

Hi Sir,
就是我的網路卡好像沒有動起來,
ifconfig -l
ifconfig -l eth0
都完全沒反應,

你的文章 UEFI Application - network support
有說道要有 UNDI driver
我在想是不是我要自己弄這個來 load

Thanks!!

tylpk 提到...

Hi ChiChen,

有可能

如果是 realtek 的網卡
官網就有 driver 可以下載

如果是你們公司自己的網卡
就只能自己想辦法生出來

網路可以用的前提就是像我那篇文章說的