MPC8349E-mITXという評価ボード(BOX)を入手しました。
ボードのスペック
CPU: Freescale MPC8349E 533MHz (PowerQUICC II Pro)
Memory: 256MB DDR1 (MAX: 1GB)
LAN: Single GbE(RJ-45 x 1) + GbE Switch(RJ-45 x 5)
HDD: SATA(Controller:SiI3114)
標準で、Linuxがついてきます。
Linuxの最近のバージョンは付属のu-bootではうまく起動できなかったので、u-boot 2008.10-rc2のインストールを行いました。
以下その記録です。
2008年 9月 26(金曜日)
MPC8349E-mITXに u-boot-2008.10-rc2 をインストール
準備
u-bootはクロスコンパイルで作成します。
コンパイルに使用した環境(ホスト)は以下です。
powerpcのクロスコンパイル環境が必要となりますが、その前にクロスコンパイル環境をインストールするための準備をします。
emdebian-toolsをインストールします。
/etc/apt/sources.list.d/emdebian.sources.list
が生成されます。ここには以下の2行が記載されています。
これを有効にするためapt を updateします。
これで、クロスコンパイル環境をインストールする準備ができました。
次にpowerpcのクロスコンパイル環境をインストールします。
関連パッケージなどもインストールされて、powerpcのクロスコンパイル環境が整いました。
powerpc向けのgcc-4.2.4が使用できます。
u-bootのコンパイル
u-bootには、開発版、スナップショット、リリース版があります。
リリース版は2ヶ月毎にリリースされているようです。
開発版(git)
git://www.denx.de/git/u-boot.git
スナップショット
ftp://ftp.denx.de/pub/u-boot/から取得可能
2008.9.26時点での最新のスナップショット版は2008.10-rc2のはずだが、
上記urlには存在するのは、u-boot-2008.10-rc1のみ。
リリース版
ftp://ftp.denx.de/pub/u-boot/から取得可能
2008.9.26時点での最新のリリース版はu-boot-1.3.4
今回は最新のスナップショットである2008.10-rc2を利用する。
上記ftpでは取得できないためgitレポジトリから取得する。
スアップショットを展開します。
クロスコンパイル環境にあわせて以下のパッチをあてます。
また、1GBメモリを使用する場合には以下のパッチも必要です。
このパッチをあてずに1GBメモリで起動すると、メモリ初期化のあたり(board_init_f()のstack pointerの設定のあたり)で落ちてしまいました。
上記パッチはメモリが256MB以上の場合、u-bootの動作に256MBしか使用しないようになるので、1GB未満のメモリでの使用でも上記パッチによる副作用はないと思います。
コンパイルします。
これでu-boot.binは作成されました。
u-boot.binをフラッシュへ
u-boot-2008.10-rc1/doc/README.mpc8349itx
によると、通常ブート時には、以下のメモリマップが使われるようです。
FE00_0000 HRCW
FE70_0000 Alternative U-Boot image
FE80_0000 Alternative HRCW
FEF0_0000 U-Boot image
FEFF_FFFF End of flash
なお、FE000000-FE7FFFFF と FE800000-FEFFFFFFはジャンパピンJ22Eで切り替えられます。
FEF00000からのU-Boot imageには書き込みプロテクトがかかっています。
そこで、この領域に書き込むにはprotectコマンドでプロテクトを外す方法、バンクを切り替えてFE700000に書き込んだ後にもとに戻す方法があります。
今回は間違いによる被害をうけないように後者の方法にします。
まず、ジャンパピンJ22EをオープンにしてMPC8349E-mITXの電源を入れデフォルトのu-bootを起動しておきます。
電源をいれると自動的にu-bootが起動後Linuxが起動してしまいますので、u-boot起動したら何かキーを押してu-bootのプロンプトがでている状態にしておきます。
printenvコマンドでethactとeth1addr等を確認します。
ethact=TSEC0 または TSEC1です。
TSEC0は外部RJ-45コネクタENET0に、TSEC1は外部RJ-45コネクタENET1-ENET5につながっています。
今回はTSEC0からtftpでダウンロードを行います。
ここでサーバ側の設定を行います。
上記で作成したu-boot.binをtftpでダウンロードできる環境を整えておきます。
またbootpでeth1addrでIPアドレスを取得できるように設定します。
今回はnetbsd 3.1/i386のdhcpdとtftpdを利用しました。
なお、MPC5349E側のu-bootで手動でIPアドレスを設定することもできます。
次に、tftpでのu-bootのダウンロードからflashへの書き込みを行います。
bootpでIPアドレスを取得後、tftpで0x00200000番地にu-boot.binをダウンロードします。
その後、0xfe700000-0xfe7fffffを消去後、u-boot.binをコピー(flash書き込み)します。
ここで、電源を落とします。
そしてジャンパピンJ22Eをもとの状態(ショート)にもどします。
再び電源をいれると新しいU-Bootが起動されます。
新しいU-Bootではtftpflashという環境変数が設定されています。
次回からのu-bootのflashへの書き込みは、これを使うことで簡単にtftpからフラッシュに書き込みができます。
ここまででu-bootの更新ができました。
MPC8349E用のlinuxカーネルの作成は別エントリで書く予定です。
u-bootはクロスコンパイルで作成します。
コンパイルに使用した環境(ホスト)は以下です。
- OS(ホスト): Linux/i386 (Ubuntu Hardy)
powerpcのクロスコンパイル環境が必要となりますが、その前にクロスコンパイル環境をインストールするための準備をします。
emdebian-toolsをインストールします。
# aptitude install emdebian-tools
/etc/apt/sources.list.d/emdebian.sources.list
が生成されます。ここには以下の2行が記載されています。
deb http://www.emdebian.org/debian/ unstable main
deb-src http://www.emdebian.org/debian/ unstable main
これを有効にするためapt を updateします。
# aptitude update
これで、クロスコンパイル環境をインストールする準備ができました。
次にpowerpcのクロスコンパイル環境をインストールします。
# aptitude install gcc-4.2-powerpc-linux-gnu
関連パッケージなどもインストールされて、powerpcのクロスコンパイル環境が整いました。
powerpc向けのgcc-4.2.4が使用できます。
u-bootのコンパイル
u-bootには、開発版、スナップショット、リリース版があります。
リリース版は2ヶ月毎にリリースされているようです。
開発版(git)
git://www.denx.de/git/u-boot.git
スナップショット
ftp://ftp.denx.de/pub/u-boot/から取得可能
2008.9.26時点での最新のスナップショット版は2008.10-rc2のはずだが、
上記urlには存在するのは、u-boot-2008.10-rc1のみ。
リリース版
ftp://ftp.denx.de/pub/u-boot/から取得可能
2008.9.26時点での最新のリリース版はu-boot-1.3.4
今回は最新のスナップショットである2008.10-rc2を利用する。
上記ftpでは取得できないためgitレポジトリから取得する。
$ git-clone git://www.denx.de/git/u-boot.git u-boot
$ cd u-boot
$ git-pull (git-cloneした直後であれば不要)
$ git-tag -l |grep 2008
v2008.10-rc1
v2008.10-rc2
$ git-archive --format=tar --prefix=u-boot-2008.10-rc2/ v2008.10-rc2 | bzip2 > ../u-boot-2008.10-rc2.tar.bz2
$ cd ..
スアップショットを展開します。
$ tar jxvf u-boot-2008.10-rc2.tar.bz2
$ cd u-boot-2008.10-rc2
クロスコンパイル環境にあわせて以下のパッチをあてます。
--- u-boot-2008.10-rc2/Makefile 2008-09-14 07:59:35.000000000 +0900
+++ u-boot-2008.10-rc2/Makefile 2008-09-26 16:46:43.000000000 +0900
@@ -142,7 +142,7 @@
CROSS_COMPILE =
else
ifeq ($(ARCH),ppc)
-CROSS_COMPILE = ppc_8xx-
+CROSS_COMPILE = powerpc-linux-gnu-
endif
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linux-
また、1GBメモリを使用する場合には以下のパッチも必要です。
--- u-boot-2008.10-rc2/include/configs/MPC8349ITX.h 2008-09-14 07:59:35.000000000 +0900
+++ u-boot-2008.10-rc2+/include/configs/MPC8349ITX.h 2008-09-26 16:47:49.000000000 +0900
@@ -158,6 +158,8 @@
#define CFG_DDR_SDRAM_CLK_CNTL (DDR_SDRAM_CLK_CNTL_SS_EN | \
DDR_SDRAM_CLK_CNTL_CLK_ADJUST_075)
+#define CONFIG_VERY_BIG_RAM
+
#ifdef CONFIG_HARD_I2C
#define CONFIG_SPD_EEPROM /* use SPD EEPROM for DDR setup*/
#endif
このパッチをあてずに1GBメモリで起動すると、メモリ初期化のあたり(board_init_f()のstack pointerの設定のあたり)で落ちてしまいました。
上記パッチはメモリが256MB以上の場合、u-bootの動作に256MBしか使用しないようになるので、1GB未満のメモリでの使用でも上記パッチによる副作用はないと思います。
コンパイルします。
$ make MPC8349ITX_config
Configuring for MPC8349ITX board...
$ make
.
.
.
powerpc-linux-gnu-objcopy -O srec u-boot u-boot.srec
powerpc-linux-gnu-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin
これでu-boot.binは作成されました。
u-boot.binをフラッシュへ
u-boot-2008.10-rc1/doc/README.mpc8349itx
によると、通常ブート時には、以下のメモリマップが使われるようです。
FE00_0000 HRCW
FE70_0000 Alternative U-Boot image
FE80_0000 Alternative HRCW
FEF0_0000 U-Boot image
FEFF_FFFF End of flash
なお、FE000000-FE7FFFFF と FE800000-FEFFFFFFはジャンパピンJ22Eで切り替えられます。
FEF00000からのU-Boot imageには書き込みプロテクトがかかっています。
そこで、この領域に書き込むにはprotectコマンドでプロテクトを外す方法、バンクを切り替えてFE700000に書き込んだ後にもとに戻す方法があります。
今回は間違いによる被害をうけないように後者の方法にします。
まず、ジャンパピンJ22EをオープンにしてMPC8349E-mITXの電源を入れデフォルトのu-bootを起動しておきます。
電源をいれると自動的にu-bootが起動後Linuxが起動してしまいますので、u-boot起動したら何かキーを押してu-bootのプロンプトがでている状態にしておきます。
=> printenv
printenvコマンドでethactとeth1addr等を確認します。
ethact=TSEC0 または TSEC1です。
TSEC0は外部RJ-45コネクタENET0に、TSEC1は外部RJ-45コネクタENET1-ENET5につながっています。
今回はTSEC0からtftpでダウンロードを行います。
=> setenv ethact TSEC0
ここでサーバ側の設定を行います。
上記で作成したu-boot.binをtftpでダウンロードできる環境を整えておきます。
またbootpでeth1addrでIPアドレスを取得できるように設定します。
今回はnetbsd 3.1/i386のdhcpdとtftpdを利用しました。
/etc/inetd.conf:
tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /tftpboot
/etc/dhcpd.conf:
host mpc5349e {
hardware ethernet XX:XX:XX:XX:XX:XX;
fixed-address 192.168.1.20;
next-server 192.168.1.2;
filename "cuImage";
option root-path "/export/mpc5349";
}
/tftpboot/
cuImage (本来はLinuxカーネルだが、とりあえずはダミーでも可)
u-boot.bin
なお、MPC5349E側のu-bootで手動でIPアドレスを設定することもできます。
次に、tftpでのu-bootのダウンロードからflashへの書き込みを行います。
bootpでIPアドレスを取得後、tftpで0x00200000番地にu-boot.binをダウンロードします。
その後、0xfe700000-0xfe7fffffを消去後、u-boot.binをコピー(flash書き込み)します。
=> bootp
Speed: 1000, full duplex
BOOTP broadcast 1
Using Freescale TSEC0 device
TFTP from server 192.168.1.2; our IP address is 192.168.1.20
Filename 'uImage'.
Load address: 0x200000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################
done
Bytes transferred = 1581657 (182259 hex)
=> tftp 200000 u-boot.bin
Speed: 1000, full duplex
Using Freescale TSEC0 device
TFTP from server 192.168.1.2; our IP address is 192.168.1.20
Filename 'u-boot.bin'.
Load address: 0x200000
Loading: ###############################################
done
Bytes transferred = 240144 (3aa10 hex)
=> erase fe700000 fe7fffff
done
Erased 23 sectors
=> cp.b 200000 fe700000 3aa10
Copy to Flash... done
=> cmp.b 200000 fe700000 3aa10
Total of 240144 bytes were the same
ここで、電源を落とします。
そしてジャンパピンJ22Eをもとの状態(ショート)にもどします。
再び電源をいれると新しいU-Bootが起動されます。
U-Boot 2008.10-rc2 (Sep 26 2008 - 16:52:42) MPC83XX
Reset Status: Software Hard, External/Internal Soft, External/Internal Hard
CPU: e300c1, MPC8349EA, Rev: 3.0 at 533.333 MHz, CSB: 266.666 MHz
Board: Freescale MPC8349E-mITX
UPMA: Configured for compact flash
I2C: ready
DRAM: 1 GB (DDR1, 64-bit, ECC off, 266.666 MHz)
FLASH: 16 MB
PCI: Bus Dev VenId DevId Class Int
00 10 1095 3114 0180 00
In: serial
Out: serial
Err: serial
Board revision: 1.0 (PCF8475A)
Net: TSEC0, TSEC1
IDE: Bus 0: .** Timeout ** (IDEには何もつながっていない)
MPC8349E-mITX>
新しいU-Bootではtftpflashという環境変数が設定されています。
次回からのu-bootのflashへの書き込みは、これを使うことで簡単にtftpからフラッシュに書き込みができます。
MPC8349E-mITX> setenv u-boot u-boot-hogehoge.bin
MPC8349E-mITX> run tftpflash
ここまででu-bootの更新ができました。
MPC8349E用のlinuxカーネルの作成は別エントリで書く予定です。
yellowback's blog 日時 : MPC8349E-mITXに Linux 2.6.26.5 をインストール
yellowback's blog 日時 : MPC8349E-mITX Linuxで1GBメモリを認識させる方法
yellowback's blog 日時 : MPC8349E-mITXのU-Bootのdateコマンドの表示がおかしい
yellowback's blog 日時 : u-boot 2008.10をインストール