2014年3月17日 星期一

source tree 下載 和使用方式.

經過前面的 build 過程, 已經可以製作出 MSP430 toolchain 了 , 不過正確性還不知道 ,
需要經過多個案子使用後才能確定, 所以請大家試試看吧 !!

首先 , 我將整個 source tree 放在
https://www.openfoundry.org/svn/msp430gcctoolch/gcc-4.6.3_ver/
上 , 可以自行去下載 .

編譯環境是使用 Fedora 20 .
使用方式 , 先執行 $> source build/setenv.sh 設定環境 , 接著 直接執行 $> make 即可.
最後會輸出在 ./out/下 .



2014年3月14日 星期五

Step 5 build "mspdebug"

最後一的步驟 , 開始編譯 mspdebug utility .
mspdebug 會使用到 readline 的功能, 所以不要忘記安裝 readline
su -c ' yum install readline-devel'

接著開始 build 了, 不過會出現一些 bug  , 經過修改終於可以完整的 build 出來了. 
Patch  的內容如下 , 不過好像有比較新的版本 , any way 先使用看看 ,屆時有需要
在來更新 mspdebug 的版本.


diff -Nura mspdebug-0.19-orignal/formats/elf32.c mspdebug-0.19/formats/elf32.c
--- mspdebug-0.19-orignal/formats/elf32.c    2012-03-03 06:56:26.000000000 +0800
+++ mspdebug-0.19/formats/elf32.c    2014-03-14 02:38:55.910362847 +0800
@@ -180,7 +180,8 @@

 static int read_all(struct elf32_info *info, FILE *in)
 {
-    memset(info, 0, sizeof(info));
+//    memset(info, 0, sizeof(info));
+    memset(info, 0, sizeof(struct elf32_info));

     if (read_ehdr(info, in) < 0)
         return -1;
diff -Nura mspdebug-0.19-orignal/util/sport.c mspdebug-0.19/util/sport.c
--- mspdebug-0.19-orignal/util/sport.c    2012-03-03 06:56:26.000000000 +0800
+++ mspdebug-0.19/util/sport.c    2014-03-14 02:34:50.919397478 +0800
@@ -20,6 +20,8 @@
 #include <unistd.h>
 #include <errno.h>
 #include <string.h>
+#include <sys/time.h>
+

 #include "sport.h"
 #include "util.h"


看看 mspdebug  的 help 吧 :

[jeff@localhost msp430-toolchain]$ pwd
/home/jeff/msp430-toolchain
[jeff@localhost msp430-toolchain]$ll ./out/bin
total 24168
-rwxr-xr-x 1 jeff jeff  764332 Mar 14 02:53 msp430-addr2line
-rwxr-xr-x 2 jeff jeff  797937 Mar 14 02:53 msp430-ar
-rwxr-xr-x 2 jeff jeff 1078674 Mar 14 02:53 msp430-as
-rwxr-xr-x 1 jeff jeff  759142 Mar 14 02:53 msp430-c++filt
-rwxr-xr-x 1 jeff jeff  379404 Mar 14 02:57 msp430-cpp
-rwxr-xr-x 1 jeff jeff   38462 Mar 14 02:53 msp430-elfedit
-rwxr-xr-x 2 jeff jeff  379365 Mar 14 02:57 msp430-gcc
-rwxr-xr-x 2 jeff jeff  379365 Mar 14 02:57 msp430-gcc-4.6.3
-rwxr-xr-x 1 jeff jeff   53027 Mar 14 02:57 msp430-gcov
-rwxr-xr-x 1 jeff jeff 4495367 Mar 14 03:00 msp430-gdb
-rwxr-xr-x 1 jeff jeff 4495372 Mar 14 03:00 msp430-gdbtui
-rwxr-xr-x 1 jeff jeff  849775 Mar 14 02:53 msp430-gprof
-rwxr-xr-x 4 jeff jeff 1056501 Mar 14 02:53 msp430-ld
-rwxr-xr-x 4 jeff jeff 1056501 Mar 14 02:53 msp430-ld.bfd
-rwxr-xr-x 1 jeff jeff     948 Mar 14 03:00 msp430mcu-config
-rwxr-xr-x 2 jeff jeff  779744 Mar 14 02:53 msp430-nm
-rwxr-xr-x 2 jeff jeff 1016702 Mar 14 02:53 msp430-objcopy
-rwxr-xr-x 2 jeff jeff 1117648 Mar 14 02:53 msp430-objdump
-rwxr-xr-x 2 jeff jeff  797936 Mar 14 02:53 msp430-ranlib
-rwxr-xr-x 1 jeff jeff  414502 Mar 14 02:53 msp430-readelf
-rwxr-xr-x 1 jeff jeff  783274 Mar 14 03:00 msp430-run
-rwxr-xr-x 1 jeff jeff  765075 Mar 14 02:53 msp430-size
-rwxr-xr-x 1 jeff jeff  764091 Mar 14 02:53 msp430-strings
-rwxr-xr-x 2 jeff jeff 1016733 Mar 14 02:53 msp430-strip
-rwxr-xr-x 1 jeff jeff  660938 Mar 14 03:04 mspdebug

[jeff@localhost msp430-toolchain]$ ./out/bin/mspdebug --help
Usage: ./out/bin/mspdebug [options] <driver> [command ...]

    -q
        Start in quiet mode.
    -d device
        Connect via the given tty device, rather than USB.
    -U bus:dev
        Specify a particular USB device to connect to.
    -s serial
        Specify a particular device serial number to connect to.
    -j
        Use JTAG, rather than Spy-Bi-Wire (UIF devices only).
    -v voltage
        Set the supply voltage, in millivolts.
    -n
        Do not read ~/.mspdebug on startup.
    --long-password
        Send 32-byte IVT as BSL password (flash-bsl only)
    --help
        Show this help text.
    --fet-list
        Show a list of devices supported by the FET driver.
    --fet-force-id string
        Override the device ID returned by the FET.
    --usb-list
        Show a list of available USB devices.
    --force-reset
        Force target reset in initialization sequence.
    --allow-fw-update
        Update FET firmware (tilib only) if necessary.
    --require-fw-update <image.txt>
        Require FET firmware update (tilib only). The image must be
        a TI Text file.
    --version
        Show copyright and version information.

Most drivers connect by default via USB, unless told otherwise via the
-d option. By default, the first USB device found is opened.

If commands are given, they will be executed. Otherwise, an interactive
command reader is started.

Available drivers are:
    rf2500
        eZ430-RF2500 devices. Only USB connection is supported.
    olimex
        Olimex MSP-JTAG-TINY.
    olimex-v1
        Olimex MSP-JTAG-TINY (V1).
    olimex-iso
        Olimex MSP-JTAG-ISO.
    sim
        Simulation mode.
    uif
        TI FET430UIF and compatible devices (e.g. eZ430).
    uif-bsl
        TI FET430UIF bootloader.
    flash-bsl
        TI generic flash-based bootloader via RS-232
    gdbc
        GDB client mode
    tilib
        TI MSP430 library
[jeff@localhost msp430-toolchain]$


2014年3月12日 星期三

Step 4 build "libc"

進入到第四步驟 ,編譯 libc , 這部份要特別注意 , 因為 libc 是在MSP430 上使用 , 所以要用的是 cross compiler 來編譯.

基本上如果之前的 msp430-gcc 沒有編譯錯誤 , 這部份應該就沒有大問題了. 要注意PATH的是設定 , 不然會沒有辦法執行 msp430-gcc .

這部份順利 , 沒有需要 patch 的部份 , 編譯最後訊息如下:

msp430-gcc -c -mcpu=430x -mmpy=16 -I./../include -I. -Wall -Os -gdwarf-2 ./libm/fixunssfsi.c -o Build/mcpu-430x/mmpy-16/fixunssfsi.o
msp430-gcc -c -mcpu=430x -mmpy=16 -I./../include -I. -Wall -Os -gdwarf-2 ./libm/gesf.c -o Build/mcpu-430x/mmpy-16/gesf.o
msp430-gcc -c -mcpu=430x -mmpy=16 -I./../include -I. -Wall -Os -gdwarf-2 ./libm/ltsf.c -o Build/mcpu-430x/mmpy-16/ltsf.o
msp430-gcc -c -mcpu=430x -mmpy=16 -I./../include -I. -Wall -Os -gdwarf-2 ./libm/subsf.c -o Build/mcpu-430x/mmpy-16/subsf.o
msp430-gcc -c -mcpu=430x -mmpy=16 -I./../include -I. -Wall -Os -gdwarf-2 ./libm/nesf.c -o Build/mcpu-430x/mmpy-16/nesf.o
msp430-gcc -x assembler-with-cpp -c -mcpu=430x -mmpy=16 -I./../include -I. ./libm/fpmulparts.S -o Build/mcpu-430x/mmpy-16/fpmulparts.o
msp430-ar rc Build/mcpu-430x/mmpy-16/libfp.a Build/mcpu-430x/mmpy-16/divsf.o Build/mcpu-430x/mmpy-16/fixsfsi.o Build/mcpu-430x/mmpy-16/floatdisf.o Build/mcpu-430x/mmpy-16/gtsf.o Build/mcpu-430x/mmpy-16/mulsf.o Build/mcpu-430x/mmpy-16/addsf.o Build/mcpu-430x/mmpy-16/eqsf.o Build/mcpu-430x/mmpy-16/fixunssfdi.o Build/mcpu-430x/mmpy-16/floatsisf.o Build/mcpu-430x/mmpy-16/lesf.o Build/mcpu-430x/mmpy-16/negsf.o Build/mcpu-430x/mmpy-16/cmpsf.o Build/mcpu-430x/mmpy-16/fixsfdi.o Build/mcpu-430x/mmpy-16/fixunssfsi.o Build/mcpu-430x/mmpy-16/gesf.o Build/mcpu-430x/mmpy-16/ltsf.o Build/mcpu-430x/mmpy-16/subsf.o Build/mcpu-430x/mmpy-16/nesf.o Build/mcpu-430x/mmpy-16/fpmulparts.o
make[3]: Leaving directory `/home/jeff/msp430-toolchain/msp430libc/msp430-libc-20120224/src'
make[2]: Leaving directory `/home/jeff/msp430-toolchain/msp430libc/msp430-libc-20120224/src'
make[2]: Entering directory `/home/jeff/msp430-toolchain/msp430libc/msp430-libc-20120224/src'
install -c -m644 ../include/byteswap.h ../include/ctype.h ../include/debug.h ../include/endian.h ../include/errno.h ../include/inttypes.h ../include/isr_compat.h ../include/legacymsp430.h ../include/limits.h ../include/math.h ../include/msp430libc.h ../include/setjmp.h ../include/signal.h ../include/stdint.h ../include/stdio.h ../include/stdlib.h ../include/string.h /home/jeff/msp430-toolchain/out/msp430/include/
install -c -m644 ../include/sys/_ansi.h ../include/sys/cdefs.h ../include/sys/config.h ../include/sys/crtld.h ../include/sys/fdlibm.h ../include/sys/ieeefp.h ../include/sys/inttypes.h ../include/sys/reent.h ../include/sys/_types.h ../include/sys/types.h /home/jeff/msp430-toolchain/out/msp430/include/sys/
install -c -m644 ../include/bits/byteswap.h /home/jeff/msp430-toolchain/out/msp430/include/bits/
for i in `msp430-gcc --print-multi-lib 2>/dev/null`; do \
      dir=`echo $i | sed -e 's/;.*$//'` ; \
      mkdir -p /home/jeff/msp430-toolchain/out/msp430/lib/$dir; \
      make -w "MULTILIB_DIR=$dir" install-libc install-libm ; \
    done;
make[3]: Entering directory `/home/jeff/msp430-toolchain/msp430libc/msp430-libc-20120224/src'
install -c -m644 Build/./libc.a /home/jeff/msp430-toolchain/out/msp430/lib/./
install -c -m644 Build/./libm.a Build/./libfp.a /home/jeff/msp430-toolchain/out/msp430/lib/./
make[3]: Leaving directory `/home/jeff/msp430-toolchain/msp430libc/msp430-libc-20120224/src'
make[3]: Entering directory `/home/jeff/msp430-toolchain/msp430libc/msp430-libc-20120224/src'
install -c -m644 Build/mcpu-430x/libc.a /home/jeff/msp430-toolchain/out/msp430/lib/mcpu-430x/
install -c -m644 Build/mcpu-430x/libm.a Build/mcpu-430x/libfp.a /home/jeff/msp430-toolchain/out/msp430/lib/mcpu-430x/
make[3]: Leaving directory `/home/jeff/msp430-toolchain/msp430libc/msp430-libc-20120224/src'
make[3]: Entering directory `/home/jeff/msp430-toolchain/msp430libc/msp430-libc-20120224/src'
install -c -m644 Build/mmpy-16/libc.a /home/jeff/msp430-toolchain/out/msp430/lib/mmpy-16/
install -c -m644 Build/mmpy-16/libm.a Build/mmpy-16/libfp.a /home/jeff/msp430-toolchain/out/msp430/lib/mmpy-16/
make[3]: Leaving directory `/home/jeff/msp430-toolchain/msp430libc/msp430-libc-20120224/src'
make[3]: Entering directory `/home/jeff/msp430-toolchain/msp430libc/msp430-libc-20120224/src'
install -c -m644 Build/mcpu-430x/mmpy-16/libc.a /home/jeff/msp430-toolchain/out/msp430/lib/mcpu-430x/mmpy-16/
install -c -m644 Build/mcpu-430x/mmpy-16/libm.a Build/mcpu-430x/mmpy-16/libfp.a /home/jeff/msp430-toolchain/out/msp430/lib/mcpu-430x/mmpy-16/
make[3]: Leaving directory `/home/jeff/msp430-toolchain/msp430libc/msp430-libc-20120224/src'
make[2]: Leaving directory `/home/jeff/msp430-toolchain/msp430libc/msp430-libc-20120224/src'
make[1]: Leaving directory `/home/jeff/msp430-toolchain/msp430libc'


=> Elapsed time = 0m 48s



我們來看看 install 的東西吧, 發現 libc.a 和 libm.a 等, 這邊應該沒有 .so file , 因為MSP430的程式不會大到使用 so lib 的方式來進行動態連結吧 ?!


[jeff@localhost lib]$ pwd
/home/jeff/msp430-toolchain/out/msp430/lib
[jeff@localhost lib]$ ll
total 588
drwxr-xr-x 388 jeff jeff  16384 Apr  6  2012 ldscripts
-rw-r--r--   1 jeff jeff 188374 Mar 12 02:56 libc.a
-rw-r--r--   1 jeff jeff  40340 Mar 12 02:56 libfp.a
-rw-r--r--   1 jeff jeff 280698 Mar 12 02:56 libm.a
drwxrwxr-x   3 jeff jeff   4096 Mar 12 02:56 mcpu-430x
drwxrwxr-x   2 jeff jeff   4096 Mar 12 02:56 mmpy-16
-rw-r--r--   1 jeff jeff  63267 Apr  6  2012 msp430mcu.spec
[jeff@localhost lib]$

2014年3月5日 星期三

Step 3 build "gdb"

接著第三步驟, 編譯 GDB 了 , 雖然我都使用 printk 或是某個 GPIO 跳幾下來進行 debug.
我認為有些問題 (搶時間, 中斷時間 ) 會因為 online debug tools 的介入而導致這些 bug 不會出現 , 所以我都比較少使用 online debug tools.

但是如果有些演算法的問題 (之前在弄 touch button 的靈敏度調整) ,這時候有 online debug tools 就會方便多了.

所以還是將  GDB 加入吧 , 屆時看要怎要允運用在來看看吧 !!

按照官方網頁的說法 , untar , patch  和  ./configure --target=msp430  --program-prefix="msp430-"

當然 make 過程會發現一些 error ,一個是老問題 , texinfo 的版本問題. Patch 內容如下:
 
diff -Nura gdb-7.2-orignal/bfd/doc/bfd.texinfo gdb-7.2/bfd/doc/bfd.texinfo
--- gdb-7.2-orignal/bfd/doc/bfd.texinfo    2009-09-02 15:18:38.000000000 +0800
+++ gdb-7.2/bfd/doc/bfd.texinfo    2014-03-05 18:25:20.392761690 +0800
@@ -323,7 +323,7 @@
 @printindex cp

 @tex
-% I think something like @colophon should be in texinfo.  In the
+% I think something like @@colophon should be in texinfo.  In the
 % meantime:
 \long\def\colophon{\hbox to0pt{}\vfill
 \centerline{The body of this manual is set in}
@@ -334,7 +334,7 @@
 \centerline{{\sl\fontname\tensl\/}}
 \centerline{are used for emphasis.}\vfill}
 \page\colophon
-% Blame: doc@cygnus.com, 28mar91.
+% Blame: doc@@cygnus.com, 28mar91.
 @end tex

 @bye



另外出現一個 c file 的錯誤, 不過主要是 sizeof 的參數問題 , 看一下 c code 其目的是將struct stat 的內容值清除為 "0" , 所以 patch 內容如下:



diff -Nura gdb-7.2-orignal/bfd/bfdio.c gdb-7.2/bfd/bfdio.c
--- gdb-7.2-orignal/bfd/bfdio.c    2010-06-09 21:28:31.000000000 +0800
+++ gdb-7.2/bfd/bfdio.c    2014-03-05 18:35:25.113813617 +0800
@@ -577,7 +577,7 @@
 {
   struct bfd_in_memory *bim = (struct bfd_in_memory *) abfd->iostream;

-  memset (statbuf, 0, sizeof (statbuf));
+  memset (statbuf, 0, sizeof (struct stat ));
   statbuf->st_size = bim->size;

   return 0;


編譯 gdb 的最後一些 message :


make[5]: Entering directory `/home/jeff/msp430-toolchain/gdb/gdb-build/gdb'
make[6]: Entering directory `/home/jeff/msp430-toolchain/gdb/gdb-build/gdb/gnulib'
make  all-recursive
make[7]: Entering directory `/home/jeff/msp430-toolchain/gdb/gdb-build/gdb/gnulib'
make[8]: Entering directory `/home/jeff/msp430-toolchain/gdb/gdb-build/gdb/gnulib'
make[8]: Nothing to be done for `all-am'.
make[8]: Leaving directory `/home/jeff/msp430-toolchain/gdb/gdb-build/gdb/gnulib'
make[7]: Leaving directory `/home/jeff/msp430-toolchain/gdb/gdb-build/gdb/gnulib'
make[6]: Leaving directory `/home/jeff/msp430-toolchain/gdb/gdb-build/gdb/gnulib'
make[5]: Leaving directory `/home/jeff/msp430-toolchain/gdb/gdb-build/gdb'
if [ "`cd ../../gdb-7.2/gdb && pwd`" != "`pwd`" ] ; then \
      mkdir -p ./syscalls/ ; \
      list='gdb-syscalls.dtd ppc-linux.xml ppc64-linux.xml i386-linux.xml amd64-linux.xml sparc-linux.xml sparc64-linux.xml' ; \
       for file in $list ; do \
        f=../../gdb-7.2/gdb/syscalls//$file ; \
        if test -f $f ; then \
          /usr/bin/install -c -m 644 $f \
              ./syscalls/ ; \
        fi ; \
      done ; \
    fi ;
make[5]: Entering directory `/home/jeff/msp430-toolchain/gdb/gdb-build/gdb'
make[6]: Entering directory `/home/jeff/msp430-toolchain/gdb/gdb-build/gdb/doc'
make[6]: Nothing to be done for `all'.
make[6]: Leaving directory `/home/jeff/msp430-toolchain/gdb/gdb-build/gdb/doc'
make[5]: Leaving directory `/home/jeff/msp430-toolchain/gdb/gdb-build/gdb'
/bin/sh ../../gdb-7.2/gdb/../mkinstalldirs /home/jeff/msp430-toolchain/out/share
cats=""; for cat in $cats; do \
      lang=`basename $cat | sed 's/\.gmo$//'`; \
      if [ -f $cat ]; then :; \
      elif [ -f ../../gdb-7.2/gdb/$cat ]; then cat=../../gdb-7.2/gdb/$cat; \
      else continue; \
      fi; \
      dir=/home/jeff/msp430-toolchain/out/share/locale/$lang/LC_MESSAGES; \
      echo /bin/sh ../../gdb-7.2/gdb/../mkinstalldirs $dir; \
      /bin/sh ../../gdb-7.2/gdb/../mkinstalldirs $dir || exit 1; \
      echo /usr/bin/install -c -m 644 $cat $dir/gdb.mo; \
      /usr/bin/install -c -m 644 $cat $dir/gdb.mo; \
    done
transformed_name=`t='s&^&msp430-&'; \
              echo gdbtui | sed -e "$t"` ; \
        if test "x$transformed_name" = x; then \
          transformed_name=gdbtui ; \
        else \
          true ; \
        fi ; \
        /bin/sh ../../gdb-7.2/gdb/../mkinstalldirs /home/jeff/msp430-toolchain/out/bin ; \
        /usr/bin/install -c gdbtui \
            /home/jeff/msp430-toolchain/out/bin/$transformed_name ; \
        /bin/sh ../../gdb-7.2/gdb/../mkinstalldirs \
            /home/jeff/msp430-toolchain/out/share/man/man1 ; \
        /usr/bin/install -c -m 644 ../../gdb-7.2/gdb/gdb.1 \
            /home/jeff/msp430-toolchain/out/share/man/man1/$transformed_name.1
/bin/sh ../../gdb-7.2/gdb/../mkinstalldirs \
        /home/jeff/msp430-toolchain/out/share/gdb/syscalls/ ; \
    list='gdb-syscalls.dtd ppc-linux.xml ppc64-linux.xml i386-linux.xml amd64-linux.xml sparc-linux.xml sparc64-linux.xml' ; \
    for file in $list ; do \
      f=../../gdb-7.2/gdb/syscalls//$file ; \
      if test -f $f ; then \
        /usr/bin/install -c -m 644 $f \
            /home/jeff/msp430-toolchain/out/share/gdb/syscalls/ ; \
      fi ; \
    done ;
mkdir -p -- /home/jeff/msp430-toolchain/out/share/gdb/syscalls/
transformed_name=`t='s&^&msp430-&'; \
              echo gdb | sed -e "$t"` ; \
        if test "x$transformed_name" = x; then \
          transformed_name=gdb ; \
        else \
          true ; \
        fi ; \
        /bin/sh ../../gdb-7.2/gdb/../mkinstalldirs /home/jeff/msp430-toolchain/out/bin ; \
        /usr/bin/install -c gdb \
            /home/jeff/msp430-toolchain/out/bin/$transformed_name ; \
        /bin/sh ../../gdb-7.2/gdb/../mkinstalldirs \
            /home/jeff/msp430-toolchain/out/share/man/man1 ; \
        /usr/bin/install -c -m 644 ../../gdb-7.2/gdb/gdb.1 \
            /home/jeff/msp430-toolchain/out/share/man/man1/$transformed_name.1
make[5]: Entering directory `/home/jeff/msp430-toolchain/gdb/gdb-build/gdb'
make[6]: Entering directory `/home/jeff/msp430-toolchain/gdb/gdb-build/gdb/doc'
(test "ln -s" = "ln -s" && \
      ln -s ../../../gdb-7.2/gdb/doc/all-cfg.texi gdb-cfg.texi) || \
    ln ../../../gdb-7.2/gdb/doc/all-cfg.texi gdb-cfg.texi || \
    cp ../../../gdb-7.2/gdb/doc/all-cfg.texi gdb-cfg.texi
/bin/sh ../../../gdb-7.2/gdb/doc/../../mkinstalldirs /home/jeff/msp430-toolchain/out/share/info
 /usr/bin/install -c -m 644 ../../../gdb-7.2/gdb/doc/gdb.info /home/jeff/msp430-toolchain/out/share/info/gdb.info
 /usr/bin/install -c -m 644 ../../../gdb-7.2/gdb/doc/gdb.info-1 /home/jeff/msp430-toolchain/out/share/info/gdb.info-1
 /usr/bin/install -c -m 644 ../../../gdb-7.2/gdb/doc/gdb.info-2 /home/jeff/msp430-toolchain/out/share/info/gdb.info-2
 /usr/bin/install -c -m 644 ../../../gdb-7.2/gdb/doc/gdb.info-3 /home/jeff/msp430-toolchain/out/share/info/gdb.info-3
 /usr/bin/install -c -m 644 ../../../gdb-7.2/gdb/doc/gdb.info-4 /home/jeff/msp430-toolchain/out/share/info/gdb.info-4
 /usr/bin/install -c -m 644 ../../../gdb-7.2/gdb/doc/gdb.info-5 /home/jeff/msp430-toolchain/out/share/info/gdb.info-5
 /usr/bin/install -c -m 644 ../../../gdb-7.2/gdb/doc/gdb.info-6 /home/jeff/msp430-toolchain/out/share/info/gdb.info-6
 /usr/bin/install -c -m 644 ../../../gdb-7.2/gdb/doc/gdbint.info /home/jeff/msp430-toolchain/out/share/info/gdbint.info
 /usr/bin/install -c -m 644 ../../../gdb-7.2/gdb/doc/gdbint.info-1 /home/jeff/msp430-toolchain/out/share/info/gdbint.info-1
 /usr/bin/install -c -m 644 ../../../gdb-7.2/gdb/doc/gdbint.info-2 /home/jeff/msp430-toolchain/out/share/info/gdbint.info-2
 /usr/bin/install -c -m 644 ../../../gdb-7.2/gdb/doc/stabs.info /home/jeff/msp430-toolchain/out/share/info/stabs.info
 /usr/bin/install -c -m 644 ../../../gdb-7.2/gdb/doc/annotate.info /home/jeff/msp430-toolchain/out/share/info/annotate.info
 install-info --info-dir=/home/jeff/msp430-toolchain/out/share/info /home/jeff/msp430-toolchain/out/share/info/gdb.info
 install-info --info-dir=/home/jeff/msp430-toolchain/out/share/info /home/jeff/msp430-toolchain/out/share/info/gdbint.info
 install-info --info-dir=/home/jeff/msp430-toolchain/out/share/info /home/jeff/msp430-toolchain/out/share/info/stabs.info
 install-info --info-dir=/home/jeff/msp430-toolchain/out/share/info /home/jeff/msp430-toolchain/out/share/info/annotate.info
make[6]: Leaving directory `/home/jeff/msp430-toolchain/gdb/gdb-build/gdb/doc'
make[6]: Entering directory `/home/jeff/msp430-toolchain/gdb/gdb-build/gdb/testsuite'
make[6]: Nothing to be done for `install'.
make[6]: Leaving directory `/home/jeff/msp430-toolchain/gdb/gdb-build/gdb/testsuite'
make[5]: Leaving directory `/home/jeff/msp430-toolchain/gdb/gdb-build/gdb'
make[4]: Leaving directory `/home/jeff/msp430-toolchain/gdb/gdb-build/gdb'
make[3]: Nothing to be done for `install-target'.
make[3]: Leaving directory `/home/jeff/msp430-toolchain/gdb/gdb-build'
make[2]: Leaving directory `/home/jeff/msp430-toolchain/gdb/gdb-build'
make[1]: Leaving directory `/home/jeff/msp430-toolchain/gdb'

## Build target 'all' is completed.
=> Elapsed time = 10m 33s


來看看 msp430-gdb 的版本吧:

[jeff@localhost msp430-toolchain]$ pwd
/home/jeff/msp430-toolchain
[jeff@localhost msp430-toolchain]$ ./out/bin/msp430-gdb --version
GNU gdb (GDB) 7.2
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-unknown-linux-gnu --target=msp430".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
[jeff@localhost msp430-toolchain]$








Step 2 build "gcc"

之前的 Makefile 環境都架設好了 , 所以只要放入 gcc-core-4.6.3.tar.bz2 , 和在 ./patch/gcc-4.6.3/ 內放入三個 msp430 gcc 的 patch file 就可以進行編譯了.

不過要先執行  ./contrib/download_prerequisites  這個,這個主要會將 gcc 所需要的 gmp , mpfr 等所相依的原始檔(source  code ) 下載在 gcc-core-4.6.3 的資料夾內.

接著就按照 官方網頁的方式進行 configure.
./configure  --target=msp430  --enable-languages=c  --program-prefix="msp430-"

當然在 make 過程會發現 texinfo 版本問題 , 所以需要修改一下 texi 檔案,全部的 patch 內容如下:

diff -Nura gcc-4.6.3-orignal/gcc/doc/cppopts.texi gcc-4.6.3/gcc/doc/cppopts.texi
--- gcc-4.6.3-orignal/gcc/doc/cppopts.texi    2010-12-20 15:26:12.000000000 +0800
+++ gcc-4.6.3/gcc/doc/cppopts.texi    2014-03-05 02:36:45.304027556 +0800
@@ -769,7 +769,7 @@
 Enable special code to work around file systems which only permit very
 short file names, such as MS-DOS@.

-@itemx --help
+@item --help
 @itemx --target-help
 @opindex help
 @opindex target-help
diff -Nura gcc-4.6.3-orignal/gcc/doc/generic.texi gcc-4.6.3/gcc/doc/generic.texi
--- gcc-4.6.3-orignal/gcc/doc/generic.texi    2011-01-02 09:30:55.000000000 +0800
+++ gcc-4.6.3/gcc/doc/generic.texi    2014-03-05 02:56:07.343415078 +0800
@@ -1415,13 +1415,13 @@
 not matter.  The type of the operands and that of the result are
 always of @code{BOOLEAN_TYPE} or @code{INTEGER_TYPE}.

-@itemx POINTER_PLUS_EXPR
+@item POINTER_PLUS_EXPR
 This node represents pointer arithmetic.  The first operand is always
 a pointer/reference type.  The second operand is always an unsigned
 integer type compatible with sizetype.  This is the only binary
 arithmetic operand that can operate on pointer types.

-@itemx PLUS_EXPR
+@item PLUS_EXPR
 @itemx MINUS_EXPR
 @itemx MULT_EXPR
 These nodes represent various binary arithmetic operations.
diff -Nura gcc-4.6.3-orignal/gcc/doc/invoke.texi gcc-4.6.3/gcc/doc/invoke.texi
--- gcc-4.6.3-orignal/gcc/doc/invoke.texi    2012-01-04 00:43:38.000000000 +0800
+++ gcc-4.6.3/gcc/doc/invoke.texi    2014-03-05 02:53:49.857753175 +0800
@@ -165,7 +165,7 @@
 -pipe  -pass-exit-codes  @gol
 -x @var{language}  -v  -###  --help@r{[}=@var{class}@r{[},@dots{}@r{]]}  --target-help  @gol
 --version -wrapper @@@var{file} -fplugin=@var{file} -fplugin-arg-@var{name}=@var{arg}  @gol
--fdump-ada-spec@r{[}-slim@r{]}} -fdump-go-spec=@var{file}
+-fdump-ada-spec@r{[}-slim@r{]} -fdump-go-spec=@var{file} }

 @item C Language Options
 @xref{C Dialect Options,,Options Controlling C Dialect}.
@@ -5085,11 +5085,11 @@
 @option{-fdump-rtl-ce3} enable dumping after the three
 if conversion passes.

-@itemx -fdump-rtl-cprop_hardreg
+@item -fdump-rtl-cprop_hardreg
 @opindex fdump-rtl-cprop_hardreg
 Dump after hard register copy propagation.

-@itemx -fdump-rtl-csa
+@item -fdump-rtl-csa
 @opindex fdump-rtl-csa
 Dump after combining stack adjustments.

@@ -5100,11 +5100,11 @@
 @option{-fdump-rtl-cse1} and @option{-fdump-rtl-cse2} enable dumping after
 the two common sub-expression elimination passes.

-@itemx -fdump-rtl-dce
+@item -fdump-rtl-dce
 @opindex fdump-rtl-dce
 Dump after the standalone dead code elimination passes.

-@itemx -fdump-rtl-dbr
+@item -fdump-rtl-dbr
 @opindex fdump-rtl-dbr
 Dump after delayed branch scheduling.

@@ -5149,7 +5149,7 @@
 @opindex fdump-rtl-initvals
 Dump after the computation of the initial value sets.

-@itemx -fdump-rtl-into_cfglayout
+@item -fdump-rtl-into_cfglayout
 @opindex fdump-rtl-into_cfglayout
 Dump after converting to cfglayout mode.

@@ -5179,7 +5179,7 @@
 @opindex fdump-rtl-rnreg
 Dump after register renumbering.

-@itemx -fdump-rtl-outof_cfglayout
+@item -fdump-rtl-outof_cfglayout
 @opindex fdump-rtl-outof_cfglayout
 Dump after converting from cfglayout mode.

@@ -5191,7 +5191,7 @@
 @opindex fdump-rtl-postreload
 Dump after post-reload optimizations.

-@itemx -fdump-rtl-pro_and_epilogue
+@item -fdump-rtl-pro_and_epilogue
 @opindex fdump-rtl-pro_and_epilogue
 Dump after generating the function pro and epilogues.


編譯過程最後一些訊息:


make[8]: Entering directory `/home/jeff/msp430-toolchain/gcc/gcc-build/msp430/mcpu-430x/libquadmath'
true  DO=install multi-do # make
test -z "/home/jeff/msp430-toolchain/out/msp430/lib/mcpu-430x" || /usr/bin/mkdir -p "/home/jeff/msp430-toolchain/out/msp430/lib/mcpu-430x"
test -z "/home/jeff/msp430-toolchain/out/share/info" || /usr/bin/mkdir -p "/home/jeff/msp430-toolchain/out/share/info"
 /usr/bin/install -c -m 644 ../../../../gcc-4.6.3/libquadmath/libquadmath.info '/home/jeff/msp430-toolchain/out/share/info'
 install-info --info-dir='/home/jeff/msp430-toolchain/out/share/info' '/home/jeff/msp430-toolchain/out/share/info/libquadmath.info'
test -z "" || /usr/bin/mkdir -p ""
make[8]: Leaving directory `/home/jeff/msp430-toolchain/gcc/gcc-build/msp430/mcpu-430x/libquadmath'
make[7]: Leaving directory `/home/jeff/msp430-toolchain/gcc/gcc-build/msp430/mcpu-430x/libquadmath'
make[7]: Entering directory `/home/jeff/msp430-toolchain/gcc/gcc-build/msp430/mmpy-16/libquadmath'
true  DO=all multi-do # make
make[8]: Entering directory `/home/jeff/msp430-toolchain/gcc/gcc-build/msp430/mmpy-16/libquadmath'
true  DO=install multi-do # make
test -z "/home/jeff/msp430-toolchain/out/msp430/lib/mmpy-16" || /usr/bin/mkdir -p "/home/jeff/msp430-toolchain/out/msp430/lib/mmpy-16"
test -z "/home/jeff/msp430-toolchain/out/share/info" || /usr/bin/mkdir -p "/home/jeff/msp430-toolchain/out/share/info"
 /usr/bin/install -c -m 644 ../../../../gcc-4.6.3/libquadmath/libquadmath.info '/home/jeff/msp430-toolchain/out/share/info'
 install-info --info-dir='/home/jeff/msp430-toolchain/out/share/info' '/home/jeff/msp430-toolchain/out/share/info/libquadmath.info'
test -z "" || /usr/bin/mkdir -p ""
make[8]: Leaving directory `/home/jeff/msp430-toolchain/gcc/gcc-build/msp430/mmpy-16/libquadmath'
make[7]: Leaving directory `/home/jeff/msp430-toolchain/gcc/gcc-build/msp430/mmpy-16/libquadmath'
make[7]: Entering directory `/home/jeff/msp430-toolchain/gcc/gcc-build/msp430/mcpu-430x/mmpy-16/libquadmath'
true  DO=all multi-do # make
make[8]: Entering directory `/home/jeff/msp430-toolchain/gcc/gcc-build/msp430/mcpu-430x/mmpy-16/libquadmath'
true  DO=install multi-do # make
test -z "/home/jeff/msp430-toolchain/out/msp430/lib/mcpu-430x/mmpy-16" || /usr/bin/mkdir -p "/home/jeff/msp430-toolchain/out/msp430/lib/mcpu-430x/mmpy-16"
test -z "/home/jeff/msp430-toolchain/out/share/info" || /usr/bin/mkdir -p "/home/jeff/msp430-toolchain/out/share/info"
 /usr/bin/install -c -m 644 ../../../../../gcc-4.6.3/libquadmath/libquadmath.info '/home/jeff/msp430-toolchain/out/share/info'
 install-info --info-dir='/home/jeff/msp430-toolchain/out/share/info' '/home/jeff/msp430-toolchain/out/share/info/libquadmath.info'
test -z "" || /usr/bin/mkdir -p ""
make[8]: Leaving directory `/home/jeff/msp430-toolchain/gcc/gcc-build/msp430/mcpu-430x/mmpy-16/libquadmath'
make[7]: Leaving directory `/home/jeff/msp430-toolchain/gcc/gcc-build/msp430/mcpu-430x/mmpy-16/libquadmath'
make[6]: Leaving directory `/home/jeff/msp430-toolchain/gcc/gcc-build/msp430/libquadmath'
test -z "/home/jeff/msp430-toolchain/out/msp430/lib" || /usr/bin/mkdir -p "/home/jeff/msp430-toolchain/out/msp430/lib"
test -z "/home/jeff/msp430-toolchain/out/share/info" || /usr/bin/mkdir -p "/home/jeff/msp430-toolchain/out/share/info"
 /usr/bin/install -c -m 644 ../../../gcc-4.6.3/libquadmath/libquadmath.info '/home/jeff/msp430-toolchain/out/share/info'
 install-info --info-dir='/home/jeff/msp430-toolchain/out/share/info' '/home/jeff/msp430-toolchain/out/share/info/libquadmath.info'
test -z "" || /usr/bin/mkdir -p ""
make[5]: Leaving directory `/home/jeff/msp430-toolchain/gcc/gcc-build/msp430/libquadmath'
make[4]: Leaving directory `/home/jeff/msp430-toolchain/gcc/gcc-build/msp430/libquadmath'
make[3]: Leaving directory `/home/jeff/msp430-toolchain/gcc/gcc-build'
make[2]: Leaving directory `/home/jeff/msp430-toolchain/gcc/gcc-build'
make[1]: Leaving directory `/home/jeff/msp430-toolchain/gcc'

## Build target 'all' is completed.
=> Elapsed time = 10m 59s



沒問題 , 完工...看看msp430-gcc 的版本訊息吧, 如下"

[jeff@localhost bin]$ pwd
/home/jeff/msp430-toolchain/out/bin
[jeff@localhost bin]$ ./msp430-gcc --version
msp430-gcc (GCC) 4.6.3 20120301 (mspgcc LTS 20120406 unpatched)
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


2014年3月3日 星期一

Step 1 build "binutlis".

按照上篇文章中的 參考網頁, 將基本的source code 和 msp430 的 patch file 下載.
我的習慣,自己寫一個 Makefile 的 source tree 方式, 將source code 放到特定位置, 然後撰寫Makefile , 屆時只要下指令 "make" 就會全自動編譯好.
不多說 , 進行第一步吧 ... binutils 的編譯.

@@ 問題來了 , 馬上 build error . 經過幾天的 google 後發現應改是 texinfo 版本太新.

 還好在 https://sourceware.org/bugzilla/show_bug.cgi?id=15212#c3 中找到一些 patch 的訊息.

經過修改,沒問題了,第一步....可以編譯 binutils 了.

最後一段編譯訊息如下:

 /usr/bin/install -c -m 644 'ld.1' '/home/jeff/msp430-toolchain/out/share/man/man1/msp430-ld.1'
make[7]: Leaving directory `/home/jeff/msp430-toolchain/binutils/binutils-build/ld'
make[6]: Leaving directory `/home/jeff/msp430-toolchain/binutils/binutils-build/ld'
make[5]: Leaving directory `/home/jeff/msp430-toolchain/binutils/binutils-build/ld'
make[4]: Leaving directory `/home/jeff/msp430-toolchain/binutils/binutils-build/ld'
make[4]: Entering directory `/home/jeff/msp430-toolchain/binutils/binutils-build/libiberty'
make[5]: Entering directory `/home/jeff/msp430-toolchain/binutils/binutils-build/libiberty/testsuite'
make[5]: Nothing to be done for `all'.
make[5]: Leaving directory `/home/jeff/msp430-toolchain/binutils/binutils-build/libiberty/testsuite'
/bin/sh ../../binutils-2.21.1/libiberty/../mkinstalldirs /home/jeff/msp430-toolchain/out/lib/`gcc  -print-multi-os-directory`
mkdir -p -- /home/jeff/msp430-toolchain/out/lib/../lib64
/usr/bin/install -c -m 644 ./libiberty.a /home/jeff/msp430-toolchain/out/lib/`gcc  -print-multi-os-directory`/./libiberty.an
( cd /home/jeff/msp430-toolchain/out/lib/`gcc  -print-multi-os-directory` ; chmod 644 ./libiberty.an ;ranlib ./libiberty.an )
mv -f /home/jeff/msp430-toolchain/out/lib/`gcc  -print-multi-os-directory`/./libiberty.an /home/jeff/msp430-toolchain/out/lib/`gcc  -print-multi-os-directory`/./libiberty.a
if test -n ""; then \
      case "" in \
        /*)    thd=;; \
        *)     thd=/home/jeff/msp430-toolchain/out/include/;; \
      esac; \
      /bin/sh ../../binutils-2.21.1/libiberty/../mkinstalldirs ${thd}; \
      for h in ../../binutils-2.21.1/libiberty/../include/ansidecl.h ../../binutils-2.21.1/libiberty/../include/demangle.h ../../binutils-2.21.1/libiberty/../include/dyn-string.h ../../binutils-2.21.1/libiberty/../include/fibheap.h ../../binutils-2.21.1/libiberty/../include/floatformat.h ../../binutils-2.21.1/libiberty/../include/hashtab.h ../../binutils-2.21.1/libiberty/../include/libiberty.h ../../binutils-2.21.1/libiberty/../include/objalloc.h ../../binutils-2.21.1/libiberty/../include/partition.h ../../binutils-2.21.1/libiberty/../include/safe-ctype.h ../../binutils-2.21.1/libiberty/../include/sort.h ../../binutils-2.21.1/libiberty/../include/splay-tree.h; do \
        /usr/bin/install -c -m 644 $h ${thd}; \
      done; \
    fi
make[5]: Entering directory `/home/jeff/msp430-toolchain/binutils/binutils-build/libiberty/testsuite'
make[5]: Nothing to be done for `install'.
make[5]: Leaving directory `/home/jeff/msp430-toolchain/binutils/binutils-build/libiberty/testsuite'
make[4]: Leaving directory `/home/jeff/msp430-toolchain/binutils/binutils-build/libiberty'
make[3]: Nothing to be done for `install-target'.
make[3]: Leaving directory `/home/jeff/msp430-toolchain/binutils/binutils-build'
make[2]: Leaving directory `/home/jeff/msp430-toolchain/binutils/binutils-build'
make[1]: Leaving directory `/home/jeff/msp430-toolchain/binutils'
 

## Build target 'all' is completed.
=> Elapsed time = 1m 43s



2014年2月5日 星期三

開始自己建立 GCC for MSP430 .

因為工作需要, 所以使用了 IAR 試用版 , 不過一個月時間到了 , 就沒有辦法使用了 !!
想說 , MSP430 已經問世好久了 , 應該有 open source 的 complier 了吧 !!

Google 了一下 ,還真的有 ,  不過 本人比較喜歡 Fedora , 並且 好像找不到已經編譯好的 bin file .只有教導如何自行編譯 , 好吧 ,動手自己做做看 !!

Reference :
 
http://sourceforge.net/apps/mediawiki/mspgcc/index.php?title=Install:fromsource
http://sourceforge.net/projects/mspgcc/files/mspgcc/
http://sourceforge.net/projects/mspgcc/files/Patches/LTS/
http://sourceforge.net/projects/mspgcc/files/Patches/
http://sourceforge.net/apps/mediawiki/mspgcc/index.php?title=MSPGCC_Wiki
http://merlin.fit.vutbr.cz/FITkit/docs/en/navody/mspgcclinux.html