先說一下我的軟硬件環境:
硬件:
一塊評估板 Atmel SAMD21 xplained pro 沒有普通的 Jtag 口, 它提供了 EDBG USB 口, 支持 CMSIS-DAP, OpenOCD 又支持 CMSIS-DAP 接口.
開發軟件:
VS 2013+VisualGDB+OpenOCD, VisualGDB 自帶的 OpenOCD 不支持 SAMD21,最新的 OpenOCD 支持;
以前圖省事經常從網上下載最新的 OpenOCD 執行文件,這兩天估計這個原因中招了.
操作系統: Win7 x64
痛定思痛,決心從源代碼編譯 OpenOCD ,不想用 Cygwin 因為帶一堆動態庫,采用 MinGW 編譯成單個執行文件,這里記錄下整個過程,方便有需要的人.
1.預先安裝 git for windows 1.9.4 https://github.com/msysgit/msysg ... preview20140815.exe
2.下載 MinGW 安裝程序
mingw-get-setup.exe http://sourceforge.net/projects/ ... wnload?source=files
運行 mingw-get-setup.exe 選擇一個安裝目錄, 比如 F:/MinGW
注意只選擇 Basic Setup 的 msys-base 環境,不要安裝 mingw 的 gcc 開發工具.
然后在 All packages 選擇:
msys-autoconf
msys-autogen
msys-automake
msys-libtool
msys-rxvt
msys-unzip
msys-wget
msys-vim
的 bin doc lic
最后在 install 菜單選擇 Apply change 在對話框中選擇 apply 等待安裝完成
安裝完成后,應該有 F:/MinGW/msys/1.0/msys.bat 文件,
在桌面創建快捷方式 msys, 目標: F:\MingW\msys\1.0\msys.bat --rxvt 起始位置:F:\MinGW\msys\1.0\bin
這個快捷方式有兩個優點,
a:在 msys 環境中鼠標選擇的內容自動復制到粘貼板,
b:支持 shfit+ins 粘貼
運行這個快捷方式應該出現如下界面:
3.安裝 mingw gcc 工具鏈和開發環境,參考網址: http://win-builds.org/1.4.0/msys-cygwin.html
運行第二步創建的快捷方式,進入 mingw 環境,以后除指明,均在 msys 環境下:
$wget http://win-builds.org/1.4.0/yypkg-1.4.0.exe
如下:
--2014-09-01 21:46:17-- http://win-builds.org/1.4.0/yypkg-1.4.0.exe
Resolving win-builds.org... 91.121.71.147
Connecting to win-builds.org|91.121.71.147|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2348046 (2.2M) [application/x-msdos-program]
Saving to: `yypkg-1.4.0.exe'
100%[=====================================>] 2,348,046 6.63K/s in 2m 2s =
2014-09-01 21:48:51 (18.8 KB/s) - `yypkg-1.4.0.exe' saved [2348046/2348046]
運行:
$ ./yypkg-1.4.0.exe --deploy --host msys
會有三個問題,
第一個問題,是否安裝 i686(win32) 版本gcc, 輸入: yes
第二個問題, 是否安裝 x64 版本gcc,我們用不着, 輸入: no
第三個問題, 無法自動確定 MinGW 安裝位置, 要求輸入 MinGW 安裝位置全路徑, 我的是 F:/MinGW/msys/1.0 ,要根據你自己的位置選擇, 輸入:F:/MinGW/msys/1.0
Using mirror "http://win-builds.org/1.4.0".
Do you want to install for i686?
Chose one of yes, no (case-insensitive).
yes
Do you want to install for x86_64?
Chose one of yes, no (case-insensitive).
no
Couldn't automatically find the MSYS installation path.
Please provide it in full as a Windows path with forward-slashes.
For example C:/MinGW/msys/1.0; toolchain will be put in C:/MSYS/opt/windows_32.
(environment variables of the form ${FOO} are understood).
F:/MinGW/msys/1.0
Installing win-builds 32 in "F:/MinGW/msys/1.0\\/opt/windows_32" for "MSYS".
Press return to continue or Ctrl-C to abort.
按 回車 開始
安裝好后切換到 win-builds 開發環境:
. /opt/windows_32/bin/win-builds-switch 32
也可以添加到 .profile 設置為默認開發環境
echo '. /opt/windows_32/bin/win-builds-switch 32' >> ~/.profile
順便加上 ll 和 dir 命令
echo "alias dir='ls -la --color=auto'" >> ~/.profile
echo "alias ll='ls -la --color=auto'" >> ~/.profile
source .profile
切換到 win-builds 環境,輸入 gcc --version 應該輸出:
$ gcc --version
gcc.exe (GCC) 4.8.2
Copyright (C) 2013 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.
4.安裝 pkg-config 包管理系統,網上很多windos下編譯 OpenOCD 出問題,很多和 pkg-config 管理系統有關
這里采用 sf.net 上的 pkg-config lite 版本
$wget http://sourceforge.net/projects/ ... wnload?source=files -O pkgcfglite.zip
$unzip pkgcfglite.zip -d ./pkgcfg
不要忘了復制 pkg-config m4 文件
$ cp ./pkgcfg/pkg-config-lite-0.28-1/share/aclocal/pkg.m4 /share/aclocal/
5. OpenOCD CMSIS-DAP 需要 libusb-1.0 HIDAPI 庫
下載 hidapi:
$ cd ~
$ git clone https://github.com/signal11/hidapi.git
$ cd hidapi
$ ./bootstrap
$ ./configure
when undefined reference to `_spawnv'
./configure --disable-shared
This builds static libraries only, not DLLs.
$ make
$ make install
$ cd ~
會把 hidapi 庫安裝到 /usr/local/lib 目錄下,
$ ll /usr/local/lib 應是這樣:
$ ll /usr/local/lib
total 47
drwxr-xr-x 3 Home Administrators 4096 Sep 2 00:01 .
drwxr-xr-x 6 Home Administrators 0 Sep 2 00:01 ..
-rw-r--r-- 1 Home Administrators 29134 Sep 2 00:01 libhidapi.a
-rw-r--r-- 1 Home Administrators 12380 Sep 2 00:00 libhidapi.dll.a
-rw-r--r-- 1 Home Administrators 917 Sep 2 00:01 libhidapi.la
drwxr-xr-x 2 Home Administrators 0 Sep 2 00:01 pkgconfig
下載 libusb-1.0
$ cd ~
$ wget http://sourceforge.net/projects/ ... wnload?source=files -O libusb-1.0.19.tar.bz2
$ tar xf libusb-1.0.19.tar.bz2
$ cd libusb-1.0.19
$ ./configure
$ make
$ make install
同樣的 make install 把 libusb-1.0 庫安裝到了 /usr/local/lib 中
$ ll /usr/local/lib
total 660
drwxr-xr-x 3 Home Administrators 4096 Sep 2 00:10 .
drwxr-xr-x 6 Home Administrators 0 Sep 2 00:01 ..
-rw-r--r-- 1 Home Administrators 29134 Sep 2 00:01 libhidapi.a
-rw-r--r-- 1 Home Administrators 12380 Sep 2 00:00 libhidapi.dll.a
-rw-r--r-- 1 Home Administrators 917 Sep 2 00:01 libhidapi.la
-rw-r--r-- 1 Home Administrators 493218 Sep 2 00:10 libusb-1.0.a
-rw-r--r-- 1 Home Administrators 132304 Sep 2 00:10 libusb-1.0.dll.a
-rw-r--r-- 1 Home Administrators 911 Sep 2 00:10 libusb-1.0.la
drwxr-xr-x 2 Home Administrators 0 Sep 2 00:10 pkgconfig
OpenOCD 編譯時默認連接 hidapi 和 libusb-1.0 的動態庫,因此 把 靜態庫 覆蓋 動態庫
$ cp /usr/local/lib/libhidapi.a /usr/local/lib/libhidapi.dll.a
$ cp /usr/local/lib/libusb-1.0.a /usr/local/lib/libusb-1.0.dll.a
6.下載 OpenOCD
OponOCD 有幾個源,我用的是這個
$ cd ~
$ git clone http://openocd.zylin.com/p/openocd.git
$ cd openocd
$ ./bootstrap
$ ./configure PKG_CONFIG_PATH=/usr/local/lib/pkgconfig LDFLAGS="-Wl,-s"
$ make
然后就在 src 目錄下出現了無dll依賴的 openocd.exe 大概 2M
退出 msys 環境, 在 win7 命令行模式下:
F:
cd F:/mingw/msys/1.0/home/Home/openocd/src
openocd.exe -s ../tcl -f interface/cmsis-dap.cfg -f board/atmel_samd21_xplained_pro.cfg
Open On-Chip Debugger 0.9.0-dev-00131-gbd0409a (2014-09-02-00:31)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.sourceforge.net/doc/doxygen/bugs.html
Info : only one transport option; autoselect 'cmsis-dap'
Warn : Interface already configured, ignoring
adapter speed: 500 kHz
adapter_nsrst_delay: 100
cortex_m reset_config sysresetreq
Info : CMSIS-DAP: SWD Supported
Info : CMSIS-DAP: Interface Initialised (SWD)
Info : CMSIS-DAP: FW Version = 01.1B.00FC
Info : SWCLK/TCK = 1 SWDIO/TMS = 1 TDI = 1 TDO = 1 nTRST = 0 nRESET = 1
Info : DAP_SWJ Sequence (reset: 50+ '1' followed by 0)
Info : CMSIS-DAP: Interface ready
Info : clock speed 500 kHz
Info : IDCODE 0x0bc11477
Info : at91samd21j18.cpu: hardware has 4 breakpoints, 2 watchpoints
至此 OpenOCD 編譯完成.