pretty code

2017年9月6日 星期三

UEFI Application - Python socket

在 build Python 時,預設不 support socket module
我們可以在 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 則留言:

Unknown 提到...

之前在用UEFI的TCP4 Protocol写了一个Socket接口,用起来非常麻烦,尤其是接收数据的时候总是出问题。
能在UEFI下面用Python的Socket还是蛮赞的