欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ARM40移植Python3.6.4

程序员文章站 2022-05-31 18:05:17
...

准备

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

  • 主机平台: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

ARM40移植Python3.6.4

  • 预编译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

ARM40移植Python3.6.4

编译Ubuntu(PC版)zlib:

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

ARM40移植Python3.6.4

编译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

ARM40移植Python3.6.4

部署Ubuntu Python3.6.4

ARM40移植Python3.6.4

  • 解压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

ARM40移植Python3.6.4
ARM40移植Python3.6.4

  • 更新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

ARM40移植Python3.6.4

编译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

ARM40移植Python3.6.4

  • 交叉编译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            

ARM40移植Python3.6.4

不要急着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

ARM40移植Python3.6.4
ARM40移植Python3.6.4

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

ARM40移植Python3.6.4
ARM40移植Python3.6.4

关于报错:主要是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/

ARM40移植Python3.6.4

登录到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

ARM40移植Python3.6.4
ARM40移植Python3.6.4

至此,Python3.6.4移植结束。

参考引用

相关标签: ARM40