移植Python3.6到i.MX6ULL
前期准备
ARM平台: imx6ull linux 4.1.15
主机环境: Ubuntu 18.04 x86_64 (虚拟机)
移植流程
- 确定配置好交叉编译环境。
注意:如果未安装则安装SDKsudo ./fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.0.sh
- Python官网下载Python3.6。
下载地址:Python Source - 将压缩包
Python-3.6.9.tgz
解压到Ubuntu18系统下的目录下。
tar xvf Python-3.6.9.tgz
- 进入到
Python-3.6.9
文件夹下,并创建两个文件夹build-arm
和build-install
。cd Python-3.6.9 mkdir build-arm build-install
- 编译安装PC端的Python3.6.9。(Ubuntu18默认自带Python3.6.9,可以跳过此步,此文在移植的时候没有跳过这一步。如果系统安装的Python版本高于需要编译的版本则可以跳过,如果系统版本低于将要编译的版本则不能跳过)
./configure make sudo make install
注意:
make
无需使用sudo,而make install
需要sudo,不然没有权限安装Python到系统。 - 清除编译产生的临时文件。
sudo make clean
- 交叉编译-配置Makefile.
cd build-arm . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi # 此处CONFIG_SITE环境变量如果不加入则会在configure的时候打印出错 "#error LONG_SIZE" echo ac_cv_file__dev_ptmx=no > config.site echo ac_cv_file__dev_ptc=no >> config.site export CONFIG_SITE=config.site # 配置参数 # --build=编译该软件所使用的平台,交叉编译环境根据系统而定,Ubuntu18选择x86_64-linux,如果系统使用的是Ubuntu的32位版本,可以配置成i386 # --host 该软件将运行的平台 # --target 该软件所处理的目标平台 # --prefix 文件安装的位置 # --silent 选项配置后终端不会打印详细的过程。 ../configure \ --host=arm-poky-linux-gnueabi \ --build=x86_64-linux \ --target=arm-poky-linux-gnueabi \ --disable-ipv6 \ --prefix=/home/neo/Desktop/fcu1104/Python-3.6.9/build-install \ --enable-shared --enable-optimizations
- 添加ssl及zlib依赖的支持。已经在yocoto中拷贝出相应的文件。修改Setup文件
vi Modules/Setup
修改如下。#替换相关字段 SSL=/home/neo/Desktop/fcu1104/python3/openssl/usr _ssl _ssl.c \ -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \ -L$(SSL)/lib -lssl -lcrypto mypath=/home/neo/Desktop/fcu1104/python3/zlib zlib zlibmodule.c -I$(prefix)/include -L$(mypath)/lib -lz
- 编译并安装。
make # make install过程中 make install
问题汇总
-
问题:使用交叉编译环境编译时报错
error: #error "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)."
解答:是因为没有配置CONFIG_SITE环境变量导致数据类型中的long型在configure时配置成了8Byte,而ARM环境上long型占用4Byte。参考:LONG_BIT -
问题:
make install
命令时报错subprocess.CalledProcessError: Command ‘(‘lsb_release’, ‘-a’)’ returned non-zero exit status 1.
解答:执行命令rm -rf /usr/bin/lsb_release可以解决这个问题,此时需要make clean下,然后再次执行make & make install进行编译安装。
参考链接
python交叉编译移植到ARM
python移植到arm的单板
交叉编译Python3.6
python3.7移植到ARM开发板