[[FrontPage]] #contents 2014/09/28からのアクセス回数 &counter; 今回も「待ったり日記」さんのuCLinuxのインストール記事に従って FM3ボードでuCLinuxのブートをしてみます。 - [[interface付録fm3基板でlinux-uclinux編>http://mattari135.wordpress.com/2014/07/21/interface%E4%BB%98%E9%8C%B2fm3%E5%9F%BA%E6%9D%BF%E3%81%A7linux-uclinux%E7%B7%A8/]] ** 前準備 [#c108e710] - Ubuntu 14.04をVMにインストール - Eclipseをインストール - 必要なツール #pre{{ $ sudo apt-get install git }} *** arm用gccのインストール [#i41aca4a] uCLinux版ARM GCCを以下からダウンロードし、~/localにインストール - https://sourcery.mentor.com/GNUToolchain/release1804? arm-2011.03-46-arm-uclinuxeabi-i686-pc-linux-gnu.tar.bz2 その他に必要なツールをインストールする。 ((ncurses-develのインストールでエラーとなるが、sudo apt-get install -f , sudo apt-get updateの後にやり直して上手く行った)) #pre{{ $ sudo apt-get install openocd $ sudo apt-get install picocom $ sudo apt-get install lrzsz $ sudo apt-get install ncurses-devel $ sudo apt-get install u-boot-tools }} ARM-USB-TINYを使うために、 #ft2232_device_desc "Olimex OpenOCD JTAG TINY" ** u-bootのコンパイル [#ie96735a] 途中エラーがでたので、fm3/envm.cをcpu.hに合わせた。 #pre{{ $ export CROSS_COMPILE=arm-uclinuxeabi- $ export ARCH=arm $ git clone https://github.com/fm3fan/u-boot.git $ cd u-boot $ make distclean $ make cq_frk_fm3_wxmp3plcd_config $ make }} *** GCCの種類 [#mc7fb8e3] - arm-none-eabi-gcc: 組み込み用のGCC - arm-uclinuxeabi-gcc: Linux用の組み込み用 Eclipseで monitor command not supported by this targetloadコマンドを持っていなくて、ターゲットが起動していないことが原因です。 とでているのは、arm-uclinuxeabi-gdbが #pre{{ monitor command not supported by this target }} とでているのは、arm-uclinuxeabi-gdbがloadコマンドを持っていなくて、ターゲットが起動していないことが原因です。 コンパイラーをnone-eabiに切り替えてデバッグしてみる。 #pre{{ $ sudo apt-get remove binutils-arm-none-eabi gcc-arm-none-eabi $ sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded $ sudo apt-get update $ sudo apt-get install gcc-arm-none-eabi=4-8-2014q2-0trusty10 }} ubuntuでもデバッガのソースが表示されない! #pre{{ $ openocd -f openocd.cfg -c "flash_program u-boot.bin" }} cq_frk_fm3_lfcq1_configとcq_frk_fm3_wxmp3plcd_configの違い 試行錯誤をしてみると以下のことが分かりました。 - cq_frk_fm3_lfcq1_configだとデバッグできる - cq_frk_fm3_lfcq1_configでは、config.tmpが作成される トップのMakefileにconfig.tmpの記述がcq_frk_fm3_lfcq1_configとcq_frk_fm3_wxmp3plcd_config で異なることが分かりました。 #pre{{ cq_frk_fm3_lfcq1_config : unconfig @echo "LDSCRIPT:=$(SRCTREE)/board/cq/cq_frk_fm3_lfcq1/u-boot.lds"\ > $(obj)board/cq/cq_frk_fm3_lfcq1/config.tmp @$(MKCONFIG) $(@:_config=) arm arm_cortexm3 cq_frk_fm3_lfcq1 cq fm3 }} cq_frk_fm3_wxmp3plcd_configは、 #pre{{ cq_frk_fm3_wxmp3plcd_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm_cortexm3 cq_frk_fm3_wxmp3plcd cq fm3 }} Makefileを以下の様に修正し、boad/cq/cq_frk_fm3_wxmp3plcdにcq_frk_fm3_lfcq1のu-boot.ldsをコピーしました。 #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 }} *** 長い道のり(デバッガでソース表示) [#w680d1a4] 何とかデバッガでu-bootのソースが表示されるようになりました。 今回は、Ubuntuでもデバッグをするので、ARM-USB-TINYを使っています。 openocd.cfgは以下のとおりです。 #pre{{ # OpenOCD fm3.cfg with Flash proc adapter_khz 500 interface ft2232 set CHIPNAME mb9bfxx6 set CPUTAPID 0x4ba00477 #source [find interface/vsllink.cfg] source [find interface/olimex-jtag-tiny.cfg] source [find target/fm3.cfg] proc flash_program {ELF_FILENAME} { halt flash probe 0 flash write_image erase $ELF_FILENAME #flash write_bank 0 $ELF_FILENAME 0x0 echo "flash program complete. reset and run" resume exit } init halt }} u-boot.binの書込は、以下のコマンドを実行します。(MacOSX上) #pre{{ $ /opt/local/bin/openocd -f openocd.cfg -c "flash_program u-boot.bin" }} デバッグ用は、以下のように起動します。 #pre{{ $ /opt/local/bin/openocd -f openocd.cfg }} ** FM3用uCLinuxの作成 [#h4760757] *** ソースの展開 [#ia2d4246] ソースのダウンロードと展開は、gitを使います。((結構時間が掛かります)) #pre{{ $ cd ~/local $ git clone https://github.com/fm3fan/uClinux.git }} *** ビルド [#qcb64c7a] READMEにしたがって以下のようにビルドしましす。 #pre{{ $ export PATH=~/arm-2010q1/bin:$PATH $ export CROSS_COMPILE=arm-uclinuxeabi- $ export LANG=C $ make distclean $ cp release/20140612/lfcq1/min/initramfs_lfcq1_min.txt initramfs_lfcq1_min.txt $ cp release/20140612/lfcq1/min/config_lfcq1_min .config $ make menuconfig }} menuconfigのメニューにて以下のように変更&確認します。 #pre{{ System Type -> FM3 Board Type -> [*]SPANSION FM3 CQ_FRK_FM3 + WXMP3PLCD System Type -> (S)DRAM Base Address -> 0x60000000 System Type -> (S)DRAM SIZE -> 0x00200000 General setup -> (initramfs_lfcq1_min.txt) Initramfs source file(s) Exit で抜ける。終了するときに保存するか聞いてくるので保存する }} これで、makeを実行します。 #pre{{ make uImage 途中省略 OBJCOPY arch/arm/boot/Image Kernel: arch/arm/boot/Image is ready UIMAGE arch/arm/boot/uImage Image Name: Linux-2.6.33-arm1 Created: Sat Sep 27 20:53:04 2014 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 728992 Bytes = 711.91 kB = 0.70 MB Load Address: 60008000 Entry Point: 60008001 Image arch/arm/boot/uImage is ready $ file arch/arm/boot/uImage arch/arm/boot/uImage: u-boot legacy uImage, Linux-2.6.33-arm1, Linux/ARM, OS Kernel Image (Not compressed), 728992 bytes, Sat Sep 27 20:53:04 2014, Load Address: 0x60008000, Entry Point: 0x60008001, Header CRC: 0x0D7F1626, Data CRC: 0x1C5D6B89 }} *** uImageのアップロード [#v55e78ac] #pre{{ $ sudo picocom --send-cmd "sb -vv" --receive-cmd "rb -vv" -b 115200 /dev/ttyUSB0 FM3> loady 0x60000000 Crtl-A Ctrl-S file: arch/arm/boot/uImage 転送途中経過 Transfer complete *** exit status: 0 xyzModem - CRC mode, 5698(SOH)/0(STX)/0(CAN) packets, 10 retries ## Total Size = 0x000b1fe0 = 729056 Bytes FM3> bootm 0x60000000 FM3> bootm 0x60000000 ## Booting kernel from Legacy Image at 60000000 ... Image Name: Linux-2.6.33-arm1 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 728992 Bytes = 711.9 kB Load Address: 60008000 Entry Point: 60008001 Verifying Checksum ... OK Loading Kernel Image ... OK OK Starting kernel ... Linux version 2.6.33-arm1 (take@ubuntu) (gcc version 4.5.2 (Sourcery G++ Lite 2011.03-46) ) #1 Sat Sep 27 20:53:02 PDT 2014 CPU: ARMv7-M Processor [412fc231] revision 1 (ARMv7M) CPU: NO data cache, NO instruction cache Machine: Fujitsu FM3 Ignoring unrecognised tag 0x54410008 Built 1 zonelists in Zone order, mobility grouping off. Total pages: 508 Kernel command line: console=ttyS0,115200 panic=10 earyprintk PID hash table entries: 16 (order: -6, 64 bytes) Dentry cache hash table entries: 1024 (order: 0, 4096 bytes) Inode-cache hash table entries: 1024 (order: 0, 4096 bytes) Memory: 2MB = 2MB total Memory: 1240k/1240k available, 808k reserved, 0K highmem Virtual kernel memory layout: vector : 0x00000000 - 0x00001000 ( 4 kB) fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB) vmalloc : 0x00000000 - 0xffffffff (4095 MB) lowmem : 0x60000000 - 0x60200000 ( 2 MB) modules : 0x60000000 - 0x60200000 ( 2 MB) .init : 0x60008000 - 0x60029000 ( 132 kB) .text : 0x60029000 - 0x600a9000 ( 512 kB) .data : 0x600b2000 - 0x600b9fa0 ( 32 kB) Hierarchical RCU implementation. RCU-based detection of stalled CPUs is enabled. NR_IRQS:53 Calibrating delay loop... 13.10 BogoMIPS (lpj=65536) Mount-cache hash table entries: 512 Switching to clocksource cm3-systick fm3_uart.0: ttyS0 at MMIO 0x40038000 (irq = 7) is a FM3 UART Port console [ttyS0] enabled Freeing init memory: 132K Welcome to ____ _ _ / __| ||_| _ _| | | | _ ____ _ _ _ _ | | | | | | || | _ \| | | |\ \/ / | |_| | |__| || | | | | |_| |/ \ | ___\____|_||_|_| |_|\____|\_/\_/ | | |_| Fujitsu FM3/FM4 port. For further information check: http://www.uclinux.org/ / # }} 無事uCLinuxがブートできました。 &ref(th_uCLinux_min.jpg); ** コメント [#pe41ef58] #vote(おもしろかった,そうでもない,わかりずらい) 皆様のご意見、ご希望をお待ちしております。勉強会で分からなかったこと等、お気軽に問い合わせて下さい。 スパム防止に画像の文字列も入力してください。 #comment_kcaptcha