iMX6系列-iMX6Q 開(kāi)發(fā)板 Python 移植

原創(chuàng) 2021-01-12 15:16:00 iMX6

本文基于飛凌OKMX6Q/DL開(kāi)發(fā)板為基礎(chǔ)講解,主要使用平臺(tái)是imx6系列,linux3.0.35操作系統(tǒng),其他平臺(tái)也可以參考,不同平臺(tái)之間會(huì)存在差異,需自行修改適應(yīng)自己的使用


iMX6 Python移植

注:所需工具包在  Python移植/工具包

      已經(jīng)生成的可移植Python在Python移植/output

過(guò)程一:Python編譯過(guò)程

準(zhǔn)備工作

以下文件在下面的編譯中需要用到

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.g

準(zhǔn)備環(huán)境

cd /root

mkdir mx6q-python2.7/ && cd mx6q-python2.7


mkdir –p {python2_7_13_for_x86_64,python2_7_13_for_arm,INSTALL,sqlite3,misc,output/sources}

復(fù)制上文中準(zhǔn)備的軟件包到mx6q-python2.7,把zlib-1.2.3.tar.gz和openssl-OpenSSL_1_0_1b.zip移動(dòng)到misc目錄下?;蛘咧苯訌?fù)制提供的軟件包中mx6q-python2.7文件到/root目錄下。

 

確定交叉編譯工具鏈

確定當(dāng)前交叉編譯器鏈,如果交叉編譯鏈不一致, 替換下文中的編譯器。當(dāng)前的交叉編譯鏈為arm-none-linux-gnueabi-.可以通過(guò)下面命令確定當(dāng)前編譯鏈。

find / -name arm-*-gcc

如果交叉編譯鏈不一致,替換下文中的編譯器

 

編譯安裝

編譯安裝sqlite3

編譯安裝sqlite3, python需要sqlite3支持。

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

編譯openssl和zlib

編譯zlib

cd /root/mx6q-python2.7/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
sed -i 's/AR=ar/AR=arm-none-linux-gnueabi-ar/g' Makefile

make

make install

編譯openssl

cd /root/mx6q-python2.7/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

需要修改Makefile中的CC變量為CC= $(CROSS_COMPILE)gcc

make
make install

打包編譯好的安裝包,移植到開(kāi)發(fā)板需要用到

cd arm_install
tar jcvf openssl-OpenSSL_1_0_1b.tar.bz2 *
cp openssl-OpenSSL_1_0_1b.tar.bz2 /root/mx6q-python2.7/output/sources

l 編譯python2.7

編譯python2.7 for x86

cd /root/mx6q-python2.7/
tar xvf Python-2.7.13.tgz
cd python2_7_13_for_x86_64/
sed -i 's/self.extensions.remove(ext)/print(ext.name)/g' ../Python-2.7.13/setup.py
../Python-2.7.13/configure --prefix=`pwd`
make -j8 && make install

編譯python2.7 for arm

打補(bǔ)丁

cd ..
tar xvf Python-2.7.13-xcompile.patch.tar.gz -C Python-2.7.13
cd Python-2.7.13/
patch -p1 < Python-2.7.13-xcompile.patch

修改模塊連接配置

vim Modules/Setup.dist,取消下列配置注釋

zlib zlibmodule.c -I$(prefix)/include -L$(prefix)/lib -lz
_ssl _ssl.c \
    -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
    -L$(SSL)/lib -lssl -lcrypto

編譯python2.7 for arm

配置

cd ../python2_7_13_for_arm/

拷貝bksh文件到/root/mx6q-pythin2.7/下

cp ../bksh/py2* .可直接運(yùn)行腳本py2config-for-arm.sh

或者輸入下面的指令。

../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執(zhí)行之前,需要先安裝zlib和openssl,并將其各自的include和lib拷貝到python2_7_13_for_arm文件夾下.或者可直接運(yùn)行py2-cp-libAndssl-arm-toHere.sh腳本會(huì)自動(dòng)把misc下的zlib和openssl庫(kù)的頭文件和庫(kù)拷貝到當(dāng)前目錄下。

編譯

cd /root/mx6q-python2.7/python2_7_13_for_arm/

運(yùn)行py2make-for-arm.sh或者運(yùn)行下面的命令。

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`

安裝

運(yùn)行py2install.sh或者運(yùn)行下面的命令。

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

打包

cd ../INSTALL/
tar jcvf python2.7-for-arm.tar.bz2 *
cp python2.7-for-arm.tar.bz2 ../output/sources/

l ntpdate網(wǎng)絡(luò)時(shí)間同步工具

交叉編譯

cd /root/mx6q-python2.7
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

打包

如果不需要幫助文檔可把a(bǔ)rm_install目錄下的/share目錄刪掉,減少占用。

cd arm_install
rm share -rf [可選]
tar jcvf ntp-4.2.8.p10.tar.bz2 *
cp ntp-4.2.8.p10.tar.bz2 ../../output/

l output輸出目錄

復(fù)制setuptools腳本到輸出目錄

cd /root/mx6q-python2.7/
cp setuptools-0.6c11-py2.7.egg output/sources/

最后的目錄格式如下:

├── ntp-4.2.8.p10.tar.bz2
└── sources
    ├──openssl-OpenSSL_1_0_1b.tar.bz2
    ├── python2.7-for-arm.tar.bz2
    └── setuptools-0.6c11-py2.7.egg

到此,python編譯完整, 移植到開(kāi)發(fā)板的步驟請(qǐng)參考"python2.7直接使用手冊(cè)".

過(guò)程二:Python在開(kāi)發(fā)板配置

將以上生成的output文件夾拷貝到iMX6Q開(kāi)發(fā)板

1. 解壓縮包島開(kāi)發(fā)版

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  / 

cp ntp-4.2.8p10-arm-no-share.tar.gz  /

2. 修改配置

修改文件/lib/pkgconfig/python2.pc如下.
prefix=/
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

修改文件vi /bin/python2.7-config的第一行如下.

#!/bin/python2.7

在/etc/profile中添加一下配置, 修改成功后source /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.  進(jìn)入到easy_install文件夾, 安裝easy_install.

輸入 /bin/bash setuptools-0.6c11-py2.7.egg 安裝easy_install.

修改文件vi /etc/profile,

添加alias easy_install='easy_install -i http://pypi.douban.com/simple'.

保存退出便于之后安裝管理, source /etc/profile使生效配置

4. 取消SSL全局驗(yàn)證并驗(yàn)證easy_install,修改文件vi /bin/easy_install增加如下配置.

 import ssl
ssl._create_default_https_context = ssl._create_unverified_context

5. 配置好網(wǎng)絡(luò)

參考其他配置應(yīng)用筆記配置網(wǎng)絡(luò)的方法。

6. 安裝ntp網(wǎng)絡(luò)對(duì)時(shí), 進(jìn)入ntp文件夾.

tar xvf ntp-4.2.8p10-arm-no-share.tar.gz -C /
ntpdate time.buptnet.edu.cn

注:此處可能因?yàn)閷?duì)時(shí)網(wǎng)址問(wèn)題會(huì)出現(xiàn)錯(cuò)誤,針對(duì)報(bào)錯(cuò)信息直接搜索即可解決。

7. 安裝pip

easy_install pip      安裝成功后, pip -V 查看當(dāng)前安裝版本.

8. pip安裝模塊測(cè)試

 pip install requests

pip list 查看已安裝的模塊.

9. 導(dǎo)入模塊測(cè)試,輸入python2.7進(jìn)入python2.7 shell.輸入 import requests,無(wú)錯(cuò)誤輸出。輸入exit() 退出python shell.

相關(guān)產(chǎn)品 >

  • FETMX6Q-C核心板

    i.MX6Q核心板板層出不窮,要如何選擇?飛凌解讀i.mx6Q芯片強(qiáng)性能為您推薦四核A9架構(gòu)的i.MX6Q產(chǎn)品精選,包含iMX6Q 核心板、i.MX6Q 核心板、iMX6Q工業(yè)級(jí)核心板,歡迎采購(gòu)。  i.MX6Q核心板基于NXP(原Freescale)Cortex-A9架構(gòu)的i.MX6Q四核處理器設(shè)計(jì),核心板小尺寸核心板搭配獨(dú)特的薄款連接器,讓設(shè)計(jì)隨心所欲!

    了解詳情
    FETMX6Q-C核心板
  • FETMX6Q-S核心板

    NXP iMX6Quad系列具有四個(gè)內(nèi)核,運(yùn)行頻率達(dá)1.2 GHz,帶有1 MB L2緩存和64位DDR3或2通道、32位LPDDR2支持。飛凌提供商業(yè)級(jí)iMX6Q核心板,工業(yè)級(jí)iMX6Q核心板,兼容一同底板。具有抗震,抗氧化,抗干擾,更快速升級(jí)產(chǎn)品等優(yōu)勢(shì)。保定飛凌嵌入式專注imx6,imx6開(kāi)發(fā)板,飛思卡爾imx6等ARM嵌入式核心控制系統(tǒng)研發(fā)、設(shè)計(jì)和生產(chǎn),是imx6,imx6開(kāi)發(fā)板,飛思卡爾imx6提供者,imx6系列產(chǎn)品現(xiàn)已暢銷全國(guó),歡迎咨詢!
    了解詳情
    FETMX6Q-S核心板

推薦閱讀 換一批 換一批