迅为iTOP-iMX6ULL 开发板-Python 移植

本章节转自迅为iMX6ULL开发板教程第九十二章,主要介绍 Python 如何移植到 IMX6ULL 开发板上。

 

硬件平台:迅为iMX6ULL开发板

 

 

92.1 源码包

和文档在一起的源码包有:“python-2.7.3 源码和补丁.zip”---python 压缩包和补丁文件;

“install_python.tar”---编译好的 sqlite 库文件;

“sqlite-autoconf-3240000.tar.gz”---sqlite 的源码文件;

“测试程序”---python 测试例程。

到 Python 官网下载源码包 2.7.3,地址 https://www.python.org/downloads/source/,或者使用压缩包中提

供的源码

 

 

 

通过 ssh 将 Python-2.7.3.tar.bz2 和补丁 Python-2.7.3-xcompile.patch 拷贝到

ubuntu 系统的 home/miniLinux 目录下,使用命令 tar -vxf Python-2.7.3.tar.bz2 解压源码

压缩包得到目录 Python-2.7.3。

 

 

 

92.2 编译

92.2.1 编译 host 版解释器

编译 Python 的嵌入式版需要解释器解析 setup.py 从而编译 Python 的模块,因此需要

先编译出 HOST 的解释器 。

进入解压出来的”Python-2.7.3”,目录,执行命令“./configure”运行配置文件。

执行完后生成 Makefile 文件,如图 92.2.1.1:

执行命令“make python Parser/pgen”,编译 PC 版 python Parser/pgen ,成功后如图 92.2.1.2:

 

 

执行命令“mv python hostpython”将生成的 PC 版移动至 hostpython ,

执行命令“mv Parser/pgen Parser/hostpgen”将生成的 PC 版解释器移动至 Parser/hostpgen 。

 

 

执行命令“make distclean”清除不必要的文件。

 

 

 

 

92.2.2 arm 补丁

交叉编译的补丁我们放到 python 目录下,执行命令 patch -p1 <

/home/ubuntu/python/Python-2.7.3-xcompile.patch 进行打补丁。

 

 

92.2.3 交叉编译配置

在“/home/ubuntu/python/Python-2.7.3”目录下执行以下命令进行设置 :

设置交叉编辑器

CC=arm-none-linux-gnueabi-gcc

设置 C++交叉编译器 CXX=arm-none-linux-gnueabi-g++

设置 AR

AR=arm-none-linux-gnueabi-ar

设置 RANLIB

RANLIB=arm-none-linux-gnueabi-ranlib

 

 

92.2.4 编译和安装测试

将压缩包中提供的编译好的 sqlite3 库“install_python.tar”通过 ssh 拷贝到 /home/ubuntu/python 下

然后解压,得到“install_python”。用户也可以自己编译 sqlite3 库,本文第四小节介绍库的编译。

 

 

 

进入 Python-2.7.3,执行命令“vim setup.py”修改 setup.py ,找到 1044 行将 paths 改为 install_python

所在路径,如图 92.2.4.2 所示。

 

定位到 1099 行,修改路径如图 92.2.4.3 所示。

 

 

 

执行命令“./configure --host=arm-none-linux-gnueabi --prefix=/python ”生成符合交叉编译器的 Makefile,

成功后如图 92.2.4.4。

 

 

 

执行 make 命令进行编译“make HOSTPYTHON=./hostpython

HOSTPGEN=./Parser/hostpgen BLDSHARED="arm-none-linux-gnueabi-gcc -shared"

CROSS_COMPILE=arm-none-linux-gnueabi- CROSS_COMPILE_TARGET=yes ”此时会提示缺失模块,忽略

 

 

 

成功后如图 92.2.4.6:

 

 

执行以下命令安装到指定文件夹“make install HOSTPYTHON=./hostpython

BLDSHARED="arm-none-linux-gnueabi-gcc -shared" CROSS_COMPILE=arm-nonelinux-gnueabi-

CROSS_COMPILE_TARGET=yes prefix=/home/ubuntu/python/Python-

2.7.3/_install”。

其中 prefix=/home/ubuntu/python/Python-2.7.3/_install 是指定的安装目录,用户根据实际

情况更改。

 

 

 

成功后如图 92.2.4.8:

 

 

使用命令“ls _install”查看结果:

 

 

拷贝库文件“install_python/lib/libsqlite3.so.0”到“/Python-2.7.3/_install/lib/”

下 :cp install_python/lib/libsqlite3.so.0 Python-2.7.3/_install/lib/

 

 

将_install 目录整个打包,拷贝到开发板上的“/data”目录下,然后解压,笔者使用的是

NFS 挂载的根文件系统 ,用户也可以通过 NFS 挂载目录或 U 盘拷贝过去。

 

 

进入_install 目录,使用命令以下命令设置环境变量:

“export export LD_LIBRARY_PATH=/data/_install/lib:$LD_LIBRARY_PATH”

 

 

92.3 运行测试

92.3.1 库功能文件测试

进入_install/bin 目录下使用命令./python,然后使用 import 加载各模块如图 92.3.1.1 所

示则 python 移植成功。按 ctrl+D 退出。

 

 

 

 

 

92.3.2 数据库测试

在提供的压缩包里提供的有 sqlite3 数据库的例程 sqlite3test.txt,例程解释如下。

import sqlite3

#导入 SQLite 驱动

conn = sqlite3.connect('test.db') #连接到 SQLite 数据库,数据库文件是 test.db,如果文件不

存在,会自动在当前目录创建

print "Opened database successfully"

cursor = conn.cursor()

#创建一个 Cursor

cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')

#执行一条 SQL 语句,创建 user 表

cursor.execute('insert into user (id, name) values (\'1\', \'Michael\')')

#执行一条 SQL 语句,插入一条记录

cursor.execute('insert into user (id, name) values (\'2\', \'jack\')')

print "Records created successfully"

cursor.rowcount

#通过 rowcount 获得插入的行数

cursor.close()

#关闭 Currsor

conn.commit()

#提交事务

conn.close()

#关闭 Connection

执行命令”./python sqlite3test.txt” 可以看到生成了数据库文件 test.db 文件。

 

 

 

92.3.3 time 和 datetime 测试

我们可以先调整时间:“date -s "2020-07-21 16:02:00" && hwclock --systohc”

在 提 供 的 压 缩 包 里 提 供 的 有 time 测 试 的 例 程 timetest.txt , 将 测 试 例 程 拷 贝 到 开 发 板 的

/data/_install/bin 下,执行命令“./python timetest.txt”可完成时间格式的转换和微秒级时间差的计算。

 

 

 

以上步骤无误后将环境变量添加到/etc/profile 文件:

export LD_LIBRARY_PATH=/data/_install/lib:$LD_LIBRARY_PATH

 

 

 

92.3.4 sqlite3 库的移植

本章将制作 2.4 章节用到的 install_python 文件。和本文档同目录下有数据库的压缩包,也可以去 sqlite

官 网 下 载 最 新 的 数 据 库 , 通 过 ssh 拷 贝 到 /home/ubuntu/python/ 目 录 下 , 使 用 命 令 “ tar -vxf

sqlite-autoconf-3240000.tar.gz ”解压,解压后生成文件夹“sqlite-autoconf-3240000” 如图 92.3.4.1 所示:

 

 

 

 

进入解压后生成的文件夹“sqlite-autoconf-3240000”,执行命令“./configure --

host=arm-none-linux-gnueabi --prefix=/home/ubuntu/python/sqlite-autoconf-3240000/install_python

--enable-shared”,成功后生成 Makefile 等文件,如图 92.3.4.2。

 

 

 

执行 make 编译,成功后如图 92.3.4.3:

 

 

执行命令“make install”,会看到在 sqlite-autoconf-3240000 目录下产生文件夹 install_python,执行命

令“ls install_python”可以看到目录下有:bin include lib 三个文件夹。

 

 

至此 sqlite3 的库已经编译完成,用户需要其他的库文件也可以照此编译。