Hi,
I have compiled MSP430Flasher for ARM architecture. There are a small changes that I had to make. Because I couldn't find instructions anywhere, I will post them here. The compiled version works fine.
There are two steps: compiling libmsp430, and compiling MSP430Flasher.
For cross building I have used Debian Stretch x64.
Note: I had to add .txt to the patches, should be removed.
libmsp430
MSP430Flasher depends on library libmsp430.so. It too must be compiled for armhf architecture.
1) Download MSP Debug Stack sources: MSPDS-OPEN-SOURCE
2) Extract:
mkdir libmsp430 cd libmsp430 unzip ../slac460y.zip
3) Patch for Linux (thanks to Daniel Beer from dlbeer.co.nz):
diff -ur libmsp430-src-orig/DLL430_v3/src/DLL430_OldApiV3.cpp libmsp430-src/DLL430_v3/src/DLL430_OldApiV3.cpp --- libmsp430-src-orig/DLL430_v3/src/DLL430_OldApiV3.cpp 2018-07-24 09:16:20.927974552 +1200 +++ libmsp430-src/DLL430_v3/src/DLL430_OldApiV3.cpp 2018-07-24 09:18:45.604227945 +1200 @@ -3865,7 +3865,7 @@ #endif UpdateLog.append("\n---------------------Firmware upate end--------------------------\n"); - ofstream(logfile.c_str(), ios::app | ios::out) << UpdateLog; + std::ofstream(logfile.c_str(), ios::app | ios::out) << UpdateLog; } } @@ -3907,7 +3907,7 @@ #endif UpdateLog.append("\n---------------------Firmware upate end--------------------------\n"); - ofstream(logfile.c_str(), ios::app | ios::out) << UpdateLog; + std::ofstream(logfile.c_str(), ios::app | ios::out) << UpdateLog; } } } diff -ur libmsp430-src-orig/DLL430_v3/src/TI/DLL430/UpdateManagerFet.cpp libmsp430-src/DLL430_v3/src/TI/DLL430/UpdateManagerFet.cpp --- libmsp430-src-orig/DLL430_v3/src/TI/DLL430/UpdateManagerFet.cpp 2018-07-24 09:16:20.959974636 +1200 +++ libmsp430-src/DLL430_v3/src/TI/DLL430/UpdateManagerFet.cpp 2018-07-24 09:49:48.189184415 +1200 @@ -52,6 +52,7 @@ #include "WatchdogControl.h" #include "DeviceHandleMSP430.h" #include "HidUpdateManager.h" +#include "MSP_FetFpgaHal.h" #include "Record.h" #include "MemoryContent.h" diff -ur libmsp430-src-orig/Makefile libmsp430-src/Makefile --- libmsp430-src-orig/Makefile 2018-07-24 09:16:20.763974121 +1200 +++ libmsp430-src/Makefile 2018-07-24 10:07:36.506228181 +1200 @@ -1,4 +1,5 @@ -CXXFLAGS := -fPIC -std=c++0x -fvisibility=hidden -fvisibility-inlines-hidden +CXXFLAGS := -fPIC -std=c++0x -fvisibility=hidden -fvisibility-inlines-hidden \ + -I/usr/include/hidapi PCH_HEADER := ./DLL430_v3/src/TI/DLL430/pch.h PCH_COMPILED := ./DLL430_v3/src/TI/DLL430/pch.h.gch @@ -74,7 +75,7 @@ BSTATIC := -Wl,-Bstatic BDYNAMIC := -Wl,-Bdynamic - HIDOBJ := $(LIBTHIRD)/hid-libusb.o + HIDOBJ := -lhidapi-libusb else CXX:= clang++ @@ -146,8 +147,11 @@ install: cp $(OUTPUT) /usr/local/lib/ + ldconfig clean: $(MAKE) -C ./ThirdParty/BSL430_DLL clean @for i in $(OBJS); do rm -f $$i; done @rm -f $(PCH_HEADER).?ch build.log + rm -f $(STATICOUTPUT).a + rm -f $(OUTPUT) Only in libmsp430-src-orig/ThirdParty/BSL430_DLL/BSL430_DLL: pch.h.gch diff -ur libmsp430-src-orig/ThirdParty/BSL430_DLL/Makefile libmsp430-src/ThirdParty/BSL430_DLL/Makefile --- libmsp430-src-orig/ThirdParty/BSL430_DLL/Makefile 2018-07-24 09:16:20.995974731 +1200 +++ libmsp430-src/ThirdParty/BSL430_DLL/Makefile 2018-07-24 10:09:28.817579798 +1200 @@ -1,4 +1,5 @@ -CXXFLAGS := -fPIC -std=c++0x -fvisibility=hidden -fvisibility-inlines-hidden +CXXFLAGS := -fPIC -std=c++0x -fvisibility=hidden -fvisibility-inlines-hidden \ + -I/usr/include/hidapi PCH_HEADER := ./BSL430_DLL/pch.h PCH_COMPILED := ./BSL430_DLL/pch.h.gch
cd libmsp430 patch -p1 < ../slac460y-linux.patch
cd ..
4) Patch for ARM:
diff --git a/mspflasher/libmsp430/Makefile b/mspflasher/libmsp430/Makefile index 31e53a9..273fa10 100644 --- a/mspflasher/libmsp430/Makefile +++ b/mspflasher/libmsp430/Makefile @@ -1,3 +1,6 @@ +CC = arm-linux-gnueabihf- +BIT32 = 1 + CXXFLAGS := -fPIC -std=c++0x -fvisibility=hidden -fvisibility-inlines-hidden \ -I/usr/include/hidapi @@ -44,11 +47,10 @@ LIBDIRS := -L$(LIBTHIRD) PLATFORM := $(shell uname -s) ifeq ($(PLATFORM),Linux) - CXX:= g++ + CXX:= $(CC)g++ ifdef BIT32 STATICOUTPUT := linux32 - CXXFLAGS += -m32 LIBTHIRD = ./ThirdParty/lib LIBDIRS = -L$(LIBTHIRD) else @@ -64,7 +66,7 @@ ifeq ($(PLATFORM),Linux) LIBS += -lusb-1.0 endif - LIBS += -lusb-1.0 -lrt -lpthread + LIBS += -lrt -lpthread ifdef BOOST_DIR INCLUDES += -I$(BOOST_DIR) @@ -143,14 +145,14 @@ $(PCH_COMPILED): $(PCH_HEADER) $(CXX) -c -o $@ $< $(USE_PCH) $(CXXFLAGS) $(INCLUDES) $(DEFINES) $(BSLLIB): - $(MAKE) -C ./ThirdParty/BSL430_DLL + $(MAKE) CROSS_COMPILE=${CC} -C ./ThirdParty/BSL430_DLL install: cp $(OUTPUT) /usr/local/lib/ ldconfig clean: - $(MAKE) -C ./ThirdParty/BSL430_DLL clean + $(MAKE) CROSS_COMPILE=${CC} -C ./ThirdParty/BSL430_DLL clean @for i in $(OBJS); do rm -f $$i; done @rm -f $(PCH_HEADER).?ch build.log rm -f $(STATICOUTPUT).a diff --git a/mspflasher/libmsp430/ThirdParty/BSL430_DLL/Makefile b/mspflasher/libmsp430/ThirdParty/BSL430_DLL/Makefile index 8d845cb..a1bd522 100644 --- a/mspflasher/libmsp430/ThirdParty/BSL430_DLL/Makefile +++ b/mspflasher/libmsp430/ThirdParty/BSL430_DLL/Makefile @@ -1,3 +1,5 @@ +CC = arm-linux-gnueabihf- + CXXFLAGS := -fPIC -std=c++0x -fvisibility=hidden -fvisibility-inlines-hidden \ -I/usr/include/hidapi @@ -37,10 +39,9 @@ OUTPUT := ../lib64/libbsl430.a PLATFORM := $(shell uname -s) ifeq ($(PLATFORM),Linux) - CXX:= g++ + CXX:= $(CC)g++ ifdef BIT32 - CXXFLAGS += -m32 OUTPUT := ../lib/libbsl430.a endif
cd libmsp430 patch -p1 < ../slac460y-arm.patch cd ..
5) Install cross compiler:
sudo apt-get update sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
6) Install build dependencies using MultiArch:
sudo dpkg --add-architecture armhf sudo apt-get update sudo apt-get install libboost-system1.62-dev:armhf libboost-filesystem1.62-dev:armhf libboost-date-time1.62-dev:armhf libboost-chrono1.62-dev:arm hf libboost-thread1.62-dev:armhf libhidapi-dev:armhf libusb-1.0-0-dev:armhf
7) Build:
cd libmsp430 make cd ..
8) Install to ARM target:
/usr/local/lib/libmsp430.so
sudo ldconfig
9) Install dependencies on ARM target (assumes that is it also running Debian Stretch):
sudo apt-get update
sudo apt-get install libboost-system1.62.0 libboost-filesystem1.62.0 libboost-date-time1.62.0 libboost-chrono1.62.0 libboost-thread1.62.0 libhidapi-libusb0 libusb-1.0-0
MSP430Flasher
1) Download MSPFlasher-1_03_20_00-linux-installer.zip: MSP430-FLASHER
2) Unzip:
unzip MSPFlasher-1_03_20_00-linux-installer.zip
3) Run to extract the sources:
./MSPFlasher-1.3.20-linux-installer.run --mode unattended --prefix ./mspflasherfull
4) Keep only the source folder:
mv ./mspflasherfull/Source ./mspflasher rm -r ./mspflasherfull
5) Patch mspflasher to compile for ARM and resolve some issues:
diff --git a/mspflasher/mspflasher/Makefile b/mspflasher/mspflasher/Makefile index 2289de2..a548b5f 100644 --- a/mspflasher/mspflasher/Makefile +++ b/mspflasher/mspflasher/Makefile @@ -1,9 +1,9 @@ -CC=g++ -CFLAGS=-std=c++0x -I./Inc -m32 -LDFLAGS=-L../ -lmsp430 +CC=arm-linux-gnueabihf-g++ +CFLAGS=-std=c++0x -I./Inc +LDFLAGS=-L../libmsp430/ -lmsp430 SOURCES=MSP430_Flasher.cpp Support.cpp StdUseCase.cpp OBJECTS=$(SOURCES:.cpp=.o) -EXECUTABLE=../MSP430Flasher +EXECUTABLE=./MSP430Flasher all: $(SOURCES) $(EXECUTABLE) @@ -15,4 +15,4 @@ $(EXECUTABLE): $(OBJECTS) clean: rm -rf *.o - rm -rf ../MSP430Flasher + rm -rf ./MSP430Flasher diff --git a/mspflasher/mspflasher/StdUseCase.cpp b/mspflasher/mspflasher/StdUseCase.cpp index 81fca35..c460e6f 100644 --- a/mspflasher/mspflasher/StdUseCase.cpp +++ b/mspflasher/mspflasher/StdUseCase.cpp @@ -388,6 +388,10 @@ void StdUseCase_InterfaceInit(sDefOptions_t* sOpt) StdUseCase_Exit(EXIT_INITIALIZE, 0); } + // load device database + MSP430_LoadDeviceDb(NULL); + Print_N_Log(STD_MSG,"* Loaded device database.\n"); + // set interface speed if(sOpt->pcFETspeed != NULL) { diff --git a/mspflasher/mspflasher/Support.cpp b/mspflasher/mspflasher/Support.cpp index a48544b..45ee150 100644 --- a/mspflasher/mspflasher/Support.cpp +++ b/mspflasher/mspflasher/Support.cpp @@ -304,7 +304,7 @@ int EvaluateOptions(int argc, char* argv[], sDefOptions_t* sOpt, sRTE_t* RTE) } // get parameter - while ((cOpt = getopt(argc, ( char**)argv, g_cAllOpts, RTE)) != EOF ) + while ((cOpt = getopt(argc, ( char**)argv, g_cAllOpts, RTE)) != (char)EOF ) { // choose code for determined parameter switch (cOpt) @@ -761,7 +761,7 @@ int EvaluateOptions(int argc, char* argv[], sDefOptions_t* sOpt, sRTE_t* RTE) } // get additional use case specific parameters - while ((cOpt = getopt(argc, ( char**)argv, g_cAllOpts, RTE)) != EOF ) + while ((cOpt = getopt(argc, ( char**)argv, g_cAllOpts, RTE)) != (char)EOF ) { for(i = 0; i < g_lCountOpt; i++) // for every element of struct of additional parameters {
cd mspflasher patch -p1 < ../mspflasher-arm-fixes.patch cd ..
6) Build:
cd mspflasher make cd ..
7) Install to target:
/usr/local/bin/MSP430Flasher