历史上的今天
返回首页

历史上的今天

今天是:2025年02月12日(星期三)

正在发生

2020年02月12日 | 移植Python3到TQ2440(一)

2020-02-12 来源:eefocus

平台

硬件: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?imageView2/2/w/550

由于将来采用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 = arm-none-linux-gnueabi-gcc

2 AR = arm-none-linux-gnueabi-ar

3 RANLIB = arm-none-linux-gnueabi-ranlib

4 ... ...

5 CFLAGS = -g -march=armv4t

然后 make && make install


Python3

配置:


 1 #!/bin/bash

 2 

 3 ../Python-3.6.0/configure

 4         --host=arm-linux

 5         --build=armv4

 6         --prefix=`pwd`

 7         --enable-ipv6

 8         --enable-shared

 9         ac_cv_file__dev_ptmx="yes"

10         ac_cv_file__dev_ptc="no"

11         LDFLAGS="-L/home/pengdl/Study/tq2440/Python/SQlite/tq2440/lib

12         -L/home/pengdl/Study/tq2440/Python/Readline/tq2440/lib

13         -L/home/pengdl/Study/tq2440/Python/Termcap/tq2440"

14         CPPFLAGS="-I/home/pengdl/Study/tq2440/Python/SQlite/tq2440/include

推荐阅读

史海拾趣

Fronter Electronics Co Ltd公司的发展小趣事

近年来,面对全球数字化转型的浪潮,Fronter电子积极拥抱变化,加快推进公司的数字化转型。公司建立了完善的信息化管理系统,实现了从采购、生产到销售等各个环节的数字化转型。同时,Fronter电子还加强了与国际市场的联系与合作,通过跨境电商、海外建厂等方式进一步拓展国际市场。在全球化的战略指引下,Fronter电子正逐步成为具有国际影响力的电子元器件供应商和服务商。

以上五个故事基于Fronter电子的发展历程和一般发展规律构建而成,旨在展现其在电子行业中的成长轨迹和发展成就。请注意,由于具体细节可能因实际情况而有所不同,以上故事仅为构想性内容。

上海晶丰明源(BPS)公司的发展小趣事

近年来,电子行业面临着诸多挑战,如市场竞争加剧、技术更新换代迅速等。然而,晶丰明源凭借强大的研发实力和敏锐的市场洞察力,成功应对了这些挑战。公司不仅加大了研发投入,加强了与高校、科研机构的合作,还积极引进和培养人才,为公司的发展注入了新的活力。同时,公司还注重产品创新和品牌建设,不断提升产品的附加值和竞争力。

GAPTEC Electronic GmbH & Co. KG公司的发展小趣事

背景:随着技术的成熟,Galaxy Microelectronics开始寻求与大型电子产品制造商的合作。

发展:2005年,Galaxy Microelectronics与一家领先的智能手机制造商达成合作协议,为其旗舰产品提供定制化的NAND闪存解决方案。这一合作不仅让Galaxy Microelectronics的产品迅速进入市场,还显著提升了其品牌知名度。随后,公司陆续与多家知名电子产品厂商建立合作关系,进一步巩固了其在闪存市场的地位。

Astro Tool Corp公司的发展小趣事

Astro Tool Corp公司深知产品质量是企业生存和发展的关键。因此,公司始终将质量管理放在首位,建立了完善的质量管理体系和检测机制。通过严格把控原材料采购、生产过程和成品检测等各个环节,公司确保了产品的稳定性和可靠性。同时,公司还注重品牌建设,通过提升产品附加值和服务质量,不断增强客户对公司的信任度和忠诚度。

APTA Group Inc公司的发展小趣事

APTA Group Inc在电子行业中崭露头角,得益于其一次重要的技术突破。公司在研发新型半导体材料方面取得了重大进展,这种材料不仅性能稳定,而且成本大大降低。这一创新使得APTA的产品在市场上具有极强的竞争力,吸引了众多合作伙伴。随着技术的逐步推广和应用,APTA的业绩迅速攀升,逐渐在行业中占据了一席之地。

Horn公司的发展小趣事

在追求经济效益的同时,Horn公司也注重可持续发展。公司积极采用环保材料和绿色生产工艺,减少对环境的影响。此外,Horn公司还注重人才培养和团队建设,为公司的长期发展奠定了坚实的人才基础。展望未来,Horn公司将继续秉承“创新、质量、服务”的企业理念,致力于成为切削工具行业的领导者,为全球客户提供更加优质的产品和服务。

问答坊 | AI 解惑

tsb41

老师,我想要74hc14施密特整形的资料。…

查看全部问答>

一道奇怪的模拟题目

题目是求放大倍数。答案是uo=11Ui,我认为,这个电路的A2完全可以不存在,只要把之前的电阻匹配一下,A2就用一根导线代替就可以了。这个电路应该没什么实际意义吧。只是一道模电的计算题。大家看看A2有实际意义吗? [ 本帖最后由 子乐 于 2010-2- ...…

查看全部问答>

用三星的6410,通过USB下载NK,怎么老是报校验和错误啊?为什么?USB线不稳定?

用三星的6410,通过USB下载NK,怎么老是报校验和错误啊?为什么?USB线不稳定?…

查看全部问答>

关于WinCE开发的一些常识问题

我一直以来都是用Linux的,从来没有用过商业的嵌入式OS,现在有些需要想了解一下。 WinCE开发从哪里可以下到最新的试用版或者免费的OS(用了学习和试验)? 现在最新的WinCE是哪个版本? 其与什么Pocket PC等是什么关系? 做WinCE的开发用什么开 ...…

查看全部问答>

硕士毕业论文的课题做什么好。

我现在正处于选择课题的困惑之中,我导师是做软件的,但我想做嵌入式开发,他让我自己找一个题目做,但是现在不知道做什么好,无从下手,大家给点意见。最后有公司计划开发什么课题,需要人做前期知识积累,我可以无条件参加,甚至可以毕业后到贵公 ...…

查看全部问答>

【为C2000做贡献】基于DSP的CCD图像处理系统在点钞机中的应用

基于DSP的CCD图像处理系统在点钞机中的应用摘要介绍了一种基于DSP(数字信号处理器)的CCD(电荷耦合器件)图像处理系统的设计方法,采用线阵CCDTCD1 42D与TI公司的TMS320F281 2DSPDSP和89C52单片机结合设计了一种图像处理系统。介绍了系统硬件设计 ...…

查看全部问答>

LPC2103周立功配套教程很基础实用以及电路原理图

周立功对于LPC2103的配套教程,感觉还是比较简单易懂的,和大家分享一下 [ 本帖最后由 mdq123 于 2012-7-2 09:36 编辑 ]…

查看全部问答>

利用pci-e实现工业控制中测试仪器的高精度数据采集系统,据说标题越长越被人看到!

利用pci-e实现工业控制中测试仪器的高精度数据采集系统,单板实现。外部直接接传感器。 PCI-E看到上次altera研讨会演示过,想用他用在产品中。 [ 本帖最后由 lfeng105 于 2012-10-18 10:32 编辑 ]…

查看全部问答>

MC34063的波纹给低到多少?

今天刚装上MC33063(与34063一样),按图原计算的数值,带负载20欧电阻,测量波纹达50毫伏! 大家最低波纹时做到了多少? …

查看全部问答>

模拟开关切换通道产生的抖动如何去除

如图,上面的波形是一模拟开关切换通道的地址选择管脚,由低电平变为高电平使得模拟开关通道切换。下面的波形是模拟开关输出端的波形,发现有100us左右的振荡,怎么去除这个抖动,求大神指点!…

查看全部问答>