移植Python3到TQ2440(一)

2020-02-12来源: eefocus关键字:移植  Python3  TQ2440

平台

硬件:TQ2440  64MB内存 256MB NandFlash

bootloader:U-Boot 2015.04

kernel:linux-4.9

Python: Python-3.6.0

工具链:arm-none-linux-gnueabi-gcc  4.8.3


概述

现在树莓派很火,在树莓派上面用户可以通过Python来控制板子上面的GPIO资源, 然后我想TQ2440也应该做到这一点。 将来根文件系统会通过NFS的方式挂载到开发板上面。


一、工具链

登录这个网址:http://www.veryarm.com/arm-none-linux-gnueabi-gcc


我们这里使用的是最新的Linux解压版:arm-2014.05-29,由于TQ2440用的arm9属于armv4t架构,所以在编译运行于TQ2440上的程序的时候需要给工具链传递参数-march=armv4t,为了简单起见,我们可以用下面的办法:


 1 ( pengdl@ubuntu | ~/Study/cross_compile/arm-2014.05/bin | Remote:True )

 2 $ls -l

 3 total 22581248

 4 lrwxrwxrwx 1 pengdl pengdl      32 Apr 19 19:53 arm-linux-addr2line -> arm-none-linux-gnueabi-addr2line*

 5 lrwxrwxrwx 1 pengdl pengdl      25 Apr 19 19:54 arm-linux-ar -> arm-none-linux-gnueabi-ar*

 6 lrwxrwxrwx 1 pengdl pengdl      25 Apr 19 19:54 arm-linux-as -> arm-none-linux-gnueabi-as*

 7 lrwxrwxrwx 1 pengdl pengdl      26 Apr 19 19:54 arm-linux-c++ -> arm-none-linux-gnueabi-c++*

 8 lrwxrwxrwx 1 pengdl pengdl      30 Apr 19 19:54 arm-linux-c++filt -> arm-none-linux-gnueabi-c++filt*

 9 lrwxrwxrwx 1 pengdl pengdl      26 Apr 19 19:54 arm-linux-cpp -> arm-none-linux-gnueabi-cpp*

10 lrwxrwxrwx 1 pengdl pengdl      25 Apr 19 19:55 arm-linux-cs -> arm-none-linux-gnueabi-cs*

11 lrwxrwxrwx 1 pengdl pengdl      32 Apr 19 19:55 arm-linux-cs-daemon -> arm-none-linux-gnueabi-cs-daemon*

12 lrwxrwxrwx 1 pengdl pengdl      30 Apr 19 19:55 arm-linux-elfedit -> arm-none-linux-gnueabi-elfedit*

13 -rwxrwxr-x 1 pengdl pengdl      57 Apr 19 20:00 arm-linux-g++*

14 -rwxrwxr-x 1 pengdl pengdl      57 Apr 19 20:06 arm-linux-gcc*

15 -rwxrwxr-x 1 pengdl pengdl      63 Apr 19 20:02 arm-linux-gcc-4.8.3*

16 lrwxrwxrwx 1 pengdl pengdl      29 Apr 19 19:56 arm-linux-gcc-ar -> arm-none-linux-gnueabi-gcc-ar*

17 lrwxrwxrwx 1 pengdl pengdl      29 Apr 19 19:56 arm-linux-gcc-nm -> arm-none-linux-gnueabi-gcc-nm*

18 lrwxrwxrwx 1 pengdl pengdl      33 Apr 19 19:57 arm-linux-gcc-ranlib -> arm-none-linux-gnueabi-gcc-ranlib*

19 lrwxrwxrwx 1 pengdl pengdl      27 Apr 19 19:57 arm-linux-gcov -> arm-none-linux-gnueabi-gcov*

20 lrwxrwxrwx 1 pengdl pengdl      26 Apr 19 19:57 arm-linux-gdb -> arm-none-linux-gnueabi-gdb*

21 lrwxrwxrwx 1 pengdl pengdl      28 Apr 19 19:57 arm-linux-gprof -> arm-none-linux-gnueabi-gprof*

22 lrwxrwxrwx 1 pengdl pengdl      25 Apr 19 19:57 arm-linux-ld -> arm-none-linux-gnueabi-ld*

23 lrwxrwxrwx 1 pengdl pengdl      25 Apr 19 19:58 arm-linux-nm -> arm-none-linux-gnueabi-nm*

24 lrwxrwxrwx 1 pengdl pengdl      30 Apr 19 19:58 arm-linux-objcopy -> arm-none-linux-gnueabi-objcopy*

25 lrwxrwxrwx 1 pengdl pengdl      30 Apr 19 19:58 arm-linux-objdump -> arm-none-linux-gnueabi-objdump*

26 lrwxrwxrwx 1 pengdl pengdl      29 Apr 19 19:58 arm-linux-ranlib -> arm-none-linux-gnueabi-ranlib*

27 lrwxrwxrwx 1 pengdl pengdl      30 Apr 19 19:58 arm-linux-readelf -> arm-none-linux-gnueabi-readelf*

28 lrwxrwxrwx 1 pengdl pengdl      27 Apr 19 19:58 arm-linux-size -> arm-none-linux-gnueabi-size*

29 lrwxrwxrwx 1 pengdl pengdl      30 Apr 19 19:58 arm-linux-strings -> arm-none-linux-gnueabi-strings*

30 lrwxrwxrwx 1 pengdl pengdl      28 Apr 19 19:58 arm-linux-strip -> arm-none-linux-gnueabi-strip*

31 -rwxr-xr-x 1 pengdl pengdl  736300 May 30  2014 arm-none-linux-gnueabi-addr2line*

32 -rwxr-xr-x 2 pengdl pengdl  763504 May 30  2014 arm-none-linux-gnueabi-ar*

33 -rwxr-xr-x 2 pengdl pengdl 1253360 May 30  2014 arm-none-linux-gnueabi-as*

34 -rwxr-xr-x 2 pengdl pengdl  687056 May 30  2014 arm-none-linux-gnueabi-c++*

35 -rwxr-xr-x 1 pengdl pengdl  734604 May 30  2014 arm-none-linux-gnueabi-c++filt*

36 -rwxr-xr-x 1 pengdl pengdl  686128 May 30  2014 arm-none-linux-gnueabi-cpp*

37 -rwxr-xr-x 1 pengdl pengdl  186548 May 30  2014 arm-none-linux-gnueabi-cs*

38 -rwxr-xr-x 1 pengdl pengdl 2186780 May 30  2014 arm-none-linux-gnueabi-cs-daemon*

39 -rwxr-xr-x 1 pengdl pengdl   24692 May 30  2014 arm-none-linux-gnueabi-elfedit*

40 -rwxr-xr-x 2 pengdl pengdl  687056 May 30  2014 arm-none-linux-gnueabi-g++*

41 -rwxr-xr-x 2 pengdl pengdl  686128 May 30  2014 arm-none-linux-gnueabi-gcc*

42 -rwxr-xr-x 2 pengdl pengdl  686128 May 30  2014 arm-none-linux-gnueabi-gcc-4.8.3*

43 -rwxr-xr-x 1 pengdl pengdl   23608 May 30  2014 arm-none-linux-gnueabi-gcc-ar*

44 -rwxr-xr-x 1 pengdl pengdl   23576 May 30  2014 arm-none-linux-gnueabi-gcc-nm*

45 -rwxr-xr-x 1 pengdl pengdl   23576 May 30  2014 arm-none-linux-gnueabi-gcc-ranlib*

46 -rwxr-xr-x 1 pengdl pengdl  307000 May 30  2014 arm-none-linux-gnueabi-gcov*

47 -rwxr-xr-x 1 pengdl pengdl 4484452 May 30  2014 arm-none-linux-gnueabi-gdb*

48 -rwxr-xr-x 1 pengdl pengdl  805164 May 30  2014 arm-none-linux-gnueabi-gprof*

49 -rwxr-xr-x 2 pengdl pengdl 1200784 May 30  2014 arm-none-linux-gnueabi-ld*

50 -rwxr-xr-x 2 pengdl pengdl  747500 May 30  2014 arm-none-linux-gnueabi-nm*

51 -rwxr-xr-x 2 pengdl pengdl  912812 May 30  2014 arm-none-linux-gnueabi-objcopy*

52 -rwxr-xr-x 2 pengdl pengdl 1109932 May 30  2014 arm-none-linux-gnueabi-objdump*

53 -rwxr-xr-x 2 pengdl pengdl  763504 May 30  2014 arm-none-linux-gnueabi-ranlib*

54 -rwxr-xr-x 1 pengdl pengdl  420160 May 30  2014 arm-none-linux-gnueabi-readelf*

55 -rwxr-xr-x 1 pengdl pengdl  737260 May 30  2014 arm-none-linux-gnueabi-size*

56 -rwxr-xr-x 1 pengdl pengdl  736332 May 30  2014 arm-none-linux-gnueabi-strings*

57 -rwxr-xr-x 2 pengdl pengdl  912812 May 30  2014 arm-none-linux-gnueabi-strip*


即在原来的工具链上面做一些软连接,对arm-linux-gcc/g++/gcc-4.8.3做一些特殊处理:


 1 $cat arm-linux-gcc

 2 #!/bin/bash

 3 arm-none-linux-gnueabi-gcc -march=armv4t $*

 4 

 5 $cat arm-linux-g++

 6 #!/bin/bash

 7 arm-none-linux-gnueabi-g++ -march=armv4t $*

 8 

 9 $cat arm-linux-gcc-4.8.3 

10 #!/bin/bash

11 arm-none-linux-gnueabi-gcc-4.8.3 -march=armv4t $*


此外, 还需要注意的是, 将来在制作用于TQ2440的根文件系统的时候拷贝的工具链的lib库的位置:


arm-2014.05/arm-none-linux-gnueabi/libc/armv4t/lib

而不是:


arm-2014.05/arm-none-linux-gnueabi/libc/lib

这个用于高于armv4t架构的平台,如exynos4412用的是armv7架构。


二、Bootloader

使用的uboot可以到https://github.com/pengdonglin137/u-boot下载,可以参考:


u-boot-2015.04 在tq2440上的移植(使用spl引导u-boot)

将来的分区稍有变化:

image.png

由于将来采用NFS挂载根文件系统启动的方式,下面是bootargs以及bootcmd:

bootargs:


noinitrd root=/dev/nfs rw nfsroot=192.168.1.101:/nfsroot/rootfs ethmac=1C:6F:65:34:51:7E ip=192.168.1.6:192.168.1.101:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0,115200n

这里板子的IP是192.168.1.6,HOST的IP是192.168.1.101, 当然由于采用了设备树的方式, 所以也可以不在uboot里设置bootargs,而是放到设备树的chosen节点当中。


bootcmd:

nand read 0x300080000x3000000x500000; nand read 0x320000000x8000000x100000; bootm 0x30008000-0x32000000

这里会了加快启动速度, 提前把uImage和dtb文件少些到的nandflash中, 关于在tq2440上面支持dtb,请参考  讓TQ2440也用上設備樹(1)


三、kernel

可以到https://github.com/pengdonglin137/linux-4.9下载,tq2440_dt分支, 使用方法参考 讓TQ2440也用上設備樹(1)

烧写kernel和dtb到nand中:


 1 烧写kernel:

 2 mw.b 0x30008000 0xff 0x500000

 3 tftp 0x30008000 uImage

 4 nand erase 0x300000 0x500000

 5 nand write 0x30008000 0x300000 0x500000

 6 

 7 烧写dtb:

 8 mw.b 0x30008000 0xff 0x100000

 9 tftp 0x30008000 dtb

10 nand erase 0x800000 0x100000

11 nand write 0x30008000 0x800000 0x100000


四、Python

参考 


交叉编译Python-2.7.13到ARM(aarch32)平台

交叉编译Python-2.7.13到ARM(aarch32)—— 支持sqlite3

交叉编译Python-3.6.0到aarch64/aarch32 —— 支持sqlite3

由于上面两篇博文采用的是qemu模拟的cortex-a9平台,属于armv7架构,而我们的tq2440是armv4架构,所以需要做一些修改。


SQlite


 1 #!/bin/bash

 2 

 3 ../sqlite-autoconf-3170000/configure --host=arm-none-linux-gnueabi

 4         --prefix=`pwd`

 5         CFLAGS="-march=armv4t"

 6         CPPFLAGS="-march=armv4t"

 7         LDFLAGS="-march=armv4t"

 8 

 9 make -j4

10 make install


Readline


 1 #!/bin/bash

 2 

 3 ../readline-7.0/configure --host=arm-none-linux-gnueabi

 4         --prefix=`pwd`

 5         CFLAGS="-march=armv4t"

 6         CPPFLAGS="-march=armv4t"

 7         LDFlAGS="-march=armv4t"

 8 

 9 make -j4

10 make install


Termcap

配置:

1 #!/bin/bash

3 ../termcap-1.3.1/configure --host=arm-none-linux-gnueabi

4         --prefix=`pwd`

修改Makefile:


1 CC =

[1] [2] [3]
关键字:移植  Python3  TQ2440 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic487953.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:让TQ2440也用上设备树(2)
下一篇:ARM 启动过程

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

opencv在arm和x86移植
安装后。在/opt/arm/opencv/lib和/opt/arm/opencv/include文件夹下会生成非常多文件。第四步,測试arm-linux-gcc   test.c -o test-arm  -I/opt/arm/opencv/include/opencv  -L/opt/arm/opencv/lib -lml -lcvaux -lhighgui -lcv -lcxcore  -lpthread -lrt 移植opencv2.0到arm上执行
发表于 2020-02-06
opencv在arm和x86移植
如何从STM32F030C8移植到GD32F130C8
最近公司一个项目要从STM32F030C8移植到GD32F130C8。第一次做项目的移植,对GD的单片机也不是很了解,写下这篇博客记录我的移植过程。正在移植的过程中,每天更新,希望自己进步的同时可以给别人一些参考。这两款单片机的pin脚基本兼容,属于pin对pin。下面是我的移植路程,(我可能要开始走弯路了,看到这篇文章的大侠少侠们如果有更好的方法请指正)一、添加芯片类型判断程序:在库中的启动代码前面加一段,读一下ID code,自动区分一下芯片的厂商和类型,这样就一劳永逸了。按照 ARM 和 JEDEC-106 标准,执行下面这个函数这个程序可以让程序知道当前的芯片是ST的还是GD的。uint16_t
发表于 2020-02-06
如何从STM32F030C8移植到GD32F130C8
QT5.3.2在ARM上的移植
ubuntu10.04 准备移植phonon,4.5移植失败。播放声音就出错。。。没办法。转移到QtMutimedia安装交叉编译工具这里就不提了。。。1.下载QT5.3.2:http://download.qt.io/archive/qt/不小下载5.0,这个版本有问题。。。2.配置配置时需要注意的几点是:如果是交叉编译,需要配置 xplatform选项,比如要在arm-linux平台上移植Qt的话,就在配置项中加上 -xplatform linux-arm-gnueabi-g++ ,Qt5支持的交叉平台都可在源码顶层目录中的 qtbase/mkspecs/ 下找到,每个子目录名代表一个交叉平台的名字,移植Qt时应根据自己的
发表于 2020-02-01
成功移植SQLite3到ARM Linux开发板
/local/bin目录,将动态库文件复制到/usr/local/lib目录,并对动态库做链接。12345cp /media/sda1/sqlite3 /usr/locl/bincp /media/sda1 libsqlite3.so.0.8.6 /usr/local/libcd /usr/local/libln -s libsqlite3.so.0.8.6 libsqlite3.so.0ln -s libsqlite3.so.0.8.6 libsqlite3.so7、运行sqlite在开发板上执行sqlite3命令,看到如下信息说明sqlite3移植成功
发表于 2020-01-30
成功移植SQLite3到ARM Linux开发板
【嵌入式】S3C2410平台移植linux 2.6.14内核
小续第一次接触内核的东西,有点小激动啊激动归激动,这实验还是要继续做下去,书上三两句话就带过去的,剩下的就留给我们了,着实考验动手能力啊当编译过内核之后,发现这个过程也不复杂嘛(复杂的是内核的配置),不过对于没接触过的人来说,也能够折腾一段时间的了,所以记下这个过程,其中也有些需要注意的地方,然后给没接触过的人分享下环境如下操作系统:ubuntu 12.04LTS交叉编译工具:arm-linux-gcc 3.2开发板:FS2410linux内核:linux 2.6.14 mystery@lcw:~/Downloads$ cat /etc/issueUbuntu 12.04.2 LTS n lmystery@lcw:~/Do
发表于 2020-01-28
【嵌入式】S3C2410平台移植linux 2.6.14内核
简易AVR仿真器制作
JTAGICE 是一款经典的仿真器。它支持的芯片清单为:ATmega128, ATmega128L,ATmega16, ATmega162, ATmega162V, ATmega165, ATmega165V, ATmega169, ATmega169V,ATmega16L, ATmega32, ATmega323, ATmega323L, ATmega32L, ATmega64, ATmega64L 。虽然它不支持Mega8/48/88/168等较新的常用芯片,但却无损它的实用性。我们可以用这款JtagICE仿真Mega16芯片进行开发,开发成功后,才移植到M8/48/88/168上。只要开发时留意一下,移植并不会
发表于 2020-01-23
简易AVR仿真器制作
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved