嵌入式平臺移植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
注:基本方法源於網路,個人測試整理