移植Python2.7到ARM-LINUX嵌入式平台
2018-02-19 11:56
381 查看
笔者长期在ARM-LINUX嵌入式平台使用C语言开发。硬件IO操作只能用C确实没办法,但是应用程序用C简直就苦了个逼了,程序复杂一点,各种越界、指针错误、诡异死机、segment fault、内存泄漏、core dump、编译找不到头文件、依赖库,解析个字符费老劲,轮子太少纯靠白手起家。自从把Python移植到嵌入式平台,用C写完IO的Python扩展库然后用Python写应用程序完全就是摧枯拉朽般存在。Python版本:2.7.3
交叉编译器:arm-none-linux-gnueabi-
硬件平台:AT91 ARM9、NUC97x、TI AM335x
源码下载&解压[plain] view plain copywget https://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.xz
xz -d Python-2.7.3.tar.xz
tar xvf Python-2.7.3.tar
编译HOST版解释器编译Python的嵌入式版需要解释器解析setup.py从而编译Python的模块,因此需要先编译出HOST的解释器。[plain] view plain copy./configure
make python Parser/pgen
mv python hostpython
mv Parser/pgen Parser/hostpgen
make distclean
打交叉编译补丁点击下载补丁
[plain] view plain copypatch -p1 < Python-2.7.3-xcompile.patch
交叉编译配置设置交叉编译工具链为arm-none-linux-gnueabi,编译生成的执行文件存放目录为当前目录的_install文件夹。[plain] view plain copy./configure --host=arm-none-linux-gnueabi --prefix=$PWD/_install
编译&安装[plain] view plain copymake HOSTPYTHON=./hostpython HOSTPGEN=./Parser/hostpgen BLDSHARED="arm-none-linux-gnueabi-gcc -shared" CROSS_COMPILE=arm-none-linux-gnueabi- CROSS_COMPILE_TARGET=yes
make install HOSTPYTHON=./hostpython BLDSHARED="arm-none-linux-gnueabi-gcc-shared" CROSS_COMPILE=arm-none-linux-gnueabi- CROSS_COMPILE_TARGET=yes prefix=$PWD/_install
执行完以上命令之后在_install中产生bin lib include share 4个文件夹,避免麻烦可以将以上命令写成一个脚本。目标板文件拷贝将_install/bin 中的所有内容拷贝到目标板的任意环境变量能够访问到的目录即可,推荐/bin、/usr/bin。将_install/lib 中的所有内容拷贝到目标板/lib中将_install /include 中的所有内容拷贝到目标板/include中。因为其中的某些头文件是Python环境所需要的,比如Python解释器启动依赖于pyconfig.h,import time模块时依赖timefuncs.h。环境变量设置将python2.7路径加入到环境变量 PYTHONHOME、PYTHONPATH中。如果是/etc/profile,在文件末尾添加如下信息然后执行 source /etc/profile。[plain] view plain copyexport PYTHONPATH=/lib/python2.7:$PYTHONPATH
export PYTHONHOME=/lib/python2.7:$PYTHONHOME
如果是命令行,执行如下:[plain] view plain copyexport PYTHONPATH=$PYTHONPATH:/lib/python2.7
export PYTHONHOME=$PYTHONHOME:/lib/python2.7
验证目标板Python打开解释器,import 一些常用模块,编写程序测试。
后记可能import time、datetime、threading、multiprocessing时提示缺少time、_collections、itertools等模块。这些是 builtin 模块,可以通过sys.builtin_module_names查看。其源码在Modules目录中,编译完成以 .so 的形式存放在/lib/python2.7/lib-dynload中。首先在setup.py中 disabled_module_list=[] 是否将这些模块disabled掉了。如果依然无法解决,则在Modules/config.c中参考其他模块的写法添加代码,手动编译即可在build/lib.xx.2.7目录中产生 .so 文件。转自:http://blog.csdn.net/messidona11/article/details/73920174
交叉编译器:arm-none-linux-gnueabi-
硬件平台:AT91 ARM9、NUC97x、TI AM335x
源码下载&解压[plain] view plain copywget https://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.xz
xz -d Python-2.7.3.tar.xz
tar xvf Python-2.7.3.tar
编译HOST版解释器编译Python的嵌入式版需要解释器解析setup.py从而编译Python的模块,因此需要先编译出HOST的解释器。[plain] view plain copy./configure
make python Parser/pgen
mv python hostpython
mv Parser/pgen Parser/hostpgen
make distclean
打交叉编译补丁点击下载补丁
[plain] view plain copypatch -p1 < Python-2.7.3-xcompile.patch
交叉编译配置设置交叉编译工具链为arm-none-linux-gnueabi,编译生成的执行文件存放目录为当前目录的_install文件夹。[plain] view plain copy./configure --host=arm-none-linux-gnueabi --prefix=$PWD/_install
编译&安装[plain] view plain copymake HOSTPYTHON=./hostpython HOSTPGEN=./Parser/hostpgen BLDSHARED="arm-none-linux-gnueabi-gcc -shared" CROSS_COMPILE=arm-none-linux-gnueabi- CROSS_COMPILE_TARGET=yes
make install HOSTPYTHON=./hostpython BLDSHARED="arm-none-linux-gnueabi-gcc-shared" CROSS_COMPILE=arm-none-linux-gnueabi- CROSS_COMPILE_TARGET=yes prefix=$PWD/_install
执行完以上命令之后在_install中产生bin lib include share 4个文件夹,避免麻烦可以将以上命令写成一个脚本。目标板文件拷贝将_install/bin 中的所有内容拷贝到目标板的任意环境变量能够访问到的目录即可,推荐/bin、/usr/bin。将_install/lib 中的所有内容拷贝到目标板/lib中将_install /include 中的所有内容拷贝到目标板/include中。因为其中的某些头文件是Python环境所需要的,比如Python解释器启动依赖于pyconfig.h,import time模块时依赖timefuncs.h。环境变量设置将python2.7路径加入到环境变量 PYTHONHOME、PYTHONPATH中。如果是/etc/profile,在文件末尾添加如下信息然后执行 source /etc/profile。[plain] view plain copyexport PYTHONPATH=/lib/python2.7:$PYTHONPATH
export PYTHONHOME=/lib/python2.7:$PYTHONHOME
如果是命令行,执行如下:[plain] view plain copyexport PYTHONPATH=$PYTHONPATH:/lib/python2.7
export PYTHONHOME=$PYTHONHOME:/lib/python2.7
验证目标板Python打开解释器,import 一些常用模块,编写程序测试。
后记可能import time、datetime、threading、multiprocessing时提示缺少time、_collections、itertools等模块。这些是 builtin 模块,可以通过sys.builtin_module_names查看。其源码在Modules目录中,编译完成以 .so 的形式存放在/lib/python2.7/lib-dynload中。首先在setup.py中 disabled_module_list=[] 是否将这些模块disabled掉了。如果依然无法解决,则在Modules/config.c中参考其他模块的写法添加代码,手动编译即可在build/lib.xx.2.7目录中产生 .so 文件。转自:http://blog.csdn.net/messidona11/article/details/73920174
相关文章推荐
- 移植Python2.7到ARM-LINUX嵌入式平台
- Qt for ARM_Linux环境搭建-Qt5.7+iTop4412嵌入式平台移植
- ARM平台下的嵌入式linux移植大纲(一)
- ARM的嵌入式Linux移植体验之设备驱动
- ARM平台嵌入式Linux下使用3G/4G 模块
- RT5572 5G网卡移植到友善之臂4412 嵌入式arm+linux
- arm Linux平台下FFmpeg的移植
- ARM的嵌入式Linux移植体验之应用实例
- 嵌入式ARM平台基于Linux配置应用程序开机自启动(fluxbox参考)
- Linux平台上移植嵌入式WEB服务器GoAhead2.5
- 移植MySQL到嵌入式ARM平台
- QT环境搭建: QT玩转在linux的x86平台或者ARM平台上 - (2)交叉编译移植到ARM下
- 移植MySQL到嵌入式ARM平台
- 【嵌入式】S3C2410平台移植linux 2.6.14内核
- ARM Linux平台QTE+tslib移植后感
- 用vs2013+velt-0.1.4进行嵌入式开发 进行海思平台 UBOOT 开发 分类: arm-linux-Ubuntu Windows-嵌入式 2015-06-27 11:59 393人阅读 评论(0) 收藏
- ARM嵌入式Linux移植体验设备驱动(续1)
- S3C6410嵌入式应用平台构建(六)——linux-3.14.4移植到OK6410-(Yaffs2文件系统移植)
- jsoncpp linux平台编译和 arm移植
- 在arm平台下移植linux