STM32 Value Line DiscoveryをLinuxで開発する(2)

続きです。

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がチカチカし始めましたので成功です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)