cygwin下面编译proxmark3(at 2015.09.09)

来源:互联网 发布:js 手写板插件 编辑:程序博客网 时间:2024/05/18 17:25
使用自带的MSYS环境可以编译proxmark3,但是对于那简陋的界面实在看不过去,所以就有使用cygwin来代替的想法,刚开始看proxmark3的编译过程有点蒙,首先运行make help

有许多的提示

Multi-OS Makefile, you are running on CYGWIN_NT-6.3-WOWPossible targets:+ all - Make bootrom, armsrc and the OS-specific host directory+ client - Make only the OS-specific host directory+ flash-bootrom - Make bootrom and flash it+ flash-os - Make armsrc and flash os+ flash-fpga - Make armsrc and flash fpga+ flash-both - Make armsrc and flash os and fpga image+ flash-all - Make bootrom and armsrc and flash bootrom, os and fpga image+ clean - Clean in bootrom, armsrc and the OS-specific host directory

这些东西看的不太懂,os不知道指的是在pc上面运行的软件还是固件的一部分,后来看看make client那个选项,觉的OS-specific host directory指的是pc运行的客户端软件,里面使用了QT的.


根据分析at91sam7s512里面的固件应该分成两部分,一部分叫os,另外一部分叫armsrc,
at91sam7s512里面还有一部分boot image,


另外还有一部分叫着fpga image的,我觉的应该是编译完成后包含在armsrc里面的,因为这个编译的时候总是有armsrc,以后看到这部分的时候再确定一下吧.


在启动开发环境的时候,在ProxSpace的目录下面有个runme.bat的批处理文件,里面设置的是指向msys下面的 /etc/fstab文件,runme.bat启动的时候将内容写入到fstab里面,


至于fstab文件的作用可以查到是设置起始的映射.

#Win32_PathMount_Point  \proxmark3\ProxSpace\mingw/mingw \proxmark3\ProxSpace\devkitARM/devkitARM \proxmark3\ProxSpace\Qt\4.6.2/qt \proxmark3\ProxSpace\pm3/pm3 
但是在msys启动以后不知道如何确定这个映射关系,以下分析终止了.




另外写了一个启动脚本来设置cygwin的环境.

#!/bin/bashQTDIR=E:/proxmark3/ProxSpace/Qt/4.6.2PATH=${PATH}:/cygdrive/e/proxmark3/ProxSpace/devkitARM/bin:/cygdrive/e/proxmark3/ProxSpace/mingw/binexport QTDIR PATH

设置三个运行环境,一个是arm的编译环境,mingw的编译环境,qt的编译环境.
注意QTDIR的路径格式与PATH中的路径格式是不一样的,这个就是msys不够智能的原因了,msys只能认识windows的格式,如果改成cygwin格式,路径是不会被识别的,搞的比较麻烦.
不过由于我的pc有另外版本的arm-none-eabi-gcc编译器,用来编译pm3的时候出现错误,还是用原来的版本来编译吧.


查找armsrc下面的Makefile里面没有编译器的声明,找到common文件夹下面的Makefile.common里面将
CROSS  ?= arm-none-eabi-
修改为


CROSS  ?= /cygdrive/e/proxmark3/ProxSpace/devkitARM/bin/arm-none-eabi-
这样arm的程序就可以编译了.


在编译QT的时候出现错误 LDLIBS +=  -ldl 这个库找不到,
这个原因是qt编译的环境设置问题,编译过程中找的环境是CYGWIN (用uname可以查),在client/Makefile加入

else ifneq (,$(findstring CYGWIN,$(platform)))CXXFLAGS = -I$(QTDIR)/include -I$(QTDIR)/include/QtCore -I$(QTDIR)/include/QtGuiQTLDLIBS = -L$(QTDIR)/lib -lQtCore4 -lQtGui4MOC = $(QTDIR)/bin/mocLUAPLATFORM = mingw

这样就可以正常编译了.


还需要注意的是如果机器上面的CYGWIN已经装了gcc,也会跟环境设置的gcc冲突,所以需要修改client/Makefile下面的两行
CC=gcc
CXX=g++
因为我在cygwin上面没有装gcc,所以这一步就省了.

0 0