嵌入式平台移植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
注:基本方法源于网络,个人测试整理