项目场景:
在眺望电子TW-AC6G-EVM开发板上移植python3.9.5:
编译环境及开发包:
主机:ubuntu18.04
交叉编译器:arm-linux-gnueabihf-gcc
QT5.12.8:qt-everywhere-opensource-src-5.12.8
开发板:TW-AC6G-EVM
Linux:Linux-4.1.15
串口工具:Xshell
注意:本文章的所有命令涉及到的路径均为眺望电子官方环境路径,需根据自身实际环境改变。本文所演示的平台来自于眺望电子 iMX6ULL ARM嵌入式平台,这是一个基于NXP iMX6ULL ARM处理器,主频800MH在 Cortex-A7的核心板。
解决方案:
1.Python3.9.5源码下载&解压
Python官网地址:https://www.python.org/downloads/source/,进入后点击如图1.1下载python3.9.5源码。
拷贝相应的源码Python-3.9.5.tar.xz到Ubuntu进行解压,命令如下:
xz -d Python-3.9.5.tar.xz
tar xvf Python-3.9.5.tar
2.编译HOST解释器
在交叉编译的时候需要在HOST PC上运行对应版本的Python程序,所以需要先编译HOST PC上面用的Python,运行以下命令
cd Python-3.9.5/
./configure --prefix=$PWD/../_install_host --enable-shared
make -j4
make install
make distclean
–-prefix指定的目录可自行修改,但不要放在Python-3.9.5目录里,因为后续执行make distclean会清掉一些文件。
把生成HOST PC端即_install_host目录中的bin和lib,加到环境变量里面去,后续交叉编译就会自动找到python3了,其指令如下:
export PATH=/home/twdz/_install_host/bin:$PATH
export LD_LIBRARY_PATH=/home/twdz/_install_host/lib:$LD_LIBRARY_PATH
输入以上指令后,在Ubuntu输入python3 指令 如图2.2所示:
3.配置交叉编译工具链
这里采用的是arm-linux-gnueabihf交叉编译工具链
/home/twdz/ctools/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-gcc
配置交叉编译工具链命令如下:
cd Python-3.9.5/
mkdir _install
./configure --host=arm-linux-gnueabihf --build=armv7 --prefix=$PWD/_install --enable-ipv6 --enable-shared ac_cv_file__dev_ptmx="yes" ac_cv_file__dev_ptc="no"
–host是交叉编译工具链,–build表示编译出来的程序运行的处理器,–prefix表示安装目录。
4.编译&安装
在Python-3.9.5目录中,运行以下命令
make -j4
make install
安装完成后如图4.3所示
5.移植到开发板
将交叉编译出来的python目录(即图4.1中_install目录)中的 /bin/* 复制到开发板的/usr/bin中,将/lib/*复制到开发板的 /usr/lib中。
6.测试Python3.9.5
在开发板中输入python3,出现图6.1所示的信息。
测试python基础模块的导入如图6.2所示,退出Python可按Ctrl+Z键或输入exit()。
7.编译Python3其他模块
请根据其他相应模块先独自交叉编译,编译出对应的lib、include目录后,在第2小节configure配置命令中加入对应的目录,如下以下指令中的LDFLAGS、CPPFLAGS参数
./configure --host=arm-linux-gnueabihf --build=armv7 --prefix=$PWD/_install --enable-ipv6 --enable-shared ac_cv_file__dev_ptmx="yes" ac_cv_file__dev_ptc="yes" LDFLAGS="-L/home/twdz/zlib-1.2.11/build/lib" CPPFLAGS="-I/home/twdz/zlib-1.2.11/build/include"
此次测试了zlib模块的移植,如图7.1所示能成功加载zlib。