我們可以在 AppPkg\Applications\Python\Efi\config.c 打開要支援的 module
在這裡我打開了 socket and datetime
不過實際在寫 code 時
遇到 connect 會發生問題
這個問題不只 Python 會發生
應該是說原生的 socket library 就有問題
其實也不能說是問題,而是 UEFI implement socket 的方式
只要對 AppPkg\Applications\Python\Python-2.7.2\Modules\socketmodule.c 做些手腳即可
(提示:修改 socket_connect 這支 function,對判斷 res 回傳值動手腳)
有圖有真相
此範例是在 VMware 下執行
至於要如何在 VMware 下執行 UEFI Shell,那又是另外一個故事了
請參考 https://blog.fpmurphy.com/2014/07/using-vmware-workstation-to-experiment-with-uefi.html
import socket import sys import time import datetime sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP) server_address = ('192.168.111.1', 8080) print >>sys.stderr, 'connecting to %s port %s' % server_address sock.connect(server_address) try: message = "This is the message" for x in range(0, 10): msg = '%s %02d (%s)' % (str(datetime.datetime.now()), x+1, message) print(msg) sock.sendall(message) time.sleep(2) finally: print("close socket") sock.close()
1 則留言:
之前在用UEFI的TCP4 Protocol写了一个Socket接口,用起来非常麻烦,尤其是接收数据的时候总是出问题。
能在UEFI下面用Python的Socket还是蛮赞的
張貼留言