之移植Python2.7与sqlite3到TL-4379
【创龙AM4379 Cortex-A9试用体验】之移植Python2.7与sqlite3到TL-4379
Python以简单易学、丰富的第三方库、优秀的跨平台特性、高效的开发效率等,使得Python成为了世界排名第五的编程语言,尤其是2016年初的“引力波”的发现,其数学运算的开发工具用的就是Python。
鉴于Python上述优良特性,我们可以把Python移植到能够在ARM体系结构的处理器上,并使其运行在嵌入式的Linux系统平台上,提高我们开发基于socket、sqlite应用程序的速度,快速实现工作中的某些功能测试软件开发。
本移植的目的是,在TL-4379软、硬件平台上运行的Python程序能够实现socket通讯,以及基于sqlite的本地数据库存储,为我的数据中继服务器做好前期基础工作。
1. 移植sqlite3
要想Python在ARM平台上也支持sqlite,首先我们需要先变成出ARM版的sqlite可执行程序,以及其相对应的include和lib文件,供后续的Python移植、交叉编译使用。
下载sqlite3.6.16,即sqlite-amalgamation-3.6.16.tar.gz
将sqlite-amalgamation-3.6.16.tar.gz拷贝到Ubuntu虚拟机,执行如下命令:
tar -zxvf sqlite-amalgamation-3.6.16.tar.gz-C /media/tl437x/reference
执行结果如图所示:
执行命令:
cd sqlite-3.6.16
执行configure命令,生成Makefile,
./configure --host=arm-linux-gnueabihf--prefix=/home/tl/install_python --enable-shared--disable-readline --disable-dynamic-extensions
其中--host=arm-linux-gnueabihf代表我们安装的交叉编译工具链,--prefix=/home/tl/install_python代表交叉编译后,将sqlite3安装到的目标路径。
生成Makefile后,开始交叉编译sqlite3,执行命令:
make
编译结束后,执行安装命令:
make install
安装后的结果如图所示:
我们坚持一下bin目录下的可执行文件是否是ARM版本的,执行如下命令:
cd bin
file sqlite3
结果如图所示:
出现ARM字样,说明交叉编译是成功的。
2. 下载、解压Python2.7
我们以Python2.7.3为交叉编译目标,首先到网上下载Python2.7.3,同时必须下载Python2.7.3的补丁文件,否则无法完成对Python2.7的交叉编译。
将下载到的Python2.7源码包拷贝到Ubuntu虚拟机,执行解压缩:
tar -jxvf Python-2.7.3.tar.bz2 -C/media/tl437x/reference
结果如下图所示:
3. 配置、编译Python2.7
3.1 配置Python2.7对sqlite3的支持
执行命令切换到Python2.7的源码目录:
cd /media/tl437x/reference/Python2.7.3
执行如下命令,编辑Python2.7对sqlite的支持配置项“
gedit setup.py
修改的内容如图所示:
以上内容的修改,要与你自己在第一节介绍的sqlite交叉编译后安装路径相一致。
3.2 编译PC版的Python2.7相关文件
有在交叉编译Python过程中,需要用到相关的PC版本的文件,执行如下命令:
./configure
make python Parser/pgen
mv python hostpython
mvParser/pgen Parser/hostpgen
make distclean
3.3 交叉编译Python2.7
1)下载Python2.7.3补丁
Python-2.7.3-xcompile.patch(我提供的附件已包含)
2)给Python2.7.3打补丁
cp /补丁路径/ Python-2.7.3-xcompile.patch ./
patch -p1 < <Python-2.7.3-xcompile.patch
3)执行命令,设置交叉编译器
CC=arm- linux-gnueabihf-gcc
CXX=arm- linux-gnueabihf-g++
AR=arm-linux-gnueabihf-ar
RANLIB=arm- linux-gnueabihf-ranlib
4) 执行configure,生产Makefile
./configure --host=arm-linux-gnueabihf--prefix=/python
5) 执行编译
make HOSTPYTHON=./hostpythonHOSTPGEN=./Parser/hostpgen BLDSHARED="arm-linux-gnueabihf-gcc -shared"CROSS_COMPILE=arm-linux-gnueabihf- CROSS_COMPILE_TARGET=yes)
6) 安装
make install HOSTPYTHON=./hostpythonBLDSHARED="arm-linux-gnueabihf-gcc -shared" CROSS_COMPILE=arm-linux-gnueabihf-CROSS_COMPILE_TARGET=yes prefix=/home/tl/Python-2.7.3/_install
其中prefix=/home/tl/Python-2.7.3/_install为安装路径
cd /home/tl/Python2.7.3/_install/bin
ls
file python2.7
查看结果如下所示:
说明我们对Python2.7.3的编译也是成功的。
4 测试Python2.7
1) 将交叉编译好的Python2.7.3拷贝到NFS共享目录
cp -R /home/tl/Python2.7.3 /nfsshare
2) 启动TL-4379开发板,挂载NFS
mount -t nfs 192.168.1.136:/nfsshare /mnt-o nolock
cd /mnt/Python2.7.3/_install/bin
./python
执行结果如下图所示:
说明Python2.7.3启动成功。
输入测试语句,如下图所示:
执行a=10
b=10
c=a+b
pint c
20
说明Python2.7运行正常。
测试导入其他库如图所示:
说明导入其他库成功。
5 小结
这一篇试用报告中,我们成功移植Python到TL-4379,为我们后续的其他功能测试做了基本的准备工作,接下来继续测试其他功能。
一直关注小编的报告更新,很精彩
谢谢,有问题大家一起讨论
对于给大家带来知识的,我们要给予掌声。
谢谢支持,继续努力,发扬开源、知识共享精神
Python2.7一般linux都是已经有了的吧
你自己在开发板上执行一下Python命令,看看是否能调用,别凡事就“一般”怎么怎么样
最好找一块那种非树莓派或卡片电脑那种跑debian系统的那种
我手头有一块天嵌E9的开发板,我烧写了Linux系统,我们看一下是否可以调用Python命令
我执行python命令:
如果你是一个标准的Ubuntu系统,或像树莓派这样的系统,商业化已经很成熟了,不排除Linux系统直接就把python放入bin目录了,但是对于一般的ARM开发板,学习用的,不是太成熟的,除了mini2440这种超级有名的开发板,多数是没有集成的,需要自己移植、交叉编译,“如果”,“一般”,“假如”,“不就是”这些想当然的词怎么经常会听到,不确定的时候最好自己亲自试一下,某人说过,没有调查就没有发言权,以免误导
学习了
老司机,求带路;好好学习,天天向上
老司机,求带路;好好学习,天天向上
老司机,求带路;好好学习,天天向上
我来看看 主要来向大神学习嵌入式培训www.arm8.net
最近项目时间太紧,没有时间逛论坛了,后续会继续跟大家交流
老司机,求带路;好好学习,天天向上
你好,你这说的太好了,我现在在ARM-linux系统下已经移植了python,可是我的程序需要pyaudio和pycurl库,我把这两个库拷贝后放在板子里,然后在对应目录下使用python setup.py install怎么无法安装,怎么才能安装成功呢,望前辈指教,跪求指导,急用,PC机程序都测试好了,就是现在需要嵌入式运行成功
学习一下,谢谢小编分享