python移植嵌入式系统中(交叉编译python3)

python移植嵌入式系统中(交叉编译python3)前言最近由于使用一个开源项目是使用python3编写的程序,因此本人开始学习并使用python3,经过一段时间的使用后发现python3这种语言

大家好,欢迎来到IT知识分享网。

前言

最近由于使用一个开源项目是使用python3编写的程序,因此本人开始学习并使用python3,经过一段时间的使用后发现python3这种语言使用起来确实是比之前使用的C语言方便多了,由于本人使用嵌入式linux较多,因此本人将python3移植到嵌入式中,网络上很多移植都是python2,版本较老,本人成功移植后,在此记录一下,以供大家参考。

一、准备工作

1 源代码文件:Python-3.7.9.tgz
下载地址:https://www.python.org/downloads/source/

2 目标机
迈冲MC-B802 ti am3352

3 交叉编译环境
ubuntu1404 32bit

二、编译python

1.编译电脑版python

1.先安装依赖包

sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev liblzma-dev libffi-dev libc6-dev
1

2.将Python-3.7.9.tgz复制到虚拟机/root/am335x/python/目录下,在终端中输入

tar -zxvf Python-3.7.9.tgz
1

将压缩包解压到当前目录。

3.如果PC上预先没有python3.7.9及更高的版本,则需要编译3…7.9的PC版本,如电脑端已有可跳过此步,如没有则在终端中依次输入以下命令编译电脑版python并安装。

mkdir build.pc
cd build.pc
../configure --enable-optimizations
make
make install
12345

4.测试:运行python3,结果如下则说明安装成功:

Python 3.7.9 (default, Jun  15 2021, 16:10:27) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
1234

输入exit()退出。
如显示版本不对,则查看/usr/local/bin目录下是否有python3,如没有则使用python3.7建立软链接。
5.安装成功后,在终端中输入

make clean
cd ../
12

2.交叉编译python

1.在终端中输入

mkdir build.am3352
./configure CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ AR=arm-linux-gnueabihf-ar RANLIB=arm-linux-gnueabihf-ranlib --host=arm-linux-gnueabihf --build=i686-linux-gnu  --target=arm-linux-gnueabihf --enable-shared --disable-ipv6 --with-system-ffi ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=no --enable-optimizations --prefix=/root/am335x/python/Python-3.7.9/build.am3352
12

注:

  • arm-linux-gnueabihf-gcc是我使用的交叉编译工具链的路径,如果你使用其他工具链,请相应地修改命令。
  • –build=i686-linux-gnu:执行代码编译的主机。
  • –host=arm-linux-gnueabihf:编译出来的二进制程序所执行的主机。
  • –target=arm-linux-gnueabihf:只有在建立交叉编译环境时使用,正常编译和交叉编译不会用到。它使用build主机上的编译器编译一个新的编译器(binutils、gcc、gdb等),这个新的编译器将来编译出来的其他程序将在target指定的系统上运行。
  • –enable-shared:编译出来的库是动态库。
  • –disable-ipv6:禁止使用IPv6,如果要使用IPv6,则使用–enable-ipv6参数。
  • ac_cv_file__dev_ptmx=yes:从目标板即ARM板上的/dev目录下查看是否有ptmx设备,如果有则为yes。
  • ac_cv_file__dev_ptc=no:从目标板即ARM板上的/dev目录下查看是否有ptc设备,如果没有则为no。
  • –enable-optimizations:启用优化。
  • –prefix=/root/am335x/python/Python-3.7.9/build.am3352:指定安装目录。

2.修改Makefile
之后就要对Makefile做一些修改,把

OPT=            -DNDEBUG -g -fwrapv -O3 -Wall 
1

一行中,去掉-g,我们不要debug python以节约空间

OPT=            -DNDEBUG -fwrapv -O3 -Wall 
1

3.编译并安装

make
make install
12

4.此时在安装目录(/root/am335x/python/Python-3.7.9/build.am3352)下会有include、share、bin和libl四个文件夹,将此文件夹复制到嵌入式系统的/usr/目录下,然后运行python3,出现如下信息则表示移植成功。

Python 3.7.9 (default, Jan 18 2021, 15:32:31) 
[GCC 4.7.3 20130226 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
1234

注意

虽然交叉编译成功,但很多模块未编译的成功,这需要下载与配置三方库,在此先不研究此问题,遇到问题再解决(因为这些模块不是必须的),后面我会再详细介绍,如何配置第三方库。经过此方法编译出来的python占用空间太大,可先用nfs服务器挂载根文件系统,后面有时间再讲如何瘦身。

参考文档

好多一键移植的方法,我个人觉得,在linux里面,不得行。
不得不说的几篇好文章供参考:
https://www.pianshen.com/article/4591419518/
https://blog.csdn.net/xie__peng/article/details/106554674
https://blog.csdn.net/qq_28351465/article/details/54406180

嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击下方链接,0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!

点击这里找小助理0元领取:扫码进群领资料

python移植嵌入式系统中(交叉编译python3)

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/64821.html

(0)
上一篇 2024-05-20 09:45
下一篇 2024-05-26 11:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信