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