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 則留言:

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

    回覆刪除
  2. 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 台吧

    回覆刪除
  3. 更正一下是使用 EFI MP SERVICES PROTOCOL

    回覆刪除
  4. Hi Sir,

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

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

    回覆刪除
  5. 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

    希望有幫助到你

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

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

    Thanks!!

    回覆刪除
  7. Hi ChiChen,

    有可能

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

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

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

    回覆刪除