需求场景
开发板情况
arm板是公司采购的工控机。主要用来 使用python3解析excel表格处理数据。
配置如下:
配置 | 版本 |
---|---|
cpu | imx6dl(armv7架构) |
操作系统 | linux3.10 |
python版本 | 2.7 |
项目情况
项目中最好使用python3 。可行的有以下几种方式:
方式 | 优缺点 | 可行度 |
---|---|---|
重做文件系统 | 订制程度比较高,后期增加减少模块简单,但是前期需要厂家提供的资料较多。 | 由于厂家只给了固件,暂不可行 |
交叉编译python3拷贝到开发板中 | 只需要知道交叉编译器版本就可以移植,但是很多模块需要自己编译并解决依赖 | 项目中需要的额外模块不多,可行度较高 |
这里使用交叉编译python3之后再拷贝到开发板中的方式
移植前准备
PC虚拟机系统
ubuntu1804 x64
python3源码:https://www.python.org/downloads/source/
zlib源码:http://www.zlib.net/
python3 扩展模块 : https://pypi.org
setuptools源码:
jdcal源码:
et_xmlfile源码:
移植具体步骤
主要分为以下几个步骤:
1,编译安装python3的host版本(PC)。
2,配置交叉编译器环境变量
3,交叉编译zlib
4,交叉编译python3的target版本
5,把bin和lib都拷贝到arm板子上
6,安装python扩展模块
1,编译安装python3的host版本
1) 查看当前ubuntu中是否有python3,打开终端执行以下命令。
python --version
如果有python3,可以直接到https://www.python.org/downloads/source/下载对应版本的源码。然后跳过当前步骤。
2)下载python3.9.5源码,拷贝到虚拟机里。打开终端执行如下命令:
tar -xf Python-3.9.5.tar
cd Python-3.9.5/
./configure --prefix=$PWD/../_install_host --enable-shared
make -j4
make install
make distclean
以上命令把python3.9.5安装到本机中,另起一个终端,输入python --version 或者python3 --version 查看版本是否是当前安装的。如果不对可以手动指定环境变量。
export PATH=/home/user/_install_host/bin:$PATH
export LD_LIBRARY_PATH=/home/user/_install_host/lib:$LD_LIBRARY_PATH
2,配置交叉编译器环境变量
这里使用的是gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux,解压后添加到.bashrc最后
gedit ~/.bashrc
#末尾加入两行
export PATH=$PATH::/home/usr_/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/usr_/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/lib
#保存退出后执行
source ~/.bashrc
#执行
arm-linux-gnueabihf-gcc -v
3,交叉编译zlib
下载zlib后,拷贝到虚拟机中,在对应目录打开终端。执行:
tar -xf zlib-1.2.3.tar.xz
cd zlib-1.2.3/
export CC=arm-linux-gnueabihf-gcc #它的configure不支持用CC变量来指定交叉工具链
./configure --prefix=$PWD/arm——build #最后生成的库、头文件和man文件都在当前目录的arm-build目录下
make && make install
4,交叉编译python3的target版本
进入python3源码目录中。确认号交叉编译器正常。
arm-linux-gnueabihf-gcc -v
进入执行配置命令
./configure --host=arm-linux --build=armv7 --prefix=$PWD/arm_build \
--enable-ipv6 --enable-shared \
ac_cv_file__dev_ptmx="yes" ac_cv_file__dev_ptc="yes"\
LDFLAGS="-L/home/gec/tools/zlib-1.2.13/arm_build/lib" \
CPPFLAGS="-I/home/gec/tools/zlib-1.2.13/arm_build/include" \
--with-ensurepip=yes --enable-optimizations
再arm_bulid目录下可以看到编译生成的arm版本的程序
5,把bin和lib都拷贝到arm板子上
scp -r arm_build/bin/* root@192.168.0.106:/usr/bin
scp -r arm_build/lib/* root@192.168.0.106:/usr/lib
进入到arm板卡中。直接执行python3 --version。
python3 --version
#如果没有执行权限就执行:
chmod +x /usr/bin/* -R
chmod +x /usr/lib/* -R
# 测试zlib模块是否正常
root@imx6qsabresd:/usr/sbin# python3
Python 3.9.5 (default, Feb 14 2023, 21:00:17)
[GCC 4.9.2 20140904 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import zlib
>>>
都正常之后可以增加一个链接,每次之心python自动默认python3
rm /usr/bin/python
ln -s /usr/bin/python3 /usr/bin/python
6,安装python扩展模块
把下载好的几个包拷贝到板卡中。
执行命令时注意打印信息是否有错误
如果有错误,需要先解决错误。
- 错误情况1:”zlib“module??
解决方案:确认以上步骤zlib编译和python3编译过程是否正确。然后重新编译python3。 - 错误情况2: ValueError: ZIP does not support timestamps before 1980
解决方案: 文件拷贝到开发板中后文件修改时间丢失。但是zip模块要求时间再1980年之后。所以修改这些模块文件的时间即可。这里提供一个python文件:
import os
import sys
import time
# 修改文件的【修改日期】
def set_file_time(filename, updatetime='now', access_time='now'):
filename = os.path.abspath(filename)
if updatetime == 'now':
new_updatetime = time.time()
else:
new_updatetime = time.mktime(time.strptime(updatetime, "%Y-%m-%d %H:%M:%S"))
if access_time == 'now':
new_access_time = time.time()
else:
new_access_time = time.mktime(time.strptime(access_time, "%Y-%m-%d %H:%M:%S"))
os.utime(filename, (new_access_time, new_updatetime))
# 修改一个文件夹内所有文件的【修改日期】
def set_all(path):
for i in os.listdir(path):
file = os.path.realpath(os.path.join(path, i))
if os.path.isfile(file):
set_file_time(file)
elif os.path.isdir(file):
set_all(file)
if __name__ == '__main__':
path = sys.argv[1] # 这里更换为你要修改的文件夹
set_all(path) # 修改以上文件夹内所有文件的日期
把以上内容拷贝到一个文件里。命名为settime.py。放到和python平级目录下。
python3 settime.py jdcal
python3 settime.py et_xmlfile
python3 settime.py openpyxl
1,安装setuptools
tar -xf setuptools-67.2.0.tar.gz
cd setuptools-67.2.0
python3 setup.py build
python3 setup.py install
2,安装jdcal
tar -xf jdcal-1.4.1.tar.gz
cd jdcal-1.4.1
python3 setup.py build
python3 setup.py install
3,安装et_xmlfile
tar -xf et_xmlfile-1.1.0.tar.gz
cd et_xmlfile-1.1.0
python3 setup.py build
python3 setup.py install
4,安装openpyxl
tar -xf openpyxl-3.1.2.tar.gz
cd openpyxl-3.1.2
python3 setup.py build
python3 setup.py install
正常完成安装后执行,
root@imx6qsabresd:~/python-tools# python3
Python 3.9.5 (default, Feb 14 2023, 21:00:17)
[GCC 4.9.2 20140904 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import openpyxl
>>>
没有报错说明安装成功。
小结
1,移植过程中每一步要根据自己本机的情况,和开发板的情况修改对应目录和文件。
2,编译和安装过程中的报错和打印信息尽量多观察。对于解决问题帮助很大。
参考链接
-
链接1 https://blog.csdn.net/yyw794/article/details/78059102
-
链接2 https://blog.csdn.net/qq_33753562/article/details/120972805
-
链接3 https://blog.csdn.net/u012230668/article/details/89206857
-
链接4 https://blog.csdn.net/jzzy_hony/article/details/79745136文章来源:https://www.toymoban.com/news/detail-766578.html
-
链接5 https://www.cnblogs.com/Se7eN-HOU/p/16736164.html文章来源地址https://www.toymoban.com/news/detail-766578.html
到了这里,关于记录移植Python3到arm开发板linux系统中的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!