[[FrontPage]] #contents 2014/09/28からのアクセス回数 &counter; Interface 2014/05に紹介されたFM3にU-Bootを移植された記事を実際に試された 「待ったり日記」さんがいるのを励みに私も挑戦してみることにしました。 - [[Interface付録FM3基板でLinux (U-Boot編)>http://mattari135.wordpress.com/2014/07/20/interface%E4%BB%98%E9%8C%B2fm3%E5%9F%BA%E6%9D%BF%E3%81%A7linux-u-boot%E7%B7%A8/]] ** メモリ増設ボード [#w2d6f5b1] 「待ったり日記」さんに倣って、 [[.NET MicroFramework対応SRAM2M&WX-PHY拡張ボード>http://www.ejigu.com/ca28/68/]] を使用しました。 必要な部品は、 [[このボードの説明>http://homepage3.nifty.com/fpga/wx/sram-phy/index.htm]] にあります。 メモリのハンダ付けには、フラックスとはんだ吸い取り線を使いました。 &ref(WX-SRAM-PHY-FM3-002.png); ** U-Bootのコンパイル [#sc048129] *** 環境変数の設定 [#a7e2b8ff] 本当は、Interfaceのダウンロードファイルで動作を確認してから、コンパイル作業に入りたかったのですが、 公開されているファイルがSファイル形式でMacのOpenOCDで書き込めないので、直接U-Bootのコンパイル に挑戦してみました。 #pre{{ $ export PATH=$HOME/local/arm/CodeSourcery/arm/bin:$PATH $ export CROSS_COMPILE=arm-none-eabi- $ export ARCH=arm }} *** ソースのダウンロード [#j6ee3914] 以下のサイトからソースをgitで取得します。 - https://github.com/fm3fan/u-boot #pre{{ $ git clone https://github.com/fm3fan/u-boot.git $ cd u-boot }} *** MacOSXとUbuntu用に修正 [#i5cfc443] オリジナルのままでは、Unixではコンパイルできないので、以下のファイルを修正しました。 - boad/cq/cq_frk_fm3_lfcq1からconfig.mk, u-boot.ldsをcq_frk_fm3_wxmp3plcdにコピーする。 - cpu/arm_cortexm3/fm3/envm.cの以下の部分を修正envm_init, envm_writeの関数宣言をcpu.hに合わせる。 #pre{{ void //__attribute__ ((section(".ramcode"))) //__attribute__ ((long_call)) envm_init(void) { } u32 //__attribute__ ((section(".ramcode"))) //__attribute__ ((long_call)) //envm_write(uint32_t offset, void * buf, uint32_t size) envm_write(unsigned int offset, void * buf, unsigned int size) { uint32_t ret = 0; if (!fm3_flash_erase(offset, size)) return ret; if (fm3_flash_write(offset, buf, size)) ret = size; return ret; } }} - トップのMakefileのcq_frk_fm3_wxmp3plcd_configを以下の様に修正する。 #pre{{ cq_frk_fm3_wxmp3plcd_config : unconfig @echo "LDSCRIPT:=$(SRCTREE)/board/cq/cq_frk_fm3_wxmp3plcd/u-boot.lds"\ > $(obj)board/cq/cq_frk_fm3_wxmp3plcd/config.tmp @$(MKCONFIG) $(@:_config=) arm arm_cortexm3 cq_frk_fm3_wxmp3plcd cq fm3 }} *** コンパイル [#ccb4d322] u-bootのコンパイルは以下の手順で進めます。 - 設定環境のクリア(make distclean) - コンフィグファイルの作成(make ボード名_config) - ビルド(make) 端末で以下の様に入力してします。 #pre{{ $ make distclean $ make cq_frk_fm3_wxmp3plcd_config $ make }} *** 書き込み [#y6c6e9ab] 私のMacOSXやUnbutuではFM3のUSB Directを使った書込ができないので、 以下の様にOpenOCDを使って書き込みます。 ((openocd.cfgについては、[[arm/FM3-uCLinuxを試す]]を参照してください。また、MacOSXの場合、AppleUSBCDC.extをunloadする必要があります。詳しくは[[arm/FM3をはじめる]]を参照して下さい。)) #pre{{ $ openocd -f openocd.cfg -c "flash_program u-boot.bin" 以下の様なメッセージが出力されてフラッシュにプログラムが書き込まれます。 Open On-Chip Debugger 0.7.0 (2013-08-20-09:43) Licensed under GNU GPL v2 For bug reports, read http://openocd.sourceforge.net/doc/doxygen/bugs.html adapter speed: 500 kHz Info : only one transport option; autoselect 'jtag' Warn : Interface already configured, ignoring adapter_nsrst_delay: 100 jtag_ntrst_delay: 100 trst_only separate trst_push_pull adapter speed: 500 kHz cortex_m3 reset_config sysresetreq Info : clock speed 500 kHz Info : JTAG tap: mb9bfxx6.cpu tap/device found: 0x4ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x4) Info : mb9bfxx6.cpu: hardware has 6 breakpoints, 4 watchpoints target state: halted target halted due to debug-request, current mode: Thread xPSR: 0x81000000 pc: 0x0000d380 msp: 0x2000ff50 flash 'fm3' found at 0x00000000 auto erase enabled Info : Fujitsu MB9Bxxx: Sector Erase ... (0 to 2) Info : Fujitsu MB9B500: FLASH Write ... wrote 131072 bytes from file u-boot.bin in 15.320683s (8.355 KiB/s) flash program complete. reset and run }} ** 動作確認 [#uf223512] 動作確認は、u-bootのコンソールメッセージをシリアル通信で受信することで行います。 *** シリアル通信の設定 [#i621c1d8] シリアルとの接続を以下の様に結線します。 | MPL2303SA | FM3 | | 1: GND | CN2: 40 (GND) | | 2: TXD | CN2: 15 (RXD1) | | 4: RXD | CN2: 16 (TXD1) | コンソールのボーレートは、include/configs/cq_frk_fm3_wxmp3plcd.hを参照して、115200とあった。 ((使用しているシリアルは、RXD1の方だった!)) &ref(Serial_FM3.png); *** picocomを使ってシリアル通信 [#b48fabe5] シリアル通信には、Arduinoで使ったpicocomを使いました。 ((機能がシンプルなのが気に入りました)) ファイルの転送に sz, rzコマンドと念のためkermitをインストールします。 #pre{{ $ sudo port install lrzsz $ sudo port install kermit }} *** FM3 U-Bootとつないでみる [#g07c1c9d] シリアル通信の準備ができたので、FM3とつないでみます。 ((MacOSXでは/dev/tty.usbserial, Ubuntuでは/dev/ttyUSB0でした。)) #pre{{ $ picocom --send-cmd "sb -vv" --receive-cmd "rb -vv" -b 115200 /dev/tty.usbserial picocom v1.7 の後で設定が表示されます。 ここで、FM3をリセットすると、以下の様なメッセージが出力されます。 U-Boot 2010.03-00019-gd1ef410-dirty ( 9 22 2014 - 11:28:39) CPU : Fujitsu FM3 series (Cortex-M3) Board: CQ_FRK_FM3 + WXMP3 Rev Rev 0.1, Kentaro Sekimoto DRAM: 2 MB Flash: 1 MB *** Warning - bad CRC, using default environment In: serial Out: serial Err: serialNet: fm3_ethFM3> }} helpと入力すると、使用できるu-bootのコマンドが表示されます。 *** 増設メモリの動作確認 [#rc98463b] WX-SRAM-PHY-FM3-002に増設したメモリが正常に動作するかu-bootのコマンドを使って 確認します。 以下のコマンドで拡張メモリ((0x60000000から0x601fffffまでの2MB分))への書き込みをテストしてみます。 無事、60000000に12345678がセットされていることが確認できました。 #pre{{ FM3> md 0x60000000 60000000: f4a3ff00 ec3f2a4d cf77e31b ccfd0225 ....M*?...w.%... 60000010: 3fdfe97d ff7f38af 87cf5fdf 83c923a6 }..?.8..._...#.. 60000020: dd3dfe49 5d717dc3 77bb196b d8d75ff3 I.=..}q]k..w._.. 60000030: 7ba4bbc7 2ffe2875 fafded9f f0ebdef7 ...{u(./........ 60000040: 931f5db1 bd49c329 76a6bf2f 7f77f507 .]..).I./..v..w. 60000050: fbfdb86e 57d77a96 n....z.W FM3> mw 0x60000000 0x12345678 FM3> md 0x60000000 60000000: 12345678 ec3f2a4d cf77e31b ccfd0225 xV4.M*?...w.%... 60000010: 3fdfe97d ff7f38af 87cf5fdf 83c923a6 }..?.8..._...#.. 60000020: dd3dfe49 5d717dc3 77bb196b d8d75ff3 I.=..}q]k..w._.. 60000030: 7ba4bbc7 2ffe2875 fafded9f f0ebdef7 ...{u(./........ 60000040: 931f5db1 bd49c329 76a6bf2f 7f77f507 .]..).I./..v..w. 60000050: fbfdb86e 57d77a96 n....z.W }} picocomの通信を終了するには、Ctrl-A, Ctrl-Xを入力します。 ** 失敗 [#dfdaf55b] この後、U-BootのHello Worldを試してみたのですが、どうしても上手く動きませんでした。 そこで、uCLinuxの動作確認を優先して先に進むことにしました。 ((機会があればHello Worldに再挑戦します。)) ** コメント [#e3373283] #vote(おもしろかった[1],そうでもない[0],わかりずらい[0]) #vote(おもしろかった[1],そうでもない[1],わかりずらい[0]) 皆様のご意見、ご希望をお待ちしております。勉強会で分からなかったこと等、お気軽に問い合わせて下さい。 スパム防止に画像の文字列も入力してください。 #comment_kcaptcha