搜索

121

主题

128

帖子

665

积分

网站编辑

Rank: 8Rank: 8

积分
665
发表于 2021-6-3 16:28:51 7733 浏览 0 回复

i.MX6开发板QT系统Python移植

本帖最后由 翠花儿 于 2021-6-3 16:34 编辑

本文档介绍 Python 如何移植到 IMX6Q开发板上,并有几个简单的测试例程。相关的配套资料在网盘资料“iTOP-i.MX6开发板资料汇总(不含光盘资料)\08_iTOP-i.MX6开发板Linux系统开发资料\20-QT系统Python移植”目录。
51.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/topeet/iMX6Q/python目录下,使用命令 tar -vxf Python-2.7.3.tar.bz2 解压源码压缩包得到目录 Python-2.7.3。
51.2 编译
51.2.1 编译host版解释器
编译 Python 的嵌入式版需要解释器解析 setup.py 从而编译 Python 的模块,因此需要先编译出 HOST 的解释器 。
1进入解压出来的”Python-2.7.3”,目录,执行命令“./configure”运行配置文件。
2执行完后生成Makefile文件,如下图:
3执行命令“make python Parser/pgen”,编译 PC 版 python Parser/pgen ,如下图所示:
4编译成功后如下图:
5执行命令“mv python hostpython”将生成的 PC 版移动至 hostpython 。
6执行命令“mv Parser/pgen Parser/hostpgen”将生成的 PC 版解释器移动至Parser/hostpgen 。
输入“find -name "host*"”,查看文件
7执行命令“make distclean”清除不必要的文件。
51.2.2 arm补丁
交叉编译的补丁我们放到 python目录下,执行命令
patch -p1 < /home/topeet/iMX6Q/python/Python-2.7.3-xcompile.patch 进行打补丁。
51.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
51.2.4 编译和安装测试
1将压缩包中提供的编译好的 sqlite3 库“install_python.tar”通过 ssh 拷贝到 /home/topeet/iMX6Q/python 下然后解压,得到“install_python”。用户也可以自己编译 sqlite3 库,本文第四小节介绍库的编译。  
2进入 Python-2.7.3,执行命令“vim setup.py”修改 setup.py ,找到 1044 行将 paths 改为 install_python 所在路径,如下图所示。
3定位到 1099 行,修改路径如下图所示。
4执行命令“./configure --host=arm-none-linux-gnueabi --prefix=/python

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml10124\wps56.jpg
生成符合交叉编译器的 Makefile,成功后如下图。
5执行 make 命令进行编译“make HOSTPYTHON=./hostpython HOSTPGEN=./Parser/hostpgen BLDSHARED="arm-none-linux-gnueabi-gcc -shared" CROSS_COMPILE=arm-none-linux-gnueabi-CROSS_COMPILE_TARGET=yes”此时会提示缺失模块,忽略
成功后如下图:
6执行以下命令安装到指定文件夹“ make install HOSTPYTHON=./hostpython BLDSHARED="arm-none-linux-gnueabi-gcc -shared" CROSS_COMPILE=arm-nonelinux-gnueabi- CROSS_COMPILE_TARGET=yes prefix=/home/topeet/iMX6Q/python/Python-2.7.3/_install”。
其中 prefix=/home/ubuntu/python/Python-2.7.3/_install 是指定的安装目录,用户根据实际情况更改。
成功后如下图:
7使用命令“ls _install”查看结果:
8 输入命令“cd _install/bin/”进入该目录下,再输入“file python2.7”查看文件的属性,发现是arm类型的,则可以在开发板上面运行。
9 输入命令“cd _install/lib/python2.7/lib-dynload/”“ls”lib-dynload文件夹下是编译好的动态加载的模块,因为之后我们要进行datetime,time,sqlite测试,所以我们要确保这三个模块是存在的,如下图所示:
10 拷贝库文件“install_python/lib/”的库文件到“/Python-2.7.3/_install/lib/”下面下 ,拷贝完如下图所示:
输入“ls -all”查看库链接是否正常,如下图所示链接正常即可。
11将_install 目录整个打包,拷贝到开发板上的“/lib”目录下,然后解压,笔者使用的是
ssh(本文档附带的资料包里面QT5.7系统是有ssh功能的) ,用户也可以通过NFS挂载目录或 U 盘或者移植ssh到开发板拷贝过去。
11进入_install 目录,使用命令以下命令设置环境变量:
export export LD_LIBRARY_PATH=/lib/_install/lib:$LD_LIBRARY_PATH
51.3 运行测试51.3.1 库功能文件测试
进入_install/bin 目录下使用命令./python,然后使用 import 加载各模块如下图所示则 python 移植成功。按 ctrl+D 退出。
51.3.2 数据库测试
在提供的压缩包里提供的有 sqlite3 数据库的例程 sqlite3test.txt,例程解释如下。
#导入SQLite驱动
import sqlite3
#连接到SQLite数据库,数据库文件是test.db,如果文件不存在,会自动在当前目录创建
conn = sqlite3.connect('test.db') print "Opened database successfully"
#创建一个Cursor
cursor = conn.cursor()   
#执行一条SQL语句,创建user表  
cursor.execute('create table user (id varchar(20) primary key, name varchar(20))')  
#执行一条SQL语句,插入一条记录
cursor.execute('insert into user (id, name) values (\'1\', \'Michael\')')   
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
将测试例程 sqlite3test.txt文件通过ssh拷贝到开发板lib/_install/bin/ 目录下,执行命令”./python sqlite3test.txt” 可以看到生成了数据库文件 test.db 文件。
51.3.3 time和datetime测试
将测试例程 timetest.txt文件通过ssh拷贝到开发板lib/_install/bin/ 目录下
我们输入以下命令先调整时间,设定时间大家以实际时间进行调整
date -s "2020-09-12 13:32:00" && hwclock --systohc
然后执行以下命令可完成时间格式的转换和微秒级时间差的计算。
./python timetest.txt
以上步骤无误后将环境变量添加到/etc/profile文件,如下图所示:
51.3.4 sqlite3库的移植
本章将制作54.2.4章节用到的install_python文件。和本文档同目录下有数据库的压缩包,也可以去 sqlite 官网下载最新的数据库,通过 ssh 拷贝到 /home/ubuntu/python/ 目录下,使用命令“tar -vxf sqlite-autoconf-3240000.tar.gz ”解压,解压后生成文件夹“sqlite-autoconf-3240000”  如下图所示:
进入解压后生成的文件夹“sqlite-autoconf-3240000”,在sqlite-autoconf-3240000目录下新建一个“install_python”文件夹,执行命令“./configure --host=arm-none-linux-gnueabi --prefix=/home/topeet/iMX6Q/python/sqlite-autoconf-3240000/install_python --enable-shared”,成功后生成Makefile等文件,如下图。
执行make编译,成功后如下图:
执行命令“make install”,会看到在 sqlite-autoconf-3240000 目录下产生文件夹install_python,执行命令“ls install_python”可以看到目录下有:bin include lib 三个文件夹。
至此 sqlite3 的库已经编译完成,用户需要其他的库文件也可以照此编译。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

登录或注册

官方客服

QQ:2551456065

官方QQ群

195631883

扫一扫关注迅为公众号

群号652692981

 
快速回复 返回顶部 返回列表