続きです。
2.stlinkのインストール
gitでリポジトリをクローンします。
~/stm32-linux $ mkdir stlink ~/stm32-linux $ cd stlink/ ~/stm32-linux/stlink $ git clone git://github.com/texane/stlink.git Cloning into stlink... remote: Counting objects: 3515, done. remote: Compressing objects: 100% (1228/1228), done. remote: Total 3515 (delta 2276), reused 3434 (delta 2204) Receiving objects: 100% (3515/3515), 12.63 MiB | 45 KiB/s, done. Resolving deltas: 100% (2276/2276), done. ~/stm32-linux/stlink $
パッケージマネージャで libusb-1.0 と pkg-config がインストールされていることを確認する必要があります。自分の場合は一見libusb-1.0がインストールされているように見えたのですが、実際にmakeするとエラーになったので、
$ sudo apt-get install libusb-1.0
でlibusb-1.0をインストールしました。
その後、コンパイルします。コンパイルは make 一発です。
~/stm32-linux/stlink/stlink $ make
STM32 Value Line Discoveryを取り付けます。・・・が、こいつのSCSIエミュレーションはだめだめらしいので、システムから無視させるために、
~$ sudo modprobe -r usb-storage && modprobe usb-storage quirks=483:3744:i
とすることになっていますが、エラーになってしまいます。しかも、アンマウントしても、すぐに復活してしまいます。恒久策としては
~$ sudo cp stlink_v1.modprobe.conf /etc/modprobe.d ~$ sudo modprobe -r usb-storage && modprobe usb-storage
なのですが、それでもエラーになってしまいますので、一旦強制的に挿抜しました。
次に、udevルールをセットアップします。
~/stm32-linux/stlink/stlink $ sudo cp 49-stlinkv*.rules /etc/udev/rules.d ~/stm32-linux/stlink/stlink $ sudo udevadm control --reload rules
ここでSTM32 Value Line Discoveryを取り付けると、/devの下が
~/stm32-linux/stlink/stlink $ ls -la /dev/stlink*
lrwxrwxrwx 1 root root 15 2012-02-08 02:40 /dev/stlinkv1_2 -> bus/usb/001/005
というようになります。
3.弄ってみる
gdbserverを起動してみます。
~/stm32-linux/stlink/stlink $ ./gdbserver/st-util -1 /dev/stlinkv1_2
non-option ARGV-elements: /dev/stlinkv1_2
2012-02-08T02:44:28 INFO src/stlink-sg.c: Current mode unusable, trying to get back to a useful state...
2012-02-08T02:44:28 WARN src/stlink-sg.c: received tag 0 but expected 3
2012-02-08T02:44:28 INFO src/stlink-common.c: Loading device parameters....
2012-02-08T02:44:28 INFO src/stlink-common.c: Device connected is: F1 Medium-density Value Line device, id 0x10016420
2012-02-08T02:44:28 INFO src/stlink-common.c: SRAM size: 0x2000 bytes (8 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes
2012-02-08T02:44:28 INFO src/stlink-sg.c: Successfully opened a stlink v1 debugger
Chip ID is 00000420, Core ID is 1ba01477.
KARL - should read back as 0x03, not 60 02 00 00
init watchpoints
Listening at *:4242...
とりあえず正しく認識して、gdbserverが起動しているようです。
4.何か動かしてみる
gdbserverが動いたままの状態にして、tutorialに沿って、Lチカのサンプルを動かしてみます。
まず、サンプルプログラムをコンパイルします。(赤字が入力箇所です)
~/stm32-linux/stlink/stlink/example/blink $ PATH=~/sat/bin:$PATH ~/stm32-linux/stlink/stlink/example/blink $ make arm-none-eabi-gcc -g -O2 -mlittle-endian -mthumb -ffreestanding -nostdlib -nostdinc -Wl,-Ttext,0x20000000 -Wl,-e,0x20000000 -mcpu=cortex-m3 -DCONFIG_STM32VL_DISCOVERY=1 main.c -o blink_32VL.elf arm-none-eabi-gcc -g -O2 -mlittle-endian -mthumb -ffreestanding -nostdlib -nostdinc -Wl,-Ttext,0x20000000 -Wl,-e,0x20000000 -mcpu=cortex-m3 -DCONFIG_STM32L_DISCOVERY main.c -o blink_32L.elf arm-none-eabi-gcc -g -O2 -mlittle-endian -mthumb -ffreestanding -nostdlib -nostdinc -Wl,-Ttext,0x20000000 -Wl,-e,0x20000000 -mcpu=cortex-m4 -DCONFIG_STM32F4_DISCOVERY=1 main.c -o blink_F4.elf main.c:83:6: warning: conflicting types for 'main' main.c:53:2: note: previous implicit declaration of 'main' was here
次に、gdbserverに接続して、ダウンロード&実行します。
~/stm32-linux/stlink/stlink/example/blink $ ~/sat/bin/arm-none-eabi-gdb GNU gdb (GDB) 7.3.1 Copyright (C) 2011 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=arm-none-eabi". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>. (gdb) target extended localhost:4242 Remote debugging using localhost:4242 0x08000b4c in ?? () (gdb) load blink_32VL.elf Loading section .text, size 0x40 lma 0x20000000 Start address 0x20000000, load size 64 Transfer rate: 810 bytes/sec, 64 bytes/write. (gdb) continue Continuing. Cannot access memory at address 0x7bf35cc8
ボード上のLEDがチカチカし始めましたので成功です。