環境
主機: 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']
上一篇:Exynos4412的外部中斷是如何安排的?
下一篇:交叉編譯Python-2.7.13到ARM(aarch64)平臺
推薦閱讀
史海拾趣
為了更好地服務全球客戶,Cypress積極實施海外擴張和本土化戰略。公司在菲律賓、印尼等地設立了組裝和檢測工廠,同時在美國、歐洲和亞洲等多個國家和地區設立了設計中心。這種本土化戰略使Cypress能夠更好地了解當地市場需求,提供定制化的產品和解決方案。
為了進一步提升競爭力,Bestar Electric開始整合產業鏈資源。公司通過與供應商建立長期合作關系,確保原材料的穩定供應;同時,公司還涉足電子產品的組裝和制造領域,實現了產業鏈的垂直整合。此外,公司還積極探索多元化發展路徑,涉足相關領域,如智能家居、物聯網等,以拓展新的增長點。
隨著技術實力的提升和產品線的豐富,Bestar Electric開始積極拓展市場。公司通過參加國際電子展、建立銷售團隊和合作伙伴網絡等方式,將產品推向全球市場。同時,公司注重品牌建設,通過廣告宣傳和客戶服務提升品牌知名度和美譽度。
億寶科技在成立初期,就明確了以技術創新為核心的發展戰略。公司創始人帶領研發團隊,深入研究市場需求,不斷推出具有競爭力的電子產品。在一次偶然的機會中,他們成功研發出一款具有高性能、低功耗特點的芯片,這一創新技術迅速獲得了市場的認可。此后,億寶科技不斷加大研發投入,形成了一套完整的自主研發體系,為公司后續的發展奠定了堅實的基礎。
FCT Electronics的創立可以追溯到二十年前,當時電子行業正處于飛速發展的階段。幾位富有遠見和創業精神的工程師看到了電子測試設備市場的巨大潛力,于是聯手創立了FCT Electronics。公司最初的產品是一款簡易的電路板測試儀,因其精準度高、操作簡便而迅速在市場上占有一席之地。隨著業務的不斷拓展,FCT Electronics逐漸成為電子行業測試設備領域的佼佼者。
面對電源管理芯片市場需求的不斷增長,東科半導體(DK)公司決定投資擴產。公司投資數億元建設新的生產線和研發基地,提升產能和研發能力。同時,公司還加大了對新技術、新產品的研發投入,不斷推出具有競爭力的新產品。通過投資擴產和加大研發投入,東科半導體(DK)公司進一步鞏固了其在電源管理芯片市場的領先地位。
以上五個故事從不同角度展現了東科半導體(DK)公司在電子行業中的發展歷程和成就。這些故事不僅記錄了公司的成長軌跡,也反映了公司在技術創新、產學研合作、市場拓展和品牌建設等方面的努力和成果。
這個題目很大,給人一種感覺我好像很成功,其實不然。實際上自己水平不高,甚至很低,但是做過了一些曲折的學習道路,同時把自己真實的學習歷程表達出來,希望對后來者有借鑒的意義,甚幸! 工作三年、幾成廢人! 我2000年畢業 ...… 查看全部問答∨ |
|
要求提供的動態鏈接庫、源代碼可以在evc上執行, 就是說它可以支持arm的嵌入式系統,arm的操作系統wince。 價錢、型號,最好有網站介紹。 … 查看全部問答∨ |
|
我們使用PXA270平臺,wince 5.0操作系統??蛻籼峁┝艘黄瑔紊獿CD,4bit輸入,每1個bit代表1個點,每個點都有ON/OFF兩種狀態。分辨率640*480。LCD中內置了一顆Max5484來控制灰度??蛻粢笪覀冏龅?bpp,16級灰度。 但是Max5484這個芯片只能調整整 ...… 查看全部問答∨ |
|
Verilog 里的參數 是不是不能綜合到硬件電路上而只能仿真中用??? Verilog 里的參數 是不是不能綜合到硬件電路上而只能仿真中用啊比如圖中的 parameter clkdivider = 25000000/440/2;在下載到芯片里后 就有個寄存器里存了 clkdivider = 25000000/440/2這個值?求高手指導 [ 本帖最后由 wzyuliyang 于 2 ...… 查看全部問答∨ |