交叉编译Python-2.7.13到ARM(aarch64)平台
方法跟交叉编译Python-2.7.13到ARM(aarch32)平台基本一样, 不同的地方只是把工具链换成编译aarch64的工具链,这里可以参考用qemu搭建aarch64学习环境.
创建目录:
mkdir python2_7_13_for_aarch64
下面是配置、编译和安装的脚本:
1、配置: mk1_conf.sh
1 #!/bin/bash
2
3 export PATH=/home/pengdonglin/src/qemu/aarch64/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin:$PATH
4
5 ../Python-2.7.13/configure --prefix=`pwd` \
6 --host=aarch64-linux-gnu \
7 --build=x86_64-linux-gnu \
8 --enable-ipv6 \
9 --enable-shared \
10 ac_cv_file__dev_ptmx="yes" \
11 ac_cv_file__dev_ptc="no"
2、编译: mk2_make.sh
1 #!/bin/bash
2
3 export PATH=/home/pengdonglin/src/qemu/aarch64/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin:$PATH
4
5 make HOSTPYTHON=../python2_7_13_for_x86_64/python \
6 HOSTPGEN=../python2_7_13_for_x86_64/Parser/pgen \
7 BLDSHARED="aarch64-linux-gnu-gcc -shared" \
8 CROSS_COMPILE=aarch64-linux-gnu- \
9 CROSS_COMPILE_TARGET=yes \
10 HOSTARCH=aarch64-linux-gnu \
11 BUILDARCH=x86_64-linux-gnu \
12 -j4
3、安装: mk3_install.sh
1 #!/bin/bash
2
3 export PATH=/home/pengdonglin/src/qemu/aarch64/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin:$PATH
4
5 make install HOSTPYTHON=../python2_7_13_for_x86_64/python \
6 BLDSHARED="aarch64-linux-gnu-gcc -shared" \
7 CROSS_COMPILE=arm-none-linux-gnueabi- \
8 CROSS_COMPILE_TARGET=yes \
9 prefix=`pwd`
此外别忘了修改制作ramdisk的脚本以及修改内核配置。
运行Qemu:
1 sudo qemu-system-aarch64 \
2 -M virt \
3 -cpu cortex-a53 \
4 -smp 2 \
5 -m 4096M \
6 -kernel ./linux-4.10/out_aarch64/arch/arm64/boot/Image \
7 -nographic \
8 -append "root=/dev/ram0 rw rootfstype=ext4 console=ttyAMA0 init=/linuxrc ignore_loglevel" \
9 -initrd ./rootfs/ramdisk.img \
10 -net nic,vlan=0 -net tap,vlan=0,ifname=tap0 \
11 -fsdev local,security_model=passthrough,id=fsdev0,path=/nfsroot \
12 -device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=hostshare
启动log:
1 $./run_all.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.36de5b2e5a93 no eth0
9 tap0
10 docker0 8000.024280392ab1 no
11 [ 0.000000] Booting Linux on physical CPU 0x0
12 [ 0.000000] Linux version 4.10.0+ (pengdonglin@pengdonglin-HP) (gcc version 4.9.1 20140529 (prerelease) (crosstool-NG linaro-1.13.1-4.9-2014.07 - Linaro GCC 4.9-2014.06) ) #6 SMP PREEMPT Mon Mar 20 13:59:55 CST 2017
13 [ 0.000000] Boot CPU: AArch64 Processor [410fd034]
14 [ 0.000000] debug: ignoring loglevel setting.
15 [ 0.000000] efi: Getting EFI parameters from FDT:
16 [ 0.000000] efi: UEFI not found.
17 [ 0.000000] cma: Reserved 16 MiB at 0x00000000ff000000
18 [ 0.000000] NUMA: No NUMA configuration found
19 [ 0.000000] NUMA: Faking a node at [mem 0x0000000000000000-0x000000013fffffff]
20 [ 0.000000] NUMA: Adding memblock [0x40000000 - 0x13fffffff] on node 0
21 [ 0.000000] NUMA: Initmem setup node 0 [mem 0x40000000-0x13fffffff]
22 [ 0.000000] NUMA: NODE_DATA [mem 0x13ffea600-0x13ffec57f]
23 [ 0.000000] Zone ranges:
24 [ 0.000000] DMA [mem 0x0000000040000000-0x00000000ffffffff]
25 [ 0.000000] Normal [mem 0x0000000100000000-0x000000013fffffff]
26 [ 0.000000] Movable zone start for each node
27 [ 0.000000] Early memory node ranges
28 [ 0.000000] node 0: [mem 0x0000000040000000-0x000000013fffffff]
29 [ 0.000000] Initmem setup node 0 [mem 0x0000000040000000-0x000000013fffffff]
30 [ 0.000000] On node 0 totalpages: 1048576
31 [ 0.000000] DMA zone: 12288 pages used for memmap
32 [ 0.000000] DMA zone: 0 pages reserved
33 [ 0.000000] DMA zone: 786432 pages, LIFO batch:31
34 [ 0.000000] Normal zone: 4096 pages used for memmap
35 [ 0.000000] Normal zone: 262144 pages, LIFO batch:31
36 [ 0.000000] psci: probing for conduit method from DT.
37 [ 0.000000] psci: PSCIv0.2 detected in firmware.
38 [ 0.000000] psci: Using standard PSCI v0.2 function IDs
39 [ 0.000000] psci: Trusted OS migration not required
40 [ 0.000000] percpu: Embedded 21 pages/cpu @ffff8000fffbd000 s48128 r8192 d29696 u86016
41 [ 0.000000] pcpu-alloc: s48128 r8192 d29696 u86016 alloc=21*4096
42 [ 0.000000] pcpu-alloc: [0] 0 [0] 1
43 [ 0.000000] Detected VIPT I-cache on CPU0
44 [ 0.000000] CPU features: enabling workaround for ARM erratum 845719
45 [ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 1032192
46 [ 0.000000] Policy zone: Normal
47 [ 0.000000] Kernel command line: root=/dev/ram0 rw rootfstype=ext4 console=ttyAMA0 init=/linuxrc ignore_loglevel
48 [ 0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
49 [ 0.000000] software IO TLB [mem 0xfafff000-0xfefff000] (64MB) mapped at [ffff8000bafff000-ffff8000beffefff]
50 [ 0.000000] Memory: 4008696K/4194304K available (8572K kernel code, 946K rwdata, 3864K rodata, 1024K init, 398K bss, 169224K reserved, 16384K cma-reserved)
51 [ 0.000000] Virtual kernel memory layout:
52 [ 0.000000] modules : 0xffff000000000000 - 0xffff000008000000 ( 128 MB)
53 [ 0.000000] vmalloc : 0xffff000008000000 - 0xffff7dffbfff0000 (129022 GB)
54 [ 0.000000] .text : 0xffff000008080000 - 0xffff0000088e0000 ( 8576 KB)
55 [ 0.000000] .rodata : 0xffff0000088e0000 - 0xffff000008cb0000 ( 3904 KB)
56 [ 0.000000] .init : 0xffff000008cb0000 - 0xffff000008db0000 ( 1024 KB)
57 [ 0.000000] .data : 0xffff000008db0000 - 0xffff000008e9ca00 ( 947 KB)
58 [ 0.000000] .bss : 0xffff000008e9ca00 - 0xffff000008f003d0 ( 399 KB)
59 [ 0.000000] fixed : 0xffff7dfffe7fd000 - 0xffff7dfffec00000 ( 4108 KB)
60 [ 0.000000] PCI I/O : 0xffff7dfffee00000 - 0xffff7dffffe00000 ( 16 MB)
61 [ 0.000000] vmemmap : 0xffff7e0000000000 - 0xffff800000000000 ( 2048 GB maximum)
62 [ 0.000000] 0xffff7e0000000000 - 0xffff7e0004000000 ( 64 MB actual)
63 [ 0.000000] memory : 0xffff800000000000 - 0xffff800100000000 ( 4096 MB)
64 [ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1
65 [ 0.000000] Preemptible hierarchical RCU implementation.
66 [ 0.000000] Build-time adjustment of leaf fanout to 64.
67 [ 0.000000] RCU restricting CPUs from NR_CPUS=64 to nr_cpu_ids=2.
68 [ 0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=64, nr_cpu_ids=2
69 [ 0.000000] NR_IRQS:64 nr_irqs:64 0
70 [ 0.000000] GICv2m: range[mem 0x08020000-0x08020fff], SPI[80:143]
71 [ 0.000000] arm_arch_timer: WARNING: Invalid trigger for IRQ3, assuming level low
72 [ 0.000000] arm_arch_timer: WARNING: Please fix your firmware
73 [ 0.000000] arm_arch_timer: Architected cp15 timer(s) running at 62.50MHz (virt).
74 [ 0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x1cd42e208c, max_idle_ns: 881590405314 ns
75 [ 0.000102] sched_clock: 56 bits at 62MHz, resolution 16ns, wraps every 4398046511096ns
76 [ 0.002442] Console: colour dummy device 80x25
77 [ 0.005189] Calibrating delay loop (skipped), value calculated using timer frequency.. 125.00 BogoMIPS (lpj=250000)
78 [ 0.005287] pid_max: default: 32768 minimum: 301
79 [ 0.006012] Security Framework initialized
80 [ 0.008915] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes)
81 [ 0.013062] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes)
82 [ 0.014733] Mount-cache hash table entries: 8192 (order: 4, 65536 bytes)
83 [ 0.014797] Mountpoint-cache hash table entries: 8192 (order: 4, 65536 bytes)
84 [ 0.042484] ASID allocator initialised with 65536 entries
85 [ 0.065159] EFI services will not be available.
86 [ 0.079440] smp: Bringing up secondary CPUs ...
87 [ 0.114887] Detected VIPT I-cache on CPU1
88 [ 0.116592] CPU1: Booted secondary processor [410fd034]
89 [ 0.124003] smp: Brought up 1 node, 2 CPUs
90 [ 0.124142] SMP: Total of 2 processors activated.
91 [ 0.124377] CPU features: detected feature: 32-bit EL0 Support
92 [ 0.128079] CPU: All CPU(s) started at EL1
93 [ 0.129967] alternatives: patching kernel code
94 [ 0.158339] devtmpfs: initialized
95 [ 0.168735] DMI not present or invalid.
96 [ 0.169788] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
97 [ 0.169924] futex hash table entries: 512 (order: 4, 65536 bytes)
98 [ 0.172991] pinctrl core: initialized pinctrl subsystem
99 [ 0.189367] NET: Registered protocol family 16
100 [ 0.219905] cpuidle: using governor menu
101 [ 0.221064] vdso: 2 pages (1 code @ ffff0000088e7000, 1 data @ ffff000008db5000)
102 [ 0.221247] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
103 [ 0.225392] DMA: preallocated 256 KiB pool for atomic allocations
104 [ 0.226642] Serial: AMBA PL011 UART driver
105 [ 0.264136] 9000000.pl011: ttyAMA0 at MMIO 0x9000000 (irq = 39, base_baud = 0) is a PL011 rev1
106 [ 0.275026] console [ttyAMA0] enabled
107 [ 0.279829] irq: type mismatch, failed to map hwirq-27 for /intc!
108 [ 0.374165] HugeTLB registered 2 MB page size, pre-allocated 0 pages
109 [ 0.388778] ACPI: Interpreter disabled.
110 [ 0.392241] vgaarb: loaded
111 [ 0.393255] SCSI subsystem initialized
112 [ 0.396197] libata version 3.00 loaded.
113 [ 0.397290] usbcore: registered new interface driver usbfs
114 [ 0.397613] usbcore: registered new interface driver hub
115 [ 0.399000] usbcore: registered new device driver usb
116 [ 0.400821] pps_core: LinuxPPS API ver. 1 registered
117 [ 0.400936] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
118 [ 0.401138] PTP clock support registered
119 [ 0.401718] dmi: Firmware registration failed.
120 [ 0.403488] Advanced Linux Sound Architecture Driver Initialized.
121 [ 0.417340] clocksource: Switched to clocksource arch_sys_counter
122 [ 0.418126] VFS: Disk quotas dquot_6.6.0
123 [ 0.418355] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
124 [ 0.419846] pnp: PnP ACPI: disabled
125 [ 0.463782] NET: Registered protocol family 2
126 [ 0.469532] TCP established hash table entries: 32768 (order: 6, 262144 bytes)
127 [ 0.470282] TCP bind hash table entries: 32768 (order: 7, 524288 bytes)
128 [ 0.470875] TCP: Hash tables configured (established 32768 bind 32768)
129 [ 0.471545] UDP hash table entries: 2048 (order: 4, 65536 bytes)
130 [ 0.471858] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes)
131 [ 0.473026] NET: Registered protocol family 1
132 [ 0.476084] RPC: Registered named UNIX socket transport module.
133 [ 0.476229] RPC: Registered udp transport module.
134 [ 0.476324] RPC: Registered tcp transport module.
135 [ 0.476411] RPC: Registered tcp NFSv4.1 backchannel transport module.
136 [ 0.476581] PCI: CLS 0 bytes, default 128
137 [ 0.479495] Trying to unpack rootfs image as initramfs...
138 [ 0.484128] rootfs image is not initramfs (no cpio magic); looks like an initrd
139 [ 0.578919] Freeing initrd memory: 22496K
140 [ 0.580290] kvm [1]: HYP mode not available
141 [ 0.590173] audit: initializing netlink subsys (disabled)
142 [ 0.593443] audit: type=2000 audit(0.572:1): initialized
143 [ 0.595692] workingset: timestamp_bits=42 max_order=20 bucket_order=0
144 [ 0.641038] squashfs: version 4.0 (2009/01/31) Phillip Lougher
145 [ 0.645703] NFS: Registering the id_resolver key type
146 [ 0.646365] Key type id_resolver registered
147 [ 0.646447] Key type id_legacy registered
148 [ 0.646640] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
149 [ 0.647720] 9p: Installing v9fs 9p2000 file system support
150 [ 0.657828] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 247)
151 [ 0.658058] io scheduler noop registered
152 [ 0.658796] io scheduler cfq registered (default)
153 [ 0.677416] pl061_gpio 9030000.pl061: PL061 GPIO chip @0x0000000009030000 registered
154 [ 0.680850] OF: PCI: host bridge /pcie@10000000 ranges:
155 [ 0.681385] OF: PCI: IO 0x3eff0000..0x3effffff -> 0x00000000
156 [ 0.681674] OF: PCI: MEM 0x10000000..0x3efeffff -> 0x10000000
157 [ 0.681806] OF: PCI: MEM 0x8000000000..0xffffffffff -> 0x8000000000
158 [ 0.683330] pci-host-generic 3f000000.pcie: ECAM at [mem 0x3f000000-0x3fffffff] for [bus 00-0f]
159 [ 0.684406] pci-host-generic 3f000000.pcie: PCI host bridge to bus 0000:00
160 [ 0.684729] pci_bus 0000:00: root bus resource [bus 00-0f]
161 [ 0.684894] pci_bus 0000:00: root bus resource [io 0x0000-0xffff]
162 [ 0.685023] pci_bus 0000:00: root bus resource [mem 0x10000000-0x3efeffff]
163 [ 0.685453] pci_bus 0000:00: root bus resource [mem 0x8000000000-0xffffffffff]
164 [ 0.686138] pci 0000:00:00.0: [1b36:0008] type 00 class 0x060000
165 [ 0.689896] pci 0000:00:01.0: [1af4:1000] type 00 class 0x020000
166 [ 0.690272] pci 0000:00:01.0: reg 0x10: [io 0x0000-0x001f]
167 [ 0.690467] pci 0000:00:01.0: reg 0x14: [mem 0x00000000-0x00000fff]
168 [ 0.690685] pci 0000:00:01.0: reg 0x20: [mem 0x00000000-0x00003fff 64bit pref]
169 [ 0.690800] pci 0000:00:01.0: reg 0x30: [mem 0x00000000-0x0003ffff pref]
170 [ 0.691547] pci 0000:00:02.0: [1af4:1009] type 00 class 0x000200
171 [ 0.691687] pci 0000:00:02.0: reg 0x10: [io 0x0000-0x003f]
172 [ 0.691798] pci 0000:00:02.0: reg 0x14: [mem 0x00000000-0x00000fff]
173 [ 0.691931] pci 0000:00:02.0: reg 0x20: [mem 0x00000000-0x00003fff 64bit pref]
174 [ 0.694663] pci 0000:00:01.0: BAR 6: assigned [mem 0x10000000-0x1003ffff pref]
175 [ 0.694980] pci 0000:00:01.0: BAR 4: assigned [mem 0x8000000000-0x8000003fff 64bit pref]
176 [ 0.695232] pci 0000:00:02.0: BAR 4: assigned [mem 0x8000004000-0x8000007fff 64bit pref]
177 [ 0.695398] pci 0000:00:01.0: BAR 1: assigned [mem 0x10040000-0x10040fff]
178 [ 0.695560] pci 0000:00:02.0: BAR 1: assigned [mem 0x10041000-0x10041fff]
179 [ 0.695699] pci 0000:00:02.0: BAR 0: assigned [io 0x1000-0x103f]
180 [ 0.695827] pci 0000:00:01.0: BAR 0: assigned [io 0x1040-0x105f]
181 [ 0.723487] virtio-pci 0000:00:01.0: enabling device (0000 -> 0003)
182 [ 0.727062] virtio-pci 0000:00:02.0: enabling device (0000 -> 0003)
183 [ 0.729663] xenfs: not registering filesystem on non-xen platform
184 [ 0.751880] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
185 [ 0.760418] SuperH (H)SCI(F) driver initialized
186 [ 0.762917] msm_serial: driver initialized
187 [ 0.766553] cacheinfo: Unable to detect cache hierarchy for CPU 0
188 [ 0.811840] brd: module loaded
189 [ 0.852090] loop: module loaded
190 [ 0.853734] hisi_sas: driver version v1.6
191 [ 0.871287] libphy: Fixed MDIO Bus: probed
192 [ 0.874215] tun: Universal TUN/TAP device driver, 1.6
193 [ 0.874294] tun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
194 [ 0.889533] e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
195 [ 0.889636] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
196 [ 0.889982] igb: Intel(R) Gigabit Ethernet Network Driver - version 5.4.0-k
197 [ 0.890088] igb: Copyright (c) 2007-2014 Intel Corporation.
198 [ 0.890498] igbvf: Intel(R) Gigabit Virtual Function Network Driver - version 2.4.0-k
199 [ 0.890637] igbvf: Copyright (c) 2009 - 2012 Intel Corporation.
200 [ 0.891022] sky2: driver version 1.30
201 [ 0.894966] VFIO - User Level meta-driver version: 0.3
202 [ 0.901735] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
203 [ 0.901887] ehci-pci: EHCI PCI platform driver
204 [ 0.902339] ehci-platform: EHCI generic platform driver
205 [ 0.902941] ehci-exynos: EHCI EXYNOS driver
206 [ 0.903417] ehci-msm: Qualcomm On-Chip EHCI Host Controller
207 [ 0.903889] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
208 [ 0.904064] ohci-pci: OHCI PCI platform driver
209 [ 0.904525] ohci-platform: OHCI generic platform driver
210 [ 0.905262] ohci-exynos: OHCI EXYNOS driver
211 [ 0.908295] usbcore: registered new interface driver usb-storage
212 [ 0.913536] mousedev: PS/2 mouse device common for all mice
213 [ 0.918212] rtc-pl031 9010000.pl031: rtc core: registered pl031 as rtc0
214 [ 0.920729] i2c /dev entries driver
215 [ 0.935350] sdhci: Secure Digital Host Controller Interface driver
216 [ 0.935469] sdhci: Copyright(c) Pierre Ossman
217 [ 0.936463] Synopsys Designware Multimedia Card Interface Driver
218 [ 0.938773] sdhci-pltfm: SDHCI platform and OF driver helper
219 [ 0.943455] ledtrig-cpu: registered to indicate activity on CPUs
220 [ 0.950714] usbcore: registered new interface driver usbhid
221 [ 0.950840] usbhid: USB HID core driver
222 [ 0.962833] NET: Registered protocol family 17
223 [ 0.964201] 9pnet: Installing 9P2000 support
224 [ 0.966240] Key type dns_resolver registered
225 [ 0.968614] registered taskstats version 1
226 [ 0.975184] input: gpio-keys as /devices/platform/gpio-keys/input/input0
227 [ 0.978068] rtc-pl031 9010000.pl031: setting system clock to 2017-03-20 06:00:31 UTC (1489989631)
228 [ 0.978949] ALSA device list:
229 [ 0.979032] No soundcards found.
230 [ 0.981541] uart-pl011 9000000.pl011: no DMA platform data
231 [ 0.983448] RAMDISK: gzip image found at block 0
232 [ 3.599083] EXT4-fs (ram0): mounted filesystem with ordered data mode. Opts: (null)
233 [ 3.599404] VFS: Mounted root (ext4 filesystem) on device 1:0.
234 [ 3.601412] devtmpfs: mounted
235 [ 3.651244] Freeing unused kernel memory: 1024K
236
237 Please press Enter to activate this console.
238 [root@aarch64 ]#
239 [root@aarch64 ]#
240 [root@aarch64 ]#
241 [root@aarch64 ]# python
242 Python 2.7.13 (default, Mar 20 2017, 13:55:26)
243 [GCC 4.9.1 20140529 (prerelease)] on linux2
244 Type "help", "copyright", "credits" or "license" for more information.
245 >>> for i in rang[ 34.888834] random: fast init done
246 e(10): print "Hello World", i
247 ...
248 Hello World 0
249 Hello World 1
250 Hello World 2
251 Hello World 3
252 Hello World 4
253 Hello World 5
254 Hello World 6
255 Hello World 7
256 Hello World 8
257 Hello World 9
完
本文来自博客园,作者:摩斯电码,未经同意,禁止转载