ページ更新: 2014-06-09 (月) (2422日前)
(2014-05-07 新規作成)
目次 情報源 #[編集]FM3 USB スティックボード #
sk-fm3-48pmc-usbstick.pdf より: 開発環境 IAR Embedded Workbench [編集]Spansion FM3 #
μT-Kernel #
OpenOCD #
他 #
メモ #[編集]開発用ソフトウェアのセットアップ (Windows 7 Professional 64bit 編) (2014-05-15) #注意: SK-FM3-48PMC-USBSTICK紹介資料, p.2, ■仕様 によると、「64bit Windows7等一部OSには対応しておりません。」とのこと。 [編集]問題 (2014-05-15) #Windows 7 Professional 64bit4vm (on VMware workstation 9.0.3) に入れてみたところ、以下の物以外はインストールできた。 1. Fujitsu OpenOCD Start のドライバー Install Driver で libusb 32bit版をインストールしようとする。 libusb-win32 installer (v1.2.6.0) installing inf Driver\libusb\Fujitsu-OpenOCD-USB.inf.. installing device vid_0403&pid_6010&mi_00.. 「Test」で openocd-0.6.1.exe が起動されるが、FTDI デバイスに接続できない。 ####### START DEBUG: 2014/05/15 23:55:50####### Start: .\openocd-0.6.1.exe Start with parameters: -f .\sk-fm3-100pmc-mb9afb44n.cfg Open On-Chip Debugger 0.6.1 (2012-10-07-10:34) Licensed under GNU GPL v2 For bug reports, read http://openocd.sourceforge.net/doc/doxygen/bugs.html Info : only one transport option; autoselect 'jtag' jtag_ntrst_delay: 500 trst_and_srst separate srst_gates_jtag trst_push_pull srst_open_drain adapter speed: 400 kHz cortex_m3 reset_config sysresetreq Error: unable to open ftdi device: device not found in procedure 'init' ####### END: 2014/05/15 23:55:51#######[編集] 1. セットアップ #[編集] 1.1 CD-ROM\setup.exe #起動 - バージョンは「V14」だった。 インストール先 セキュリティ警告 (数回表示される) インストール後 [編集] 1.2 OpenOCD Starter のセットアップ #[編集] 1.3 Serial Port Viewer のセットアップ #[編集] 1.4 USB DIRECT Flash Programmer のセットアップ #[編集] 1.5 OpenOCD GUI #(ドライバの自動インストールのスクリーンショットは撮り忘れた) [編集]1.6 OpenOCD Driver #
2. 動作確認 #[編集]2.1 PROG #FM3 USBスティックを付属のUSBケーブルでPCに繋いで、VMwareの仮想PCに接続する: (たぶん、このときはスイッチをPROGに切り替えていたと思う) [編集]2.2 USBホストモード #FM3 USBスティックをPCに繋いで、VMwareの仮想PCに接続する: (たぶん、このときはスイッチをRUNに切り替えていたと思う) デバイスマネージャ: Serial Port Viewer を起動する。ポートは「USB Serial Port」のうち番号の大きいほうらしい: MIDIキーボードをつなげて見た。リセットボタンを押すごとに、起動メッセージが表示される: USBマウスを繋げると、なぜかUSB Keyboardと誤認する: USBメモリを繋げると、ちゃんと認識した: [編集] 2.3 USBファンクション動作確認 #デモプログラム Fujitsu_UsbCom_Demo.exe が「セットアップガイド」で示された場所に見つからないので、検索した: デモプログラムを起動して操作した。特に問題なくLED, Button, Light Sensor が動作した: [編集] UCT μT-Kernel 1.01.02 Software Package のビルド (未完) #参考: 注意: Cygwin は以前からインストールした物を更新して用いたので、以下に示すパッケージだけでは足りないかも知れない [編集]ショートカット #以下に、作業をできるだけ Cygwin Terminalへのコピー&ペーストで済ませられるようにしたときの手順を示す。 なお、後に述べる手順は調査を兼ねているために、順番が異なるし、必要最小限のものしか入れていない。 1. UCT_uTK1.01.02SoftwarePackage.zip をダウンロードする。アカウント登録とメールアドレスが必要(ダウンロードURLはメールで通知されるため)。 2. Cygwin x86 をインストールする。 (参照: Cygwin/インストール) setup-x86.exe をダウンロードして起動し、以下のパッケージをインストールする * Base カテゴリー * make, perl, unzip Cygwin Terminal を起動する。 Cygwin Terminal の起動に時間がかかるのがいやなので、bash_completion を無効にする: cd /etc/profile.d mv bash_completion.sh bash_completion.sh.disable 3. Cygwin の ~/.bash_profile の末尾に以下の行を追加する。 (Windows 7の場合、C:\cygwin\home\<ユーザー名>\.bash_profile を開いて編集する。改行をLFにできるエディタを用いること) export GNU_BD=/usr/local/cortex-m3/tool/Cygwin-i686 export GNUARM_2=$GNU_BD/arm-none-eabi export BD=/usr/local/te/utkernel_source なお、~ (ホームディレクトリ) をエクスプローラーで開きたいなら、「cygstart ~」を実行すればよい。 4. UCT_uTK1.01.02SoftwarePackage.zip を用い、開発環境とソースを展開する。
Cygwin Terminal を起動し、以下の行をコピー&ペーストする。 ln -s /usr/bin/perl /usr/local/bin/perl unzip ~/UCT_uTK1.01.02SoftwarePackage.zip -d ~/utk/ tar zxf ~/utk/uT-Kernel/develop/devenv_cortex-m3.tgz -C /usr/local/ mkdir /usr/local/te tar zxf ~/utk/uT-Kernel/srcpkg/utkernel.1.01.02.tar.gz -C /usr/local/te/ 5. μT-Kernel をビルドする。 Cygwin Terminal に以下の行をコピー&ペーストする。 cd /usr/local/te/utkernel_source/kernel/sysmain/build/app_mb9af312k/ make これで、5のカレントディレクトリに kernel-ram.* と kernel-rom.* が生成される。 makeの所要時間:
必要なディスク容量 (注意: ダウンロードした Cygwin のパッケージについては略):
1. Cygwin のセットアップ #1. Cygwin から http://cygwin.com/setup-x86.exe をダウンロードして起動する。 なお、この時点の Cygwin x86 のバージョンは 1.7.30-1 だった。 2. パッケージのダウンロード先は適当に。 3. 何も選択しないで (=Base カテゴリーが選択されてるので) インストールを済ませる。 (理由: 他のパッケージのインストールの前に Base カテゴリーががインストールされていた方がトラブルが少ないので) 4. 再度 setup-x86.exe を起動して、今度は Devel カテゴリー を選び、さらに unzip パッケージも選ぶ。 これでインストールすると、で開発に必要なパッケージがインストールされたはず。
パッケージ一覧: $ cygcheck -cd Cygwin Package Information Package Version _autorebase 000564-1 _update-info-dir 01234-1 alternatives 1.3.30c-10 base-cygwin 3.3-1 base-files 4.2-3 bash 4.1.10-4 bzip2 1.0.6-2 ca-certificates 1.97-1 coreutils 8.15-1 crypt 1.2-1 cygutils 1.4.14-1 cygwin 1.7.30-1 dash 0.5.7-1 editrights 1.01-2 file 5.18-1 findutils 4.5.12-1 gawk 4.1.1-1 getent 2.18.90-2 grep 2.16-1 groff 1.22.2-2 gzip 1.4-1 ipc-utils 1.0-1 less 444-1 libargp 20110921-2 libattr1 2.4.46-1 libbz2_1 1.0.6-2 libdb4.8 4.8.30-1 libffi6 3.0.13-1 libgcc1 4.8.3-1 libgdbm4 1.8.3-20 libgmp10 6.0.0a-1 libgmp3 4.3.2-1 libgnutls28 3.2.4-1 libhogweed2 2.7-1 libiconv2 1.14-2 libidn11 1.26-1 libintl8 0.18.3.2-1 liblzma5 5.0.5-1 libmpfr4 3.1.2-1 libncurses10 5.9-20140524-1 libncursesw10 5.9-20140524-1 libnettle4 2.7-1 libp11-kit0 0.20.2-1 libpcre0 8.21-2 libpcre1 8.34-1 libpopt0 1.16-1 libreadline7 6.1.2-3 libssp0 4.8.3-1 libstdc++6 4.8.3-1 libtasn1_6 3.3-1 login 1.10-10 make 4.0-2 man 1.6g-2 mintty 1.1.3-1 p11-kit 0.20.2-1 p11-kit-trust 0.20.2-1 perl 5.14.2-3 popt 1.16-1 rebase 4.4.1-1 run 1.3.0-1 sed 4.2.2-3 tar 1.27.1-1 terminfo 5.9-20140524-1 texinfo 5.2-1 tzcode 2013d-1 unzip 6.0-10 vim-minimal 7.4.316-1 wget 1.15-1 which 2.20-2 xz 5.0.5-1 zlib0 1.2.8-1[編集] 2. toolchainのインストール #1. UCT_uTK1.01.02SoftwarePackage.zip をダウンロードする。 2. Cygwin Terminal を開き、ホームディレクトリに1をコピーする。 ホームディレクトリをエクスプローラーで開くには、「cygstart ~」を実行する。 3. ホームディレクトリの作業用ディレクトリ utk を作って、zipをコピー(or 移動)する。 $ mkdir ~/utk $ cp UCT_uTK1.01.02SoftwarePackage.zip ~/utk/ 4. zip を展開する $ unzip UCT_uTK1.01.02SoftwarePackage.zip Archive: UCT_uTK1.01.02SoftwarePackage.zip creating: uT-Kernel/develop/ inflating: uT-Kernel/develop/binutils-2.14.tar.gz ... (略) inflating: uT-Kernel/utk-dist-ucode.png (メモ: 2014-06-15 pdfのファイル名が文字化けしていたので、convmvで自動修復しようとしたが失敗した。手で直したけど) $ convmv -f cp932 -t utf8 ~/utk/uT-Kernel/*.pdf 5. devenv_cortex-m3.tgz を /usr/local/ に展開する $ tar zxf uT-Kernel/develop/devenv_cortex-m3.tgz -C /usr/local/ 展開すると、次のディレクトリが生成される (findコマンドでディレクトリを4階層表示) $ find /usr/local/cortex-m3/ -maxdepth 4 -type d /usr/local/cortex-m3/ /usr/local/cortex-m3/tool /usr/local/cortex-m3/tool/Cygwin-i686 /usr/local/cortex-m3/tool/Cygwin-i686/arm-none-eabi /usr/local/cortex-m3/tool/Cygwin-i686/arm-none-eabi/bin /usr/local/cortex-m3/tool/Cygwin-i686/arm-none-eabi/include /usr/local/cortex-m3/tool/Cygwin-i686/arm-none-eabi/lib /usr/local/cortex-m3/tool/Cygwin-i686/bin /usr/local/cortex-m3/tool/Cygwin-i686/include /usr/local/cortex-m3/tool/Cygwin-i686/lib /usr/local/cortex-m3/tool/Cygwin-i686/lib/gcc /usr/local/cortex-m3/tool/Cygwin-i686/share /usr/local/cortex-m3/tool/Cygwin-i686/share/gcc-4.7.3 /usr/local/cortex-m3/tool/Cygwin-i686/share/info /usr/local/cortex-m3/tool/Cygwin-i686/share/man /usr/local/cortex-m3/tool/etc[編集] 3. ソースコードの展開、ビルドの準備 #引き続き、2で展開したZIPを用いる。 1. tkernel.1.01.02.tar.gz を /usr/local/te/ に展開する $ mkdir /usr/local/te $ tar zxf uT-Kernel/srcpkg/utkernel.1.01.02.tar.gz -C /usr/local/te/ 展開すると、次のディレクトリが生成される (findコマンドでディレクトリを2階層表示) $ find /usr/local/te -maxdepth 2 -type d /usr/local/te /usr/local/te/utkernel_source /usr/local/te/utkernel_source/config /usr/local/te/utkernel_source/etc /usr/local/te/utkernel_source/include /usr/local/te/utkernel_source/kernel /usr/local/te/utkernel_source/lib 2. /usr/local/bin/perl を用意する $ ln -s /usr/bin/perl /usr/local/bin/perl $ ls -l /usr/local/bin/perl lrwxrwxrwx 1 username None 13 5月 29 23:44 /usr/local/bin/perl -> /usr/bin/perl* 3. ~/.bash_profile 以下の内容を追記する export GNU_BD=/usr/local/cortex-m3/tool/Cygwin-i686 export GNUARM_2=$GNU_BD/arm-none-eabi export BD=/usr/local/te/utkernel_source 以下のようにして ~/.bash_profile を反映する。(あるいはCygwin Terminalを開き直す) $ . ~/.bash_profile 確認 $ set | grep GNUARM GNUARM_2=/usr/local/cortex-m3/tool/Cygwin-i686/arm-none-eabi $ set | grep BD BD=/usr/local/te/utkernel_source GNU_BD=/usr/local/cortex-m3/tool/Cygwin-i686[編集] 4. ビルド #$ cd /usr/local/te $ ls utkernel_source/ 作業をやり直すかも知れないので、Mercurial でバージョン管理する $ hg init $ hg commit -A -m "initial" 試しに Makefile を dry-run する。 $ cd /usr/local/te/utkernel_source/kernel/sysmain/build/app_mb9af312k/ $ ls kernel-ram.lnk kernel-rom.lnk Makefile $ make -n (cd ../../../../lib/build/app_mb9af312k; make) make[1]: Entering directory '/usr/local/te/utkernel_source/lib/build/app_mb9af312k' cd ../../libtk/build/app_mb9af312k ; \ make ; \ make install make[2]: Entering directory '/usr/local/te/utkernel_source/lib/libtk/build/app_mb9af312k' ../../src/Makefile.common:94: Dependencies: No such file or directory touch Dependencies make source make[3]: Entering directory '/usr/local/te/utkernel_source/lib/libtk/build/app_mb9af312k' (cd ../../src; \ for infile in fastlock.c fastmlock.c fastlock.c fastmlock.c ; do \ /usr/local/te/utkernel_source/etc/mkfuncfiles $infile ; \ done ); make[3]: Leaving directory '/usr/local/te/utkernel_source/lib/libtk/build/app_mb9af312k' make obj make[3]: Entering directory '/usr/local/te/utkernel_source/lib/libtk/build/app_mb9af312k' /usr/local/cortex-m3/tool/Cygwin-i686/arm-none-eabi/bin/gcc4arm -mcpu=cortex-m3 -mthumb -I/usr/local/te/utkernel_source/include -I../../src -I../../src/sysdepend/app_mb9af312k -I../../src/func -I../../../../config -D_APP_MB9AF312K_ -c ../../src/sysdepend/app_mb9af312k/disint.S -o disint.o /usr/local/cortex-m3/tool/Cygwin-i686/arm-none-eabi/bin/gcc4arm -O2 -mcpu=cortex-m3 -mthumb -mstructure-size-boundary=8 -ffreestanding -fomit-frame-pointer -Wall -I/usr/local/te/utkernel_source/include -I../../src -I../../src/sysdepend/app_mb9af312k -I../../src/func -I../../../../config -D_APP_MB9AF312K_ -c ../../src/sysdepend/app_mb9af312k/int.c -o int.o make[3]: *** No rule to make target 'lock.o', needed by 'libtk.a'. 中止. make[3]: Leaving directory '/usr/local/te/utkernel_source/lib/libtk/build/app_mb9af312k' ../../src/Makefile.common:63: recipe for target 'all' failed make[2]: *** [all] Error 2 make[2]: Leaving directory '/usr/local/te/utkernel_source/lib/libtk/build/app_mb9af312k' make[2]: Entering directory '/usr/local/te/utkernel_source/lib/libtk/build/app_mb9af312k' /usr/local/cortex-m3/tool/Cygwin-i686/arm-none-eabi/bin/gcc4arm -mcpu=cortex-m3 -mthumb -I/usr/local/te/utkernel_source/include -I../../src -I../../src/sysdepend/app_mb9af312k -I../../src/func -I../../../../config -D_APP_MB9AF312K_ -c ../../src/sysdepend/app_mb9af312k/disint.S -o disint.o /usr/local/cortex-m3/tool/Cygwin-i686/arm-none-eabi/bin/gcc4arm -O2 -mcpu=cortex-m3 -mthumb -mstructure-size-boundary=8 -ffreestanding -fomit-frame-pointer -Wall -I/usr/local/te/utkernel_source/include -I../../src -I../../src/sysdepend/app_mb9af312k -I../../src/func -I../../../../config -D_APP_MB9AF312K_ -c ../../src/sysdepend/app_mb9af312k/int.c -o int.o make[2]: *** No rule to make target 'lock.o', needed by 'libtk.a'. 中止. make[2]: Leaving directory '/usr/local/te/utkernel_source/lib/libtk/build/app_mb9af312k' ../Makefile.common:30: recipe for target 'libtk' failed make[1]: *** [libtk] Error 2 make[1]: Leaving directory '/usr/local/te/utkernel_source/lib/build/app_mb9af312k' ../../src/Makefile.common:148: recipe for target 'lib' failed make: *** [lib] Error 2 make -n (dry-run) で生成されたファイルを確認する $ hg status --unknown ? utkernel_source/kernel/sysmain/build/app_mb9af312k/Dependencies ? utkernel_source/lib/libtk/build/app_mb9af312k/Dependencies ビルドする。Core-i7 3770s, HDD(1.5TB) 上で30秒で完了した。 $ time make ... (略) real 0m30.732s user 0m11.208s sys 0m12.998s make で生成されたファイルを確認する $ hg st -u ? utkernel_source/kernel/sysdepend/cpu/mb9af312k/func/get_reg.c ? utkernel_source/kernel/sysdepend/cpu/mb9af312k/func/hll_inthdr.c ... ? utkernel_source/kernel/sysinit/build/app_mb9af312k/Dependencies ? utkernel_source/kernel/sysinit/build/app_mb9af312k/devinit.o ... ? utkernel_source/kernel/sysmain/build/app_mb9af312k/Dependencies ? utkernel_source/kernel/sysmain/build/app_mb9af312k/clock_mode.o ... ? utkernel_source/kernel/tkernel/build/app_mb9af312k/Dependencies ? utkernel_source/kernel/tkernel/build/app_mb9af312k/alarmhandler_getname.o ... ? utkernel_source/kernel/tkernel/build/app_mb9af312k/wspec_slp.o ? utkernel_source/kernel/tkernel/src/func/alarmhandler_getname.c ... ? utkernel_source/kernel/tkernel/src/func/wspec_slp.c ? utkernel_source/kernel/tstdlib/func/tstdlib_bitclr.c ... ? utkernel_source/kernel/tstdlib/func/tstdlib_bitset.c ? utkernel_source/lib/build/app_mb9af312k/libstr.a ? utkernel_source/lib/build/app_mb9af312k/libsvc.a ? utkernel_source/lib/build/app_mb9af312k/libtk.a ? utkernel_source/lib/build/app_mb9af312k/libtm.a ? utkernel_source/lib/libstr/build/mb9af312k/Dependencies ... ? utkernel_source/lib/libstr/build/mb9af312k/strtol.o ? utkernel_source/lib/libstr/src/func/bzero.c ... ? utkernel_source/lib/libstr/src/func/strtol.c ? utkernel_source/lib/libsvc/build/mb9af312k/Dependencies ... ? utkernel_source/lib/libsvc/build/mb9af312k/tk_wup_tsk.o ? utkernel_source/lib/libtk/build/app_mb9af312k/Dependencies ... ? utkernel_source/lib/libtk/build/app_mb9af312k/unlock.o ? utkernel_source/lib/libtk/src/func/createlock.c ... ? utkernel_source/lib/libtk/src/func/unlock.c ? utkernel_source/lib/libtm/build/app_mb9af312k/Dependencies ... ? utkernel_source/lib/libtm/build/app_mb9af312k/tm_putstring.o ビルドが完了すると、kernel-ram.* と kernel-rom.* が生成されている。 $ ls kernel-* kernel-ram.lnk kernel-ram.mot* kernel-rom.lnk kernel-rom.mot* kernel-ram.map kernel-ram.sys* kernel-rom.map kernel-rom.rom* これらのファイルの種別を調べる。なおromはFlashに書いて用い、ramはSRAMに転送して用いる。 $ file kernel-*.* kernel-ram.lnk: assembler source, ASCII text kernel-ram.map: ASCII text kernel-ram.mot: Motorola S-Record; binary data in text format kernel-ram.sys: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, not stripped kernel-rom.lnk: assembler source, ASCII text kernel-rom.map: ASCII text kernel-rom.mot: Motorola S-Record; binary data in text format kernel-rom.rom: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, not stripped $ head kernel-ram.mot S01100006B65726E656C2D72616D2E6D6F7482 S3251FFFE0000020002001E1FF1FC3E1FF1FC5E1FF1FC7E1FF1FC9E1FF1FCBE1FF1F00000000BE $ objdump.exe -f kernel-ram.sys kernel-rom.rom kernel-ram.sys: ファイル形式 elf32-little アーキテクチャ: UNKNOWN!, フラグ 0x00000112: EXEC_P, HAS_SYMS, D_PAGED 開始アドレス 0x1fffe100 kernel-rom.rom: ファイル形式 elf32-little アーキテクチャ: UNKNOWN!, フラグ 0x00000112: EXEC_P, HAS_SYMS, D_PAGED 開始アドレス 0x00000100 $ objdump.exe -x kernel-ram.sys | head -30 kernel-ram.sys: ファイル形式 elf32-little kernel-ram.sys アーキテクチャ: UNKNOWN!, フラグ 0x00000112: EXEC_P, HAS_SYMS, D_PAGED 開始アドレス 0x1fffe100 プログラムヘッダ: LOAD off 0x00000000 vaddr 0x1fff8000 paddr 0x1fff8000 align 2**15 filesz 0x00008740 memsz 0x0000ad40 flags rwx セクション: 索引名 サイズ VMA LMA File off Algn 0 .text 00002710 1fffe000 1fffe000 00006000 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 .data 00000030 20000710 20000710 00008710 2**2 CONTENTS, ALLOC, LOAD, DATA 2 .bss 00002600 20000740 20000740 00008740 2**3 ALLOC 3 .ARM.attributes 0000002f 00000000 00000000 00008740 2**0 CONTENTS, READONLY 4 .comment 00000027 00000000 00000000 0000876f 2**0 CONTENTS, READONLY SYMBOL TABLE: 1fffe000 l d .text 00000000 .text 20000710 l d .data 00000000 .data 20000740 l d .bss 00000000 .bss 00000000 l d .ARM.attributes 00000000 .ARM.attributes 00000000 l d .comment 00000000 .comment 1fffe000 l .text 00000000 $d |