2017年9月5日 星期二

UEFI Application - Python 2.7.2

TianoCore 已經在 AppPkg 下放置了 Python 2.7.2 的 code。

底下是在 UEFI 下執行 Python 的步驟,這裡我使用的是 UDK2014VS2013

1. build 出 Python.efi 的執行檔,過程中共會遇到 2 種錯誤。
    a. file encoding issue - "Python\PyMod-2.7.2\Python\marshal.c" 只要將這支檔案轉成 Unicode 即可。
    b. variables aren't initialized issue - 問題都是出在 structure pointer variable,just assign NULL to it。
2. copy  AppPkg\Applications\Python\PyMod-2.7.2\Lib\*.py 到  AppPkg\Applications\Python\Python-2.7.2\Lib。
3. 參考 AppPkg\Applications\Python\PythonReadMe.txt 步驟 4,將相關檔案置於對應的目錄。
4. 執行 Python.efi,如果要回到 UEFI Shell,執行 exit(),便會離開 Python 命令列模式。

2018/5/24 更新
後來 TianoCore 有 2 個 commit 分別解決了 step1 的 issue,有興趣的可以看看

de08c53b0f65f212c25f0eea13d6cdf4bd9c7fb4
1ea946d0f9ea7de963545fbe93cc7f781c03d0b2

 有圖有真相。

2 則留言:

  1. 想请教一下博主,把指标变为NULL具体是什么意思?

    我遇到的以下的错误,不知道该怎么修改。
    难道是要添加-Wno-unused-value这样的编译选项吗?希望博主能指点一下,多谢
    /home/user/Tiano/edk2/AppPkg/Applications/Python/Python-2.7.2/Include/objimpl.h:164:66: error: right-hand operand of comma expression has no effect [-Werror=unused-value]
    ( Py_TYPE(op) = (typeobj), _Py_NewReference((PyObject *)(op)), (op) )

    回覆刪除
  2. Hi Shaojie,

    當初我在 build 時,有些 .c 檔的變數如果是指標,就會出現 error,比如說 int *v;

    我需要手動把它變成 int *v = NULL

    至於你這行,我發現我的 .h 跟你一樣
    你看要不要參考它的提示,將 -Werror=unused-value 加進 PythonCore.inf

    我猜你是用 gcc

    我當初是用 visual c++ and UDK-2014
    提供給你參考,謝謝





    回覆刪除