ARM40之Python3.6.4移植

13 篇文章 0 订阅
1 篇文章 0 订阅
准备

默认以下所列举的软件都已安装完毕,主机和目标机可以通讯。

  • 主机平台:Ubuntu 16.04 LTS(x64)
  • 目标平台:ARM40-A5D3
  • 虚拟机:VMware® Workstation 12 Pro
  • Python版本:Python3.6.4
  • 编译工具链:gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi
  • 终端工具:putty,secureCRT
部署zlib

downzlib.png

  • 预编译zlib

为什么要先编译zlib?因为zlib模块为python压缩方法提供支持。
如果不预先编译zlib,编译python的时候就会报“zlib 模块找不到”的错误。
编译Ubuntu(PC版),ARM版两个版本的zlib,为下面的交叉编译Python-3.6.4做准备。
注意:zlib的configure不支持用CC变量来指定交叉工具链。

$ cd ~
$ tar xzvf zlib-1.2.11.tar.gz
$ ls
$ cd zlib-1.2.11/
$ ls

lszlib.png

编译Ubuntu(PC版)zlib:

$ ./configure
$ make
$ sudo make install
$ exit

makezlib.png

编译ARM版zlib:

$ cd ~/zlib-1.2.11/
$ sudo mkdir /opt/zlib
$ export CC=arm-linux-gnueabi-gcc
$ ./configure  --prefix=/opt/zlib
$ make
$ sudo make install
$ exit

arm-zlib.png

部署Ubuntu Python3.6.4

downpython.png

  • 解压Python3.6.4源代码

将下载的Python3.6.4源代码复制到虚拟机Ubuntu中,解压到指定目录。默认是当前用户目录下。

$ cd ~
$ ls
$ xz -d Python-3.6.4.tar.xz
$ ls
$ tar xvf Python-3.6.4.tar
$ cd Python-3.6.4/
$ ls

xdpython.png
inpython.png

  • 更新Ubuntu Python3版本

Ubuntu上python3的版本大于3.6.4,请跳过此步骤。

$ python3 -V

1)Ubuntu上的python3的版本不能低于3.6.4,否则在交叉编译Python-3.6.4的时候就会失败!默认Ubuntu python为最新版本,如果不是,需要手动编译安装Python-3.6.4。
2)编译Python-3.6.4前必须修改Python-3.6.4/Modules/Setup.dist文件,
否则编译过程中有可能会报“zlib 模块找不到”的错误。

$ python3 -V
$ cd ~/Python-3.6.4/
$ ls
$ vim Modules/Setup.dist
$ ./configure
$ make
$ sudo make install

zlib-insert.png

编译ARM Python3.6.4
  • 创建Ubuntu版本的pgen

1)在交叉编译Python时,需要用到pgen解释器。
如果编译的是ARM架构的解释器,是不能在PC上运行的,会导致编译失败。
所以要预先编译出一个能Ubuntu上运行的pgen。

$ cd ~/Python-3.6.4/
$ make distclean  
$ ls
$ ./configure
$ make Parser/pgen

makegen.png

  • 交叉编译python3.6.4

1)在Python-3.6.4目录下,创建build-arm40的目录;
交叉编译python,将在这个目录下进行。
2)在/opt目录下创建python3目录;
将交叉编译好的zlib库,复制到python3目录下,注意这一步很关键。
注意…/configure,“/”的前面是有两个点的。

$ cd ~/Python-3.6.4/
$ mkdir build-arm40
$ cd build-arm40
$ sudo mkdir /opt/python3
$ sudo cp -rfp /opt/zlib/* /opt/python3/
$ ls /opt/python3/
$ ../configure CC=arm-linux-gnueabi-gcc \
              CXX=arm-linux-gnueabi-g++ \
              AR=arm-linux-gnueabi-ar \
              RANLIB=arm-linux-gnueabi-ranlib \
              --host=arm-linux-gnueabi \
              --build=x86_64-linux-gnu \
              --target=arm-linux-gnueabi \
              --disable-ipv6 \
              --prefix=/opt/python3 \
              --with-ensurepip=yes \
              --enable-optimizations \
              ac_cv_file__dev_ptmx=yes \
              ac_cv_file__dev_ptc=yes            

configure2.png

不要急着make,下面的步骤很关键。
1)将刚才创建好的Ubuntu版本的pgen,复制到build-arm40的Parser目录下。
2)交叉编译Python-3.6.4前必须修改Modules/Setup文件,否则编译过程中有可能会报“zlib 模块找不到”的错误。
3)touch –t 12312359 ./Parser/pgen ; 将pgen文件的日期改为今年的最后一分钟生成的。为什么需要这一步?因为arm版python在make时,会生成它的pgen,就会把刚才复制过来的pgen给替换掉,改成未来的时间,就会忽略跳过。引用1

$ cd build-arm40
$ ls
$ cp ../Parser/pgen ./Parser/
$ ll ./Parser/
$ touch -t 12312359 ./Parser/pgen
$ ll ./Parser/
$ vim Modules/Setup

touch-gen2.png
zlib-insert.png

4)切换到root账户进行make,以防由于环境变量不一致的导致编译错误。
5)编辑root环境下的.bashrc文件,并使交叉编译器生效。

在.bashrc文件末尾添加
export PATH=/opt/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi/bin:$PATH

$ su -
root# cd ~
root# vim .bashrc
root# source .bashrc
root# echo $PATH
root# cd /home/ubt1604/Python-3.6.4/build-arm40/
root# make
root# make install

root-gcc.png
root-bashrc2.png

关于报错:主要是zlib缺失,gcc交叉编译工具链路径或者环境变量的问题。
编译python3.6.4结束了,下面将它移植ARM40上。

移植ARM Python3.6.4
  • ARM40 Python3文件部署

1)将Ubuntu /opt目录下的python3目录进行打包;
2)通过NFS将它解压到ARM40的/opt目录下。

$ cd /opt/
$ sudo tar cvf python3.tar python3/
$ ls
$ sudo mv python3.tar /home/nfsroot/
$ ls /home/nfsroot/

py3.tar.png

登录到ARM40,使用NFS连接到Ubuntu nfs共享目录/home/nfsroot
默认ARM40 IP地址:192.168.6.5;Ubuntu默认IP地址:192.168.6.10;

root@ARM40:# cd /home
root@ARM40:# mkdir nfsroot
root@ARM40:# ls
root@ARM40:# ls
root@ARM40:# mount -t nfs -o nolock 192.168.6.10:/home/nfsroot /home/nfsroot
root@ARM40:# cd nfsroot/
root@ARM40:# ls
root@ARM40:# tar xvf python3.tar -C /opt/
root@ARM40:# ls /opt/
root@ARM40:# cd /opt/python3/bin/
root@ARM40:# ./python3.6 -V
>>Python 3.6.4

arm_python.tar.png
arm_python.zlib.png

至此,Python3.6.4移植结束。

参考引用
  • 7
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值