交叉编译Python-3.6.0到aarch64/aarch32 —— 支持sqlite3
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了交叉编译Python-3.6.0到aarch64/aarch32 —— 支持sqlite3,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7847字,纯文字阅读大概需要12分钟。
内容图文
参考
https://datko.net/2013/05/10/cross-compiling-python-3-3-1-for-beaglebone-arm-angstrom/
平台
主机: ubuntu14.04 64bit
开发板: qemu + aarch64 (参考: http://www.cnblogs.com/pengdonglin137/p/6442583.html)
工具链:
aarch64-linux-gnu-gcc (gcc version 4.9.1 20140529) 用于编译aarch64上面运行的程序
arm-none-linux-gnueabi-gcc (gcc version 4.8.3 20140320) 用于编译aarch32上面运行的程序
Python版本: Python-3.6.0
概述
前面几篇博文介绍了Python2.7.13的交叉编译,在编译前需要给Python源码打上用于交叉编译的patch,从Python-3.3.1开始,就不需要再打什么patch了,只需要在configure的时候指定--build和--host参数即可。
下面我们以aarch64和aarch32为例说明。
正文
一、编译PC上面用的Python
因为在交叉编译的时候需要在PC上面运行对应版本的Python程序,所以我们需要先编译和安装PC上面用的Python,下面是命令:
1 #!/bin/bash 23 ../Python-3.6.0/configure 45make -j8 6sudomakeinstall
默认,Python3.6.0会被安装到/usr/local下面。
二、交叉编译
1、配置 mk1_conf.sh
-
aarch32
1 #!/bin/bash 2 3 export PATH=/home/pengdonglin/src/qemu/aarch32/arm-2014.05/bin:$PATH 4 5 ../Python-3.6.0/configure 6 --host=arm-none-linux-gnueabi 7 --build=armv7 8 --prefix=`pwd` 9 --enable-ipv6 10 --enable-shared 11 ac_cv_file__dev_ptmx="yes"12 ac_cv_file__dev_ptc="no"13 LDFLAGS="-L/home/pengdonglin/src/qemu/python_cross_compile/SQlite/aarch32/lib"14 CPPFLAGS="-I/home/pengdonglin/src/qemu/python_cross_compile/SQlite/aarch32/include"
其中--build表示编译出来的程序运行的CPU架构,--host是交叉编译工具链。这里我已经吧sqlite3的lib和include添加上了,所以生成的python3是支持sqlite3的。
-
aarch64
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-3.6.0/configure 6 --host=aarch64-linux-gnu 7 --build=aarch64 8 --prefix=`pwd` 9 --enable-ipv6 10 --enable-shared 11 ac_cv_file__dev_ptmx="yes"12 ac_cv_file__dev_ptc="no"13 LDFLAGS="-L/home/pengdonglin/src/qemu/python_cross_compile/SQlite/aarch64/lib"14 CPPFLAGS="-I/home/pengdonglin/src/qemu/python_cross_compile/SQlite/aarch64/include"
只需要替换运行的CPU架构为aarch64,然后设置对应的工具链即可,别忘了还有sqlite3的相关路径的修改。
2、编译和安装 mk2_make.sh
这里没有什么好说的,下面是脚本内容:
-
aarch32
1 #!/bin/bash 23 export PATH=/home/pengdonglin/src/qemu/aarch32/arm-2014.05/bin:$PATH 45make -j4 6makeinstall
-
aarch64
1 #!/bin/bash 23 export PATH=/home/pengdonglin/src/qemu/aarch64/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin:$PATH 45make -j4 6makeinstall
3、制作ramdisk
为了便于在python2和python3之间的切换,适当修改mk_ramdisk.sh如下:
-
aarch32
1 #!/bin/bash 2 3sudorm -rf rootfs 4sudorm -rf tmpfs 5sudorm -rf ramdisk* 6 7sudomkdir rootfs 8sudocp ../busybox-1.24.2/_install/* rootfs/ -raf 910sudo mkdir -p rootfs/proc/ 11sudo mkdir -p rootfs/sys/ 12sudo mkdir -p rootfs/tmp/ 13sudo mkdir -p rootfs/root/ 14sudo mkdir -p rootfs/var/ 15sudo mkdir -p rootfs/mnt/ 1617sudo cp etc rootfs/ -arf 1819sudo cp -arf ../arm-2014.05/arm-none-linux-gnueabi/libc/lib rootfs/ 2021ver=3 22sudo mkdir -p rootfs/usr 23pushd rootfs/usr 24sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${ver}/aarch32/lib . 25sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${ver}/aarch32/include . 26sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${ver}/aarch32/bin . 27sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${ver}/aarch32/share . 28sudo /home/pengdonglin/src/qemu/aarch32/arm-2014.05/bin/arm-none-linux-gnueabi-strip lib/python* 29popd 3031#sqlite 32sudo cp /home/pengdonglin/src/qemu/python_cross_compile/SQlite/aarch32/bin/* rootfs/bin/ 33sudo cp /home/pengdonglin/src/qemu/python_cross_compile/SQlite/aarch32/include/* rootfs/include/ 34sudo cp /home/pengdonglin/src/qemu/python_cross_compile/SQlite/aarch32/lib/* rootfs/lib/ 35sudo strip /rootfs/bin/sqlite3 3637sudo mkdir -p rootfs/dev/ 38sudo mknod rootfs/dev/tty1 c 4 1 39sudo mknod rootfs/dev/tty2 c 4 2 40sudo mknod rootfs/dev/tty3 c 4 3 41sudo mknod rootfs/dev/tty4 c 4 4 42sudo mknod rootfs/dev/console c 5 1 43sudo mknod rootfs/dev/null c 1 3 4445sudo rm -rf rootfs/lib/*.a 46sudo rm -rf rootfs/lib/*.la 47sudo /home/pengdonglin/src/qemu/aarch32/arm-2014.05/bin/arm-none-linux-gnueabi-strip rootfs/lib/* 4849sudo mkdir -p rootfs/tools 50sudo cp ./other_tools/* rootfs/tools 5152sudo mkdir -p rootfs/lib/modules/4\.10\.0\+ 5354sudo dd if=/dev/zero of=ramdisk bs=1M count=150 55sudo mkfs.ext4 -F ramdisk 5657sudo mkdir -p tmpfs 58sudo mount -t ext4 ramdisk ./tmpfs/ -o loop 59sudo cp -raf rootfs/* tmpfs/ 60sudo umount tmpfs 6162sudo gzip --best -c ramdisk > ramdisk.gz 63sudo mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img
如果提示空间不足的话,可以将dd命令的count参数扩大,同时不要忘了将kernel配置里的ramdisk的大小也扩大:
1 Device Drivers ---> 23 [*] Block devices ---> 45 (153600) Default RAM disk size (kbytes)
这里将ramdisk的大小修改为了150MB,然后重新编译kernel
-
aarch64
1 #!/bin/bash 2 3sudorm -rf rootfs 4sudorm -rf tmpfs 5sudorm -rf ramdisk* 6 7sudomkdir rootfs 8sudocp ../busybox-1.24.2/_install/* rootfs/ -raf 910sudo mkdir -p rootfs/proc/ 11sudo mkdir -p rootfs/sys/ 12sudo mkdir -p rootfs/tmp/ 13sudo mkdir -p rootfs/root/ 14sudo mkdir -p rootfs/var/ 15sudo mkdir -p rootfs/mnt/ 1617sudo cp etc rootfs/ -arf 18sudo mkdir -p rootfs/lib 1920sudo cp -arf ../gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/aarch64-linux-gnu/libc/lib/aarch64-linux-gnu/* rootfs/lib/ 2122sudo rm rootfs/lib/*.a 23sudo ../gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin/aarch64-linux-gnu-strip rootfs/lib/* 2425version=3 26sudo mkdir -p rootfs/usr 27pushd rootfs/usr 28sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${version}/aarch64/lib . 29sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${version}/aarch64/include . 30sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${version}/aarch64/bin . 31sudo cp -raf /home/pengdonglin/src/qemu/python_cross_compile/Python${version}/aarch64/share . 32sudo /home/pengdonglin/src/qemu/aarch64/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin/aarch64-linux-gnu-strip lib/python* 33popd 3435#sqlite 36sudo cp /home/pengdonglin/src/qemu/python_cross_compile/SQlite/aarch64/bin/* rootfs/bin/ 37sudo cp /home/pengdonglin/src/qemu/python_cross_compile/SQlite/aarch64/include/* rootfs/include/ 38sudo cp /home/pengdonglin/src/qemu/python_cross_compile/SQlite/aarch64/lib/* rootfs/lib/ 39sudo strip /rootfs/bin/sqlite3 4041sudo mkdir -p rootfs/dev/ 42sudo mknod rootfs/dev/tty1 c 4 1 43sudo mknod rootfs/dev/tty2 c 4 2 44sudo mknod rootfs/dev/tty3 c 4 3 45sudo mknod rootfs/dev/tty4 c 4 4 46sudo mknod rootfs/dev/console c 5 1 47sudo mknod rootfs/dev/null c 1 3 4849sudo mkdir -p rootfs/lib/modules/4\.10\.0\+ 5051pushd rootfs/lib 52sudo ln -sf ld-2.19-2014.07.so ld-linux-aarch64.so.1 53popd 5455sudo mkdir -p rootfs/tools 56sudo cp ./other_tools/* rootfs/tools 5758sudo dd if=/dev/zero of=ramdisk bs=1M count=200 59sudo mkfs.ext4 -F ramdisk 6061sudo mkdir -p tmpfs 62sudo mount -t ext4 ramdisk ./tmpfs/ -o loop 63sudo cp -raf rootfs/* tmpfs/ 64sudo umount tmpfs 6566sudo gzip --best -c ramdisk > ramdisk.gz 67sudo mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img
这里将ramdisk的大小设置为了200MB,同时修改kernel配置:
1 Device Drivers ---> 23 [*] Block devices ---> 45 (204800) Default RAM disk size (kbytes)
然后重新编译kernel。
4、测试
在板子起来后,运行:
python3 /usr/lib/python3.6/test/test___all__.py
-
aarch32
1 [root@vexpress ]# python3 /usr/lib/python3.6/test/test___all__.py 2__phello__.foo 3_bootlocale 4_collections_abc 5_compat_pickle 6_compression 7_dummy_thread 8... ... 9. 10 ---------------------------------------------------------------------- 11 Ran 1 test in15.731s 12 OK
-
aarch64
1 [root@aarch64 ]# python3 /usr/lib/python3.6/test/test___all__.py 2 [ 20.347974] random: python3: uninitialized urandom read (24 bytes read) 3 [ 21.049645] random: fast init done 4__phello__.foo 5_bootlocale 6_collections_abc 7_compat_pickle 8_compression 9_dummy_thread 10_markupbase 11... ... 12. 13 ---------------------------------------------------------------------- 14 Ran 1 test in10.745s 15 OK
完
原文:http://www.cnblogs.com/pengdonglin137/p/6604471.html
内容总结
以上是互联网集市为您收集整理的交叉编译Python-3.6.0到aarch64/aarch32 —— 支持sqlite3全部内容,希望文章能够帮你解决交叉编译Python-3.6.0到aarch64/aarch32 —— 支持sqlite3所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。