历史上的今天
今天是:2025年02月16日(星期日)
2020年02月16日 | 交叉编译Python-2.7.13到ARM(aarch32)—— 支持sqlite3
2020-02-16 来源:eefocus
环境
主机: ubuntu14.04 64bit
开发板: qemu + vexpress-a9 (参考: http://www.cnblogs.com/pengdonglin137/p/6442583.html)
工具链: arm-none-linux-gnueabi-gcc (gcc version 4.8.3 20140320)
Python版本: Python-2.7.13
前面一篇博文(交叉编译Python-2.7.13到ARM(aarch32)平台)介绍了移植python到aarch32上面,但是发现有很多模块都不能用,可以在板子上面执行下面的命令测试一下:
1 [root@vexpress ]# python /usr/lib/python2.7/test/test___all__.py
2 Traceback (most recent call last):
3 File "/usr/lib/python2.7/test/test___all__.py", line 3, in 4 import unittest 5 File "/usr/lib/python2.7/unittest/__init__.py", line 58, in 6 from .result import TestResult 7 File "/usr/lib/python2.7/unittest/result.py", line 9, in 8 from . import util 9 File "/usr/lib/python2.7/unittest/util.py", line 2, in 10 from collections import namedtuple, OrderedDict 11 File "/usr/lib/python2.7/collections.py", line 20, in 12 from _collections import deque, defaultdict 13 ImportError: No module named _collections 可以看到这里找不到_collections模块。 对比x86_64的编译结果: 1 ls x86_64/build/lib.linux-x86_64-2.7/ 2 array.so* _codecs_hk.so* cPickle.so* _curses_panel.so* future_builtins.so* itertools.so* mmap.so* parser.so* _socket.so* _sysconfigdata.py time.so* 3 audioop.so* _codecs_iso2022.so* crypt.so* _curses.so* grp.so* _json.so* _multibytecodec.so* pyexpat.so* spwd.so* _sysconfigdata.pyc unicodedata.so* 4 binascii.so* _codecs_jp.so* cStringIO.so* datetime.so* _hashlib.so* linuxaudiodev.so* _multiprocessing.so* _random.so* _sqlite3.so* _sysconfigdata.pyo zlib.so* 5 _bisect.so* _codecs_kr.so* _csv.so* _elementtree.so* _heapq.so* _locale.so* nis.so* readline.so* _ssl.so* syslog.so* 6 cmath.so* _codecs_tw.so* _ctypes.so* fcntl.so* _hotshot.so* _lsprof.so* operator.so* resource.so* strop.so* termios.so* 7 _codecs_cn.so* _collections.so* _ctypes_test.so* _functools.so* _io.so* math.so* ossaudiodev.so* select.so* _struct.so* _testcapi.so* 而aarch32的编译结果: 1 $ls aarch32/build/lib.linux2-arm-2.7/ 2 audioop.so* _codecs_iso2022.so* _codecs_tw.so* _ctypes.so* _elementtree.so* _json.so* mmap.so* nis.so* resource.so* termios.so* 3 _codecs_cn.so* _codecs_jp.so* crypt.so* _ctypes_test.so* future_builtins.so* linuxaudiodev.so* _multibytecodec.so* parser.so* _sysconfigdata.py _testcapi.so* 4 _codecs_hk.so* _codecs_kr.so* _csv.so* datetime.so* _hotshot.so* _lsprof.so* _multiprocessing.so* pyexpat.so* _sysconfigdata.pyc 可以看到,aarch32上面缺少了很多库, 比如_collections.so,将来这些库会被安装到/usr/lib/python2.7/lib-dynload下面, 所以下面要说的就是将缺少的这些库弄回来! 正文 1、通过分析setup.py发现问题 在函数build_extensions中刚开始self.extensions中存放的是需要编译库, 通过在加打印: 1 diff --git a/setup.py b/setup.py 2 index 54054c2..bc16bb1 100644 3 --- a/setup.py 4 +++ b/setup.py 5 @@ -178,6 +178,7 @@ class PyBuildExt(build_ext): 6 7 def build_extensions(self): 8 9 + print "build_extensions enter." 10 # Detect which modules should be compiled 11 missing = self.detect_modules() 12 13 @@ -191,6 +192,9 @@ class PyBuildExt(build_ext): 14 extensions.append(ctypes) 15 self.extensions = extensions 16 17 + for ext in self.extensions: 18 + print "extensions: ", ext.name 19 + 20 # Fix up the autodetected modules, prefixing all the source files 21 # with Modules/ and adding Python's include directory to the path. 22 (srcdir,) = sysconfig.get_config_vars('srcdir') 23 @@ -217,6 +221,8 @@ class PyBuildExt(build_ext): 24 # Python header files 25 headers = [sysconfig.get_config_h_filename()] 26 headers += glob(os.path.join(sysconfig.get_path('include'), "*.h")) 27 + 28 + print "builtin_module_names: ", sys.builtin_module_names 29 for ext in self.extensions[:]: 30 ext.sources = [ find_module_file(filename, moddirlist) 31 for filename in ext.sources ] 32 @@ -248,10 +254,15 @@ class PyBuildExt(build_ext): 33 remove_modules.append(line[0]) 34 input.close() 35 36 + print "remove_modules: ", remove_modules 37 + 38 for ext in self.extensions[:]: 39 if ext.name in remove_modules: 40 self.extensions.remove(ext) 41 42 + for ext in self.extensions[:]: 43 + print "extensions: ", ext.name 44 + 45 # When you run "make CC=altcc" or something similar, you really want 46 # those environment variables passed into the setup.py phase. Here's 47 # a small set of useful ones. 48 @@ -1618,13 +1629,13 @@ class PyBuildExt(build_ext): 49 50 51 # Platform-specific libraries 52 - if host_platform == 'linux2': 53 + if host_platform == 'linux2' or host_platform == 'linux2-arm': 54 # Linux-specific modules 55 exts.append( Extension('linuxaudiodev', ['linuxaudiodev.c']) ) 56 else: 57 missing.append('linuxaudiodev') 58 59 - if (host_platform in ('linux2', 'freebsd4', 'freebsd5', 'freebsd6', 60 + if (host_platform in ('linux2','linux2-arm' 'freebsd4', 'freebsd5', 'freebsd6', 61 'freebsd7', 'freebsd8') 62 or host_platform.startswith("gnukfreebsd")): 63 exts.append( Extension('ossaudiodev', ['ossaudiodev.c']) ) 64 @@ -1755,6 +1766,10 @@ class PyBuildExt(build_ext): 65 ## ext = Extension('xx', ['xxmodule.c']) 66 ## self.extensions.append(ext) 67 68 +# print "missing: ", missing 69 +# for ext in self.extensions: 70 +# print "extensions: ", ext.name 71 + 72 return missing 73 74 def detect_tkinter_explicitly(self): 75 @@ -2229,6 +2244,8 @@ Topic :: Software Development 76 """ 77 78 def main(): 79 + print "sys.path: ", sys.path 80 + print "cross_compiling: ", cross_compiling 81 # turn off warnings when deprecated modules are imported 82 import warnings 83 warnings.filterwarnings("ignore",category=DeprecationWarning) 然后执行./mk2_make.sh可以看到: 1 sys.path: ['/home/pengdonglin/src/qemu/python_cross_compile/Python-2.7.13', '/home/pengdonglin/src/qemu/python_cross_compile/aarch32/build/lib.linux2-arm-2.7', '/home/pengdonglin/src/qemu/python_cross_compile/Python-2.7.13/Lib', '/home/pengdonglin/src/qemu/python_cross_compile/Python-2.7.13/Lib/plat-linux2', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload']
史海拾趣
|
在校准后触摸屏可以正常工作。点击A点,显示上也是A点反应。但重启后点击A点,B点发生反应。针对这种触摸屏发生偏移的现象。我查看了一下四根数据线波形,与数据手册上的波形一致。在校准时我也查看了注册表,校准信息确实写入了注册表中,不知道问 ...… 查看全部问答> |
|
LM3S5B91进入中断之后,中端口持续低电平,这是怎么回事? LM3S5B91进入中断之后,中端口持续低电平,这是怎么回事?进入中段之后,有清除中断,但是,Io口依然保持低电平。 我做的是CH452的键盘扫描,中断方式,复位后,中端口为高电平,按下按键后,变为低电平,但是,在我松开手之后,应 ...… 查看全部问答> |
|
想参加成都达内的培训,不知道咋样,自己不是计算机专业的,但想往这方面发展,不知道达内咋样?自己主要想参加培训是因为现在没找到好的工作,自己虽然是学电子的,单现在的工作简直跟他风马牛不相及,而且工资很低,自己一点都不喜欢,自己虽然不 ...… 查看全部问答> |
|
求大神指导!终端请求和协调器绑定后,协调器能用0xFFFE作为目的地址发数据给终端吗? 我想把TI给的传感器实验和灯控制实验结合在一起,终端上有温度传感器和小灯,协调器上有按键作为开关,终端请求绑定成功后,周期性给协调器发送温度数据再通过串口显示在串口助手上,现在我想通过串口助手发个命令给协调器,协调器再发命令给终端实 ...… 查看全部问答> |
|
EEWORLD大学堂----STM32 永磁同步电机(PMSM) FOC软件开发培训 STM32 永磁同步电机(PMSM) FOC软件开发培训:https://training.eeworld.com.cn/course/607内容包括:STM32产品技术介绍、马达控制套件、直流无刷马达介绍、FOC基础、磁链及力矩控制器、电流读取,转子的速度/位置反馈、Hall传感器、正交编码器、无 ...… 查看全部问答> |




