我的编程空间,编程开发者的网络收藏夹
学习永远不晚

移植Python到ARM9(S3C244

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

移植Python到ARM9(S3C244

来源:http://hi.baidu.com/vaico/blog/item/2d39d0c497b54da18326ac7d.html

我需要在Arm9的s3c2440 CPU上运行python,以下是我的编译过程。

 

host编译环境:

ubuntu 7.04, gcc 4.2.1, arm-linux-gcc 3.3.2

 

要cross compile的程序:
  • sqlite 3.5.6,
  • python 2.5.1

 

编译sqlite

先去 http://www.sqlite.org/download.html 下载最新的sqlite源代码,我这里用的是3.5.6版本的。

我推荐使用amalgamation版本的源代码,这个代码只有几个文件而已,编译起来方便,而且据说 编译器好的话,还可能编译出更高效的代码。 我下载的是

 


http://www.sqlite.org/sqlite-amalgamation-3.5.6.tar.gz

先运行以下几步:

 


tar zxf sqlite-amalgamation-3.5.6.tar.gz
cd sqlite-3.5.6
./configure --host=arm-linux --prefix=/usr/local/arm/3.3.2 --enable-shared --disable-readline --disable-dynamic-extensions

以上是把sqlite解压缩,然后做一些配置,这里,我希望sqlite到时候安装到/usr/local/arm/3.3.2里,要生成动态链接库,不要readline,不要sqlite的动态扩展。

然后编辑Makefile,把CFLAG和CXXFLAG中的-g去掉,我们不用debug sqlite。

接下来就可以编译和安装sqlite了:

 


make
make install

这一步就完成了sqlite的编译和安装了。

 

编译python

先去http://www.python.org/download/下载最新版本的python源代码,我这里下载的是:

 


http://www.python.org/ftp/python/2.5.1/Python-2.5.1.tar.bz2

先把python解压缩:

 


tar jxf Python-2.5.1.tar.bz2
cd Python-2.5.1

 

编译pc版本的语法解析器

由于在编译python的时候,需要先编译一个叫pgen的程序出来,用于生成语法解析器,所以我们要先生成一个pc版本的pgen:

 


mkdir build.pc
cd build.pc
../configure
make Parser/pgen

然后ls Parser一下,应该就能看到有pgen了。

 

修改configure

configure在检测编译器的printf是否支持%zd的时候,如果发现是在cross compile,就直接不干活了。这还了得?

把这一部分的检测代码去掉。这段代码起始于


echo "$as_me:$LINENO: checking for %zd printf() format support" >&5
echo $ECHO_N "checking for %zd printf() format support... $ECHO_C" >&6
if test "$cross_compiling" = yes; then

结束于


cat >>confdefs.h <<\_ACEOF
#define PY_FORMAT_SIZE_T "z"
_ACEOF

else
  echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5

( exit $ac_status )
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi

把这两段以及中间的内容都删除掉就可以了。

 

编译arm版本的python

有了语法解析器,就可以开始编译arm版本的python了。

 


mkdir ../build.arm
cd ../build.arm
../configure --prefix=/home/leojay/test/arm-system-working/rootfs --disable-ipv6 --host=arm-linux --enable-shared

先创建一个用于编译的目录build.arm,再对python做一些配置,如安装目录,不要ipv6,使用arm-linux的编译器,生成动态链接库。

 

修改Makefile

之后就要对Makefile做一些修改,把

 


OPT=            -DNDEBUG -g -O3 -Wall -Wstrict-prototypes

一行中,去掉-g,我们不要debug python,-O3改为-O2,空间紧张O2就可以了。

 


PGEN=           Parser/pgen$(EXE)

一行的下面加上

 


PGEN_HOST=      ../build.pc/Parser/pgen$(EXE)

表明我们在HOST上运行的pgen

在要使用PGEN的地方改为PGEN_HOST:

 


$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
                -$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)

改为:

 


$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
                -$(PGEN_HOST) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)

修改所有使用新生成的python的地方。

所有如 ./$(BUILDPYTHON) 的地方,都改为python

如:

 


platform: $(BUILDPYTHON)
        $(RUNSHARED) ./$(BUILDPYTHON) -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform

改为

 


platform: $(BUILDPYTHON)
        $(RUNSHARED)  python  -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform

这种地方比较多,大家小心修改。

 

修改setup.py

setup.py负责编译python的各个扩展模块。但是,由于python完全没有考虑cross compile,所以要做一些修改。

  • PyBuildExt类:

    1. build_extension函数:
      • 这个函数在编译了所有的extension后,会去 load这些刚编译好的extension, 但我们在i686的电脑上显然不能load,所以要跳过这些操作。 在 build_ext.build_extension(self, ext)后面直接写一个return,不做load。
    2. detect_modules函数:
      • 函数的前两行是把/usr/local加到搜索目录中,我们的cross compiler一般不会直接安装在 /usr/local里面的,所以这两行去掉:
        
        add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
                add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
        lib_dirs, inc_dirs的设定中,把中括号里的那些都去掉。 以下所有模块都不要:
        
        cmath, ctypes, _testcapi, pwd, grp, spwd, mmap, audioop, p_w_picpathop, rgbimg, readline,
        ssl, openssl, bdb, dbm, termios, nsl, ncurses, bz2, linuxaudiodev, ossaudiodev, tkinter
        由于python本身的问题,现在ctypes还不能在除i386以外的机器上运行,所以ctypes也去掉 编译sqlite的地方:
        
        for d in inc_dirs + sqlite_inc_paths:
        改为:
        
        for d in ['/usr/local/arm/3.3.2/include']:
        因为我的sqlite3安装在这里,如果这里不改的话,setup.py会在我的电脑上找sqlite
  • main函数:
    • setup函数调用的时候,把要安装的scripts那一部分去掉

之后就可以make && make install了。

附上我修改后的 Makefile 和 setup.py 供大家参考

 

裁减python

python完全安装后,实在是很大,所以,要把一些肯定用不上的库去掉。 所以,再附上我的裁减脚本 cleanpy.sh

注意,由于我的python程序都运行在python -OO的参数下,所有的.py和.pyc都不需要, 只要有.pyo就可以了。所以,这个脚本会把所有的.py和.pyc都删除掉。

大家可以根据自己的需要做调整。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

移植Python到ARM9(S3C244

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

移植Python到ARM9(S3C244

来源:http://hi.baidu.com/vaico/blog/item/2d39d0c497b54da18326ac7d.html我需要在Arm9的s3c2440 CPU上运行python,以下是我的编译过程。 host编译环境:ub
2023-01-31

移植Python到arm linux系统

编译环境:ubuntu-12.0.4编译器:gcc arm-arago-linux-gnueabiPython版本:3.6.2Python安装包文件名:Python-3.6.2.tgz 整个过程分为三大步骤:1. 直接编译python,生成
2023-01-31

awk脚本怎么移植到Python

本篇文章为大家展示了awk脚本怎么移植到Python,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。何时从 awk 转向 Python但是在某些方面,awk 的限制开始显现出来。它没有将文件分解为模块
2023-06-16

移植U-Boot.1.3.1到S3C24

原文链接:[url]http://blog.chinaunix.net/u1/34474/showart.php?id=487416[/url]首先,U-Boot1.3.1还没有支持s3c2440,移植仍是用2410的文件稍作修改而成的。2
2023-01-31

移植python2.7.3到arm li

1.本文链接地址http://blog.csdn.net/lz_obj/article/details/526202762.环境linux系统版本:Ubuntu 10.04交叉编译工具:arm-linux-gcc4.5.2嵌入式linux内
2023-01-31

使用2to3将代码移植到Python 3

概述#几乎所有的Python 2程序都需要一些修改才能正常地运行在Python 3的环境下。为了简化这个转换过程,Python 3自带了一个叫做2to3的实用脚本(Utility Script),这个脚本会将你的Python 2程序源文件作
2023-01-31

移植python到小米路由器记录。

最近抢了一个小米路由器,研究了一下,总的来说现在看起来功能还很少。现在比较有用的功能就是,远程下载功能,支持迅雷,电驴等,不过现在看电影啥的都是直接在线看的,基本上也很少用。检测连接的智能设备,这个功能可以随时查看是否有人曾网,当然也可以用
2023-01-31

Qt5代码怎么移植到Qt6

本篇内容主要讲解“Qt5代码怎么移植到Qt6”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Qt5代码怎么移植到Qt6”吧!尝试下Qt5的代码是否可以正常在Qt6上编译通过,使用的我网易云代码,这
2023-07-05

Qt5代码移植到Qt6的实现

本文主要介绍了Qt5代码移植到Qt6的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-28

将 AES 加密功能移植到 node.js

问题内容我正在尝试将一个 go 程序(https://github.com/mckael/samtv)移植到 node.js,该程序可以通过“smartview”api 控制三星电视程序中有一个“aes 加密”功能,我在移植到节点时遇到
将 AES 加密功能移植到 node.js
2024-02-12

移植DHCP服务器到Android平台RK3399板子中

前言 现需要将RK3399板子能够将自身WIFI接收到的网络数据通过Ethernet网口分发出去,使其扩展成为像路由器一样的功能,并且可以自动分配IP给Client,做到自由上网。自动分配IP地址,则就想到了DHCP服务器的功能,但Andr
2022-06-06

移植新内核到Linux系统上的操作步骤

1、在ubuntu官网下载ubuntu16.04的镜像和对应ubuntu16.04的内核版本源代码,或者在镜像源上找 2、安装ubuntu16.04到PC主机上 接下来执行以下: 编译新的linux内核给X86内核使用XvhpX出现以下错误
2022-06-04

[视频]微软展示如何轻松移植iOS/Android应用到Win10上

在本周三召开的Build开发者大会上,微软宣布androidwww.cppcns.com和IOS应用开发者能够非常轻松的将应用移植到Windows 10系统上。尽管此前已经有相关的谣传,但是当编程客栈微软正式宣布的时候依然让人难以相信。想必
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录