交叉编译Python-2.7.13到ARM(aarch32)平台

发布者:人妙果华最新更新时间:2020-02-09 来源: eefocus关键字:交叉编译  Python-2  7  ARM  aarch32 手机看文章 扫描二维码
随时随地手机看文章

环境

主机: 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


回到顶部(go to top)

参考

http://www.41443.com/HTML/Python/20151105/414154.html


http://www.cnblogs.com/tolimit/p/4519838.html?utm_source=tuicool&utm_medium=referral


回到顶部(go to top)

正文

1、下载解压python源码

到https://www.python.org/downloads/下载最新的python2系列的软件,这里我用的是Python-2.7.13


1 #解压

2 tar -xf Python-2.7.13.tar.xz

4 #创建python2_7_13_for_x86_64

5 mkdir python2_7_13_for_x86_64

7 #创建python2_7_13_for_arm

8 mkdir python2_7_13_for_arm


2、编译x86_64版本的python软件

我把编译过程写成了脚本, 进入python2_7_13_for_x86_64/目录,然后执行如下脚本:


配置 mk1_conf.sh


1 #!/bin/bash

3 ../Python-2.7.13/configure --prefix=`pwd`

编译mk2_make.sh


1 #!/bin/bash

3 make -j4

安装 mk3_install.sh


1 #!/bin/bash

3 make install

3、交叉编译

交叉编译的第一步是为python源码打上交叉编译用的patch:Python-2.7.13-compile.patch.tar.gz


1 cd Python-2.7.13/

2 patch -p1 < ../python2_7_13_for_arm/Python-2.7.13-xcompile.patch

我也把编译过程放到脚本,也分为三个:


配置 mk1_conf.sh


1 #!/bin/bash

2 export PATH=/home/pengdonglin/src/qemu/aarch32/arm-2014.05/bin:$PATH

3 ../Python-2.7.13/configure --prefix=`pwd`

4     --host=arm-none-linux-gnueabi

5     --build=x86_64-linux-gnu

6     --enable-ipv6

7     --enable-shared

8     ac_cv_file__dev_ptmx="yes"

9     ac_cv_file__dev_ptc="no"


编译 mk2_make.sh


 1 #!/bin/bash

 2 export PATH=/home/pengdonglin/src/qemu/aarch32/arm-2014.05/bin:$PATH

 3 make HOSTPYTHON=../python2_7_13_for_x86_64/python

 4     HOSTPGEN=../python2_7_13_for_x86_64/Parser/pgen

 5     BLDSHARED="arm-none-linux-gnueabi-gcc -shared"

 6     CROSS_COMPILE=arm-none-linux-gnueabi-

 7     CROSS_COMPILE_TARGET=yes

 8     HOSTARCH=arm-none-linux-gnueabi

 9     BUILDARCH=x86_64-linux-gnu

10     -j4


安装 mk3_install.sh


1 #!/bin/bash

2 export PATH=/home/pengdonglin/src/qemu/aarch32/arm-2014.05/bin:$PATH

3 make install HOSTPYTHON=../python2_7_13_for_x86_64/python

4     BLDSHARED="arm-none-linux-gnueabi-gcc -shared"

5     CROSS_COMPILE=arm-none-linux-gnueabi-

6     CROSS_COMPILE_TARGET=yes

7     prefix=`pwd`

4、重新制作ramdisk镜像

参考博文:用Qemu搭建aarch32学习环境


修改mk_ramdisk.sh如下:


 1 #!/bin/bash

 2 sudo rm -rf rootfs

 3 sudo rm -rf tmpfs

 4 sudo rm -rf ramdisk*

 5 sudo mkdir rootfs

 6 sudo cp ../busybox-1.24.2/_install/*  rootfs/ -raf

 7 sudo mkdir -p rootfs/proc/

 8 sudo mkdir -p rootfs/sys/

 9 sudo mkdir -p rootfs/tmp/

10 sudo mkdir -p rootfs/root/

11 sudo mkdir -p rootfs/var/

12 sudo mkdir -p rootfs/mnt/

13 sudo cp etc rootfs/ -arf

14 sudo cp -arf ../arm-2014.05/arm-none-linux-gnueabi/libc/lib rootfs/

15 sudo rm -rf rootfs/lib/*.a

16 sudo /home/pengdonglin/src/qemu/aarch32/arm-2014.05/bin/arm-none-linux-gnueabi-strip rootfs/lib/*

17 # 拷贝python相关的文件到根文件系统中

18 sudo mkdir -p rootfs/usr

19 pushd rootfs/usr

20 sudo cp  -raf /home/pengdonglin/src/qemu/python_cross_compile/python2_7_13_for_arm/lib .

21 sudo cp  -raf /home/pengdonglin/src/qemu/python_cross_compile/python2_7_13_for_arm/include .

22 sudo cp  -raf /home/pengdonglin/src/qemu/python_cross_compile/python2_7_13_for_arm/bin .

23 sudo cp  -raf /home/pengdonglin/src/qemu/python_cross_compile/python2_7_13_for_arm/share .

24 sudo /home/pengdonglin/src/qemu/aarch32/arm-2014.05/bin/arm-none-linux-gnueabi-strip lib/python*

25 popd

26 sudo mkdir -p rootfs/dev/

27 sudo mknod rootfs/dev/tty1 c 4 1

28 sudo mknod rootfs/dev/tty2 c 4 2

29 sudo mknod rootfs/dev/tty3 c 4 3

30 sudo mknod rootfs/dev/tty4 c 4 4

31 sudo mknod rootfs/dev/console c 5 1

32 sudo mknod rootfs/dev/null c 1 3

33 sudo mkdir -p rootfs/lib/modules/4.10.0+

34 sudo mkdir -p rootfs/tools

35 sudo cp ./other_tools/* rootfs/tools

36 # 将ramdisk的大小扩展为100MB

37 sudo dd if=/dev/zero of=ramdisk bs=1M count=100

38 sudo mkfs.ext4 -F ramdisk

39 sudo mkdir -p tmpfs

40 sudo mount -t ext4 ramdisk ./tmpfs/  -o loop

41 sudo cp -raf rootfs/*  tmpfs/

42 sudo umount tmpfs

43 sudo gzip --best -c ramdisk > ramdisk.gz

44 sudo mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img


这里需要注意:


1、将刚才交叉编译python所得的文件拷贝到rootfs/usr下面: bin、lib、include和share


2、由于Python的lib目录占用了很大空间,有70MB左右,所以这里我们把ramdisk的大小设置为100MB


3、此外,qemu-system-arm运行的,可以给-m设置较大的物理内存,这里我设置的是1GB


5、修改kernel配置

修改ramdisk的大小设置, 这里我设置的是100MB:


1 Device Drivers  ---> 

3         [*] Block devices  --->

5                 (102400) Default RAM disk size (kbytes) 

6、测试

制作好ramdisk以及编译出新的kernel后,运行系统:


 1 sudo qemu-system-arm

 2     -M vexpress-a9

 3     -m 1024M

 4     -smp 2

 5     -kernel ./linux-4.10/out_aarch32/arch/arm/boot/zImage

 6     -nographic

 7     -append "root=/dev/ram0 rw rootfstype=ext4 console=ttyAMA0 init=/linuxrc ignore_loglevel"

 8     -initrd ./rootfs/ramdisk.img

 9     -net nic,vlan=0 -net tap,vlan=0,ifname=tap0

10     -dtb ./linux-4.10/out_aarch32/arch/arm/boot/dts/vexpress-v2p-ca9.dtb


下面是启动log:


  1 $./run.sh 

  2 sudo tunctl -u root -t tap0

  3 TUNSETIFF: Device or resource busy

  4 sudo ifconfig tap0 0.0.0.0 promisc up

  5 sudo brctl addif br0 tap0

  6 brctl show

  7 bridge name    bridge id        STP enabled    interfaces

  8 br0        8000.480fcf3ace87    no        eth0

  9                             tap0

 10 docker0        8000.02423772cc85    no        

 11 [    0.000000] Booting Linux on physical CPU 0x0

 12 [    0.000000] Linux version 4.10.0+ (pengdonglin@pengdonglin-HP) (gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29) ) #10 SMP Mon Mar 20 11:31:00 CST 2017

 13 [    0.000000] CPU: ARMv7 Processor [410fc090] revision 0 (ARMv7), cr=10c5387d

 14 [    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT nonaliasing instruction cache

 15 [    0.000000] OF: fdt:Machine model: V2P-CA9

 16 [    0.000000] debug: ignoring loglevel setting.

 17 [    0.000000] Memory policy: Data cache writealloc

 18 [    0.000000] On node 0 totalpages: 262144

 19 [    0.000000] free_area_init_node: node 0, pgdat c0a637c0, node_mem_map ef7fa000

 20 [    0.000000]   Normal zone: 1536 pages used for memmap

 21 [    0.000000]   Normal zone: 0 pages reserved

 22 [    0.000000]   Normal zone: 196608 pages, LIFO batch:31

 23 [    0.000000]   HighMem zone: 65536 pages, LIFO batch:15

 24 [    0.000000] percpu: Embedded 14 pages/cpu @ef7b5000 s27648 r8192 d21504 u57344

 25 [    0.000000] pcpu-alloc: s27648 r8192 d21504 u57344 alloc=14*4096

 26 [    0.000000] pcpu-alloc: [0] 0 [0] 1 [0] 2 [0] 3 

 27 [    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 260608

 28 [    0.000000] Kernel command line: root=/dev/ram0 rw rootfstype=ext4 console=ttyAMA0 init=/linuxrc ignore_loglevel

 29 [    0.000000] log_buf_len individual max cpu contribution: 4096 bytes

 30 [    0.000000] log_buf_len total cpu_extra contributions: 12288 bytes

 31 [    0.000000] log_buf_len min size: 16384 bytes

 32 [    0.000000] log_buf_len: 32768 bytes

 33 [    0.000000] early log buf free: 14860(90%)

 34 [    0.000000] PID hash table entries: 4096 (order: 2, 16384 bytes)

 35 [    0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)

 36 [    0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)

 37 [    0.000000] Memory: 1007212K/1048576K available (6144K kernel code, 453K rwdata, 1440K rodata, 1024K init, 191K bss, 41364K reserved, 0K cma-reserved, 262144K highmem)

 38 [    0.000000] Virtual kernel memory layout:

 39 [    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)

 40 [    0.000000]     fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)

 41 [    0.000000]     vmalloc : 0xf0800000 - 0xff800000   ( 240 MB)

 42 [    0.000000]     lowmem  : 0xc0000000 - 0xf0000000   ( 768 MB)

 43 [    0.000000]     pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)

 44 [    0.000000]     modules : 0xbf000000 - 0xbfe00000   (  14 MB)

 45 [    0.000000]       .text : 0xc0008000 - 0xc0700000   (7136 kB)

 46 [    0.000000]       .init : 0xc0900000 - 0xc0a00000   (1024 kB)

 47 [    0.000000]       .data : 0xc0a00000 - 0xc0a71784   ( 454 kB)

 48 [    0.000000]        .bss : 0xc0a73000 - 0xc0aa2c4c   ( 192 kB)

 49 [    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1

 50 [    0.000000] Hierarchical RCU implementation.

 51 [    0.000000]     Build-time adjustment of leaf fanout to 32.

[1] [2] [3]
关键字:交叉编译  Python-2  7  ARM  aarch32 引用地址:交叉编译Python-2.7.13到ARM(aarch32)平台

上一篇:valgrind arm-linux 交叉编译
下一篇:在TQ2440上运行perf,生成Flame Graph

推荐阅读最新更新时间:2024-11-07 14:47

安森美半导体推出先进的1300万像素CMOS图像传感器
推动高能效创新的安森美半导体进一步扩展成像方案产品阵容,推出最新的高性能CMOS数字图像传感器。AR1337是1/3.2英寸格式背照式器件,针对消费电子产品如智能手机和平板电脑。AR1337结合高性能的SuperPD 相位检测自动对焦(PDAF)像素技术,提供微光下300 ms或更少时间的对焦速度,即使微光低于25勒克斯(lux)。此外,AR1337通过采用其片上PDAF处理,大大简化集成到智能手机平台和提高相机模块集成商生产能力,较市场上其它方案简化校准。 AR1337图像传感器提供有源像素阵列,按4208 x 3120像素排列。AR1337建基于公司专利的先进的1.1 m像素技术的成功,能提供鲜艳逼真的图像质量,具备
[传感器]
安森美半导体推出先进的<font color='red'>13</font>00万像素CMOS图像传感器
LG在韩国申请LG Q7商标 或与G7同时发布
   LG G7将是LG在今年推出的新款旗舰手机,而与此同时,最新迹象还表明LG可能还会发布一款LG Q7。   在2月份的MWC2018展会上,LG虽然没有宣布新旗舰,但是秘密展示了LG G7的原型机,另外还有消息称LG展示了Q7和V35两款机型。虽然G7的确是被拍到了,但后面两款手机是否存在还需打个问号。   现据外媒发现,LG已经在韩国申请了LG Q7的商标,并声明其用途是智能手机。这并不让人意外,因为在去年LG就宣布了Q系列两款新机Q6和Q8,两者在配置上有所不同。而从命名上来看的话,LG Q7应该是一款中端机型,但遗憾的是,目前关于该机型的消息实在是太少了,预计临近G7发布的时候会有更多的爆料出现吧。
[手机便携]
华为上半年营收1138亿元 同比增11%超预期
7月24日消息,华为发布2013年上半年度经营业绩报告显示,今年上半年,华为实现销售收入1138亿元,同比增长10.8%。   在2013华为第10届全球分析师大会上,华为特别强调的未来发展目标未来5年,销售收入复合增长率将保持10%左右。而上半年的业绩表现,超出了预期。   对于增长的分析,华为CFO孟晚舟表示,“华为2013年上半年收入和盈利能力实现了预期,主要得益于运营商网络持续稳定增长,企业业务拓展有力,智能手机快速增长,以及公司运营效率的持续提升。有信心实现2013年集团整体收入增长10%的目标。”
[网络通信]
采用LM3S1138的电能收集充电器的设计
本文针对锂离子可充电池的充放电特性及实际使用中的需求,利用新型的嵌入式芯片 LM3S1138为主控制器,在锂离子电池充电的过程中,进行智能控制,严格控制充电电流、电压、温度等物理参数,从而实现数字化、智能化、节能化的特点。 1 电能收集充电器硬件设计 电能收集充电器的硬件设计,主要包括直流电源、电源变换器、EasyARM1138、PWM发生器、采样电路、可充电池等部分的设计与整合,形成一个循环系统。其电路模块如图1所示。 1.1 EasyARM1138嵌入式微处理器 EasyARM1138嵌入式微处理器采用了Luminary Micro公司Stellaris系列基于Cortex-M3内核的LM3S1138芯片,该芯片包含一个低
[单片机]
采用LM3S1<font color='red'>13</font>8的电能收集充电器的设计
ARM7种工作模式、37个通用寄存器、CPSR程序状态寄存器
一、ARM 采用的是32位架构 1、ARM约定 Byte:8 bits Halfword:16 bits (2 byte) Word:32 bits (4 byte) 2、大部分ARM core 提供 ARM 指令集(32-bit) 每条指令都是4个字节? Thumb 指令集(16-bit ) Thumb2指令集(16 & 32bit) 二、ARM的7种基本工作模式 普通模式(Normal) (1)User:非特权模式,大部分任务执行在这种模式 特权模式(Privilege) (2)FIQ:当一个高优先级(fast) 中断产生时将会进入这种模式 (3)IRQ:当一个低优先级
[单片机]
<font color='red'>ARM</font>的<font color='red'>7</font>种工作模式、37个通用寄存器、CPSR程序状态寄存器
工信部:去年机器人行业营收超1300亿,下一步工作要紧抓这四个方面
9月6日,工信部举行“新时代工业和信息化发展”系列新闻发布会第五场,主题为“大力发展高端装备制造业”,介绍了十八大以来我国推动高端装备制造业创新发展取得的成就。 工信部装备工业一司副司长郭守刚发布会上表示,党的十八大以来,我国 机器人 产业蓬勃发展,极大改变着人民的生产和生活方式,为经济社会发展注入强劲动能。 一是产业规模快速增长。2021年机器人全行业营业收入超过1300亿元, 工业机器人 产量达36.6万台,比2015年增长了10倍,稳居全球第一大工业机器人市场。 二是技术水平大幅提升。精密减速器、智能控制器、实时操作系统等核心部件研发取得重大进展,太空机器人、深海机器人、手术机器人等高复杂度产品实现重要突破,行业内101家
[机器人]
64位ARM处理器架构发展受挫 前途未卜
自从采用安谋(ARM)64位元处理器架构厂商Calexda传出停止营运消息后,让该架构在服务器市场发展增添阴影。不过,分析师认为,目前多家半导体厂商仍继续采用ARM架构,代表未来仍可望与英特尔(Intel)的x86架构在服务器市场上继续缠斗。 据Electronics Engineering Herald网站报导,ARM 64位元厂Calexda离开后,目前仍有许多知名半导体供应商开始采用该架构设计服务器芯片。 例如采用应微(Applied Micro) X-Gene服务器芯片的ARM 64位元处理器核心Linux企业服务器到处可见,而且除Red Hat与Ubuntu,SUSE也是支援该架构服务器处理器厂商之一。
[单片机]
国产7nm自驾芯片,成功点亮!
芯擎科技近日宣布,全场景高阶自动驾驶芯片“星辰一号”成功点亮,并快速超额实现全部性能设计目标。该芯片将在 2025 年实现量产,2026 年大规模上车应用。 “星辰一号”全面对标目前国际最先进的智驾产品,并在CPU性能、AI算力、ISP处理能力,以及NPU本地存储容量等关键指标上全面超越了国际先进主流产品。 该芯片采用7nm车规工艺,符合AEC-Q100标准,多核异构架构让智能驾驶算力更加强劲。CPU算力达250 KDMIPS,NPU算力高达512 TOPS,通过多芯片协同可实现最高2048 TOPS算力。在硬件配置上,“星辰一号”集成高性能VACC与ISP,内置ASIL-D功能安全岛,拥有丰富接口,可全面满足L2至
[汽车电子]
国产<font color='red'>7</font>nm自驾芯片,成功点亮!
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved