OKMX6DL/Q 平台 Python 移植笔记

概述

本文档介绍了在飞凌 OKMX6DL/Q 平台(IMX6 系列,Linux 3.0.35)上移植 Python 2.7.13 的完整流程。

环境要求

  • 目标平台:OKMX6DL/Q 核心版 V1.1
  • 操作系统:Linux 3.0.35
  • Python 版本:2.7.13
  • 交叉编译工具链:arm-none-linux-gnueabi-

移植流程

第一部分:Python 编译过程

1. 准备工作

需要的软件包:

  • Python-2.7.13.tgz
  • sqlite-autoconf-3200100.tar.gz
  • Python-2.7.13-xcompile.patch.tar.gz
  • ntp-4.2.8p10.tar
  • setuptools-0.6c11-py2.7.egg
  • openssl-OpenSSL_1_0_1b.zip
  • zlib-1.2.3.tar.gz

2. 目录结构

/root/mx6q-python2.7/
├── python2_7_13_for_x86_64/   # x86 编译目录
├── python2_7_13_for_arm/      # ARM 编译目录
├── INSTALL/                   # 安装目录
├── sqlite3/                   # sqlite3 安装
├── misc/                      # 辅助工具(openssl, zlib)
└── output/sources/            # 最终输出

3. 编译步骤

编译安装 sqlite3

tar xvf sqlite-autoconf-3200100.tar.gz
cd sqlite-autoconf-3200100
./configure --host=arm-none-linux-gnueabi --prefix=$PWD/../sqlite3
make -j8 && make install

编译 zlib

cd misc/
tar xvf zlib-1.2.3.tar.gz
cd zlib-1.2.3
mkdir arm_install
./configure --prefix=./arm_install/
sed -i 's/gcc/arm-none-linux-gnueabi-gcc/g' Makefile
make && make install

编译 openssl

cd misc/
unzip openssl-OpenSSL_1_0_1b.zip
cd openssl-OpenSSL_1_0_1b
mkdir arm_install
./Configure --prefix=`pwd`/arm_install/ os/compiler:arm-none-linux-gnueabi-gcc
make && make install
tar jcvf openssl-OpenSSL_1_0_1b.tar.bz2 *

编译 Python for x86(host python)

tar xvf Python-2.7.13.tgz
cd python2_7_13_for_x86_64/
../Python-2.7.13/configure --prefix=`pwd`
make -j8 && make install

打补丁并编译 Python for ARM

cd Python-2.7.13/
patch -p1 < Python-2.7.13-xcompile.patch
vim Modules/Setup.dist  # 取消 zlib, _ssl 注释
../Python-2.7.13/configure --prefix=`pwd` \
  --host=arm-none-linux-gnueabi \
  --build=x86_64-linux-gnu \
  --enable-ipv6 --enable-static \
  ac_cv_file__dev_ptmx="yes" \
  ac_cv_file__dev_ptc="no" \
  LDFLAGS="-L$PWD/../sqlite3/lib -L$PWD/lib" \
  CPPFLAGS="-I$PWD/../sqlite3/include -I$PWD/include -I$PWD/include/openssl"
make HOSTPYTHON=../python2_7_13_for_x86_64/python \
     HOSTPGEN=../python2_7_13_for_x86_64/Parser/pgen \
     BLDSHARED="arm-none-linux-gnueabi-gcc -shared" \
     CROSS_COMPILE=arm-none-linux-gnueabi- \
     CROSS_COMPILE_TARGET=yes \
     HOSTARCH=arm-none-linux-gnueabi \
     BUILDARCH=x86_64-linux-gnu \
     SSL=`pwd`
make install HOSTPYTHON=../python2_7_13_for_x86_64/python \
             BLDSHARED="arm-none-linux-gnueabi-gcc -shared" \
             CROSS_COMPILE=arm-none-linux-gnueabi- \
             CROSS_COMPILE_TARGET=yes \
             prefix=$PWD/../INSTALL

编译 ntpdate

tar xvf ntp-4.2.8p10.tar.gz
cd ntp-4.2.8p10/
mkdir arm_install
./configure --prefix=$PWD/arm_install --host=arm-none-linux-gnueabi \
            --enable-static --with-yielding-select=yes
make && make install
tar jcvf ntp-4.2.8.p10.tar.bz2 *

第二部分:开发板配置

1. 解压安装

tar xvf python2.7-arm.tar.bz2 -C /
tar xvf openssl-OpenSSL_1_0_1b.tar.bz2 -C /
cp setuptools-0.6c11-py2.7.egg /
tar xvf ntp-4.2.8p10-arm-no-share.tar.gz -C /

2. 配置环境变量

修改 /lib/pkgconfig/python2.pc:

prefix=/
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

修改 /bin/python2.7-config 第一行:

#!/bin/python2.7

在 /etc/profile 中添加:

export PYTHONHOME=/
export PYTHONPATH=$PYTHONHOME:$PYTHONHOME/lib/python2.7:$PYTHONHOME/lib:$PYTHONHOME/lib/python2.7/site-packages
export PATH=$PATH:$PYTHONHOME:$PYTHONPATH

3. 安装 setuptools 和 pip

# 安装 easy_install
/bin/bash setuptools-0.6c11-py2.7.egg
 
# 修改 easy_install 取消 SSL 验证
vi /bin/easy_install
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
 
# 配置 pip 镜像
alias easy_install='easy_install -i http://pypi.douban.com/simple'

4. 安装 ntp 并对时

ntpdate time.buptnet.edu.cn

5. 安装 pip 并测试

easy_install pip
pip -V
pip install requests
python2.7 -c "import requests; print('OK')"

常见问题

  1. 交叉编译工具链不一致:用 find / -name arm-*-gcc 确认路径
  2. SSL 模块编译失败:确保 openssl 库头文件和库文件路径正确
  3. 设备树冲突:确保 GPIO/引脚没有被其他功能占用

输出产物

最终输出目录 output/sources/ 包含:

  • python2.7-for-arm.tar.bz2
  • openssl-OpenSSL_1_0_1b.tar.bz2
  • ntp-4.2.8.p10.tar.bz2
  • setuptools-0.6c11-py2.7.egg

关联笔记