FrontPage

2014/09/28からのアクセス回数 2186

今回も「待ったり日記」さんのuCLinuxのインストール記事に従って FM3ボードでuCLinuxのブートをしてみます。

前準備

  • Ubuntu 14.04をVMにインストール
  • Eclipseをインストール
  • 必要なツール
$ sudo apt-get install git

arm用gccのインストール

uCLinux版ARM GCCを以下からダウンロードし、~/localにインストール

    arm-2011.03-46-arm-uclinuxeabi-i686-pc-linux-gnu.tar.bz2

その他に必要なツールをインストールする。 *1

$ 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のコンパイル

途中エラーがでたので、fm3/envm.cをcpu.hに合わせた。

$ 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の種類

  • arm-none-eabi-gcc: 組み込み用のGCC
  • arm-uclinuxeabi-gcc: Linux用の組み込み用

Eclipseで

monitor command not supported by this target

とでているのは、arm-uclinuxeabi-gdbがloadコマンドを持っていなくて、ターゲットが起動していないことが原因です。

コンパイラーをnone-eabiに切り替えてデバッグしてみる。

$ 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でもデバッガのソースが表示されない!

$ 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 で異なることが分かりました。

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は、

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をコピーしました。

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

長い道のり(デバッガでソース表示)

何とかデバッガでu-bootのソースが表示されるようになりました。

今回は、Ubuntuでもデバッグをするので、ARM-USB-TINYを使っています。 openocd.cfgは以下のとおりです。

# 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上)

$ /opt/local/bin/openocd -f openocd.cfg -c "flash_program u-boot.bin"

デバッグ用は、以下のように起動します。

$ /opt/local/bin/openocd -f openocd.cfg

FM3用uCLinuxの作成

ソースの展開

ソースのダウンロードと展開は、gitを使います。*2

$ cd ~/local
$ git clone https://github.com/fm3fan/uClinux.git

ビルド

READMEにしたがって以下のようにビルドしましす。

$ 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のメニューにて以下のように変更&確認します。

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を実行します。

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のアップロード

$ 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がブートできました。

th_uCLinux_min.jpg

コメント

選択肢 投票
おもしろかった 0  
そうでもない 0  
わかりずらい 0  

皆様のご意見、ご希望をお待ちしております。勉強会で分からなかったこと等、お気軽に問い合わせて下さい。

スパム防止に画像の文字列も入力してください。


(Input image string)


*1 ncurses-develのインストールでエラーとなるが、sudo apt-get install -f , sudo apt-get updateの後にやり直して上手く行った
*2 結構時間が掛かります

添付ファイル: fileth_uCLinux_min.jpg 391件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-09-28 (日) 13:41:00 (1058d)
SmartDoc