1. 程式人生 > 其它 >嵌入式平臺移植Python

嵌入式平臺移植Python

心血來潮,考慮移植Python到現有的arm-linux平臺,網上看了看,做的還很多

參考了不少,折騰了兩天,現將過程整理一下,備查:

交叉工具鏈: arm-none-linux-gnueabi-
版本: 3.9.6
編譯輸出目錄: arm_build

0. 官網下載:Python-3.9.6.tgz
1. 解壓:tar zxvf Python-3.9.6.tgz
2. 編譯本機版本的python工具(PCbuild)
  如果當前電腦安裝了不同版本的python, 好像應該刪除(否則衝突)
  編譯這個工具主要是為了解釋setup.py檔案
  2.1 ./configure 生成基於PC的Makefile檔案

    ./configure

  2.2 Make

    make python Parser/pgen

  修改檔名:

    mv python hostpython
    mv Parser/pgen Parser/hostpgen

  2.3 distclean:

    make distclean

3. 編譯arm-target

  3.1 creat Makefile for target

    ./configure --host=arm-none-linux-gnueabi --prefix=$PWD/arm_build --build=arm --disable-ipv6 ac_cv_have_long_long_format=yes ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=yes
    .
/configure --host=arm-none-linux-gnueabi --prefix=$PWD/arm_build --build=arm --disable-ipv6 ac_cv_have_long_long_format=no ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no

  3.2 make(確認ssl)

    make HOSTPYTHON=./hostpython HOSTPGEN=./Parser/hostpgen BLDSHARED="arm-none-linux-gnueabi-gcc -shared" CROSS_COMPILE=arm-none-linux-gnueabi- CROSS_COMPILE_TARGET=yes
    make install HOSTPYTHON
=./hostpython BLDSHARED="arm-none-linux-gnueabi-gcc-shared" CROSS_COMPILE=arm-none-linux-gnueabi- CROSS_COMPILE_TARGET=yes prefix=$PWD/arm_build

4. 執行完以上命令之後在arm_build中產生bin lib include share 4個資料夾

  4.1. 將 arm_build/bin 中的所有內容拷貝到目標板的/usr/bin。
  4.2. 將 arm_build/lib 中的所有內容拷貝到目標板/lib中
  4.3. 將 arm_build/include 中的所有內容拷貝到目標板/include中。因為其中的某些標頭檔案是Python環境所需要的,比如Python直譯器啟動依賴於pyconfig.h,import time模組時依賴timefuncs.h。

5. 執行錯誤:
  python3: error while loading shared libraries: libutil.so.1: cannot open ...
  原因是我的核心版本過低, 拷貝一個新的庫進來就好了

注:上述2/3步驟,可以簡化如下:

  ./configure --prefix=$(pwd)/PCbuild
  make -j8
  make install
  make distclean

  基於PC的工具在PCbuild資料夾下,可以使用下面命令建立軟連結(若系統存在python3, 刪除即可)

    ln -s $(pwd)/PCbuild/bin/python3.9 /usr/bin/python3

  //creat Makefile

  ./configure --host=arm-none-linux-gnueabi --prefix=$PWD/arm_build --build=arm --disable-ipv6 ac_cv_have_long_long_format=yes ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=yes
  make -j8
  make install

注:基本方法源於網路,個人測試整理