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:$PYTHONPATH3. 安装 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.cn5. 安装 pip 并测试
easy_install pip
pip -V
pip install requests
python2.7 -c "import requests; print('OK')"常见问题
- 交叉编译工具链不一致:用
find / -name arm-*-gcc确认路径 - SSL 模块编译失败:确保 openssl 库头文件和库文件路径正确
- 设备树冲突:确保 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