AP-SH4A-4A Linux BSPチュートリアル 1. 仕様 CPUボード : アルファプロジェクト製AP-SH4A-4A CPU : SH7734 RS232レベル変換ユニット : アルファプロジェクト製PC-RS-04 ホストPC環境 : Ubuntu10.04LTS Linuxカーネル : Linux 3.5.0 U-Boot(ブートローダ) : U-Boot 2012.07-rc2 ルートファイルシステム : buildroot-2012.05 クロス開発環境 : buildroot-2012.05 ***GCC 4.7 ***binutils 2.22 ***uClibc 0.9.33 ***kernel-headers 3.3 パッケージ libncurses5-dev g++ bison flex gettext texinfo patch git-core (その他必要なパッケージは適宜インストールしてください) サーバ TFTPサーバ (TFTPサーバのインストールおよび設定方法につきましては、インターネット上で 検索してください) 以下の手順において、ユーザ名はguestとなっております。 2. クロス開発環境 2.1 クロス開発環境(ツールチェイン)の構築 SH4用のクロス開発環境(ツールチェイン)を『buildroot』を使用して構築します。 同時にルートファイルシステムの構築も行います。 (1) ホストPC上にAP-SH4A-4Aの作業ディレクトリを作成します。 PC$ mkdir ~/AP-SH4A-4A PC$ cd ~/AP-SH4A-4A PC$ sudo mkdir /opt/alphaproject PC$ sudo chown guest:guest /opt/alphaproject PC$ (2) ホストPC上の作業ディレクトリ『AP-SH4A-4A』にAP-SH4A-4A用buildroot 『buildroot-2012.05-ap.tar.gz』をダウンロードします。 (3) 『buildroot-2012.05-ap.tar.gz』を解凍し、buildrootのディレクトリに 移動します。 PC$ tar -xzpf buildroot-2012.05-ap.tar.gz PC$ cd buildroot-2012.05-ap (4) buildrootのAP-SH4A-4A用設定データを読み出します。 PC$ make apsh4a4a_toolchain_defconfig ・ ・ ・ PC$ (5) AP-SH4A-4A用クロスコンパイラを構築します。 終了までに数時間かかる場合があります。 PC$ make ・ ・ ・ PC$ 2.2 クロス開発環境の設定 U-Boot、Linuxカーネルのコンパイルのために作成したAP-SH4A-4A用クロスコンパイラ のパスを設定します。 (1) AP-SH4A-4A用クロスコンパイラのパスを設定します。 パス設定は一時的な設定なので、端末を終了すると設定が無効になります。 PC$ export PATH=/opt/alphaproject/sh4-cross/usr/bin:$PATH PC$ (2) AP-SH4A-4A用クロスコンパイラのバージョンを確認します。 PC$ sh4-linux-gcc -v 組み込み spec を使用しています。 COLLECT_GCC=sh4-linux-gcc COLLECT_LTO_WRAPPER=/opt/alphaproject/sh4-cross/usr/libexec/gcc/sh4-unknown-linux-uclibc/4.7.0/lto-wrapper ターゲット: sh4-unknown-linux-uclibc configure 設定: /home/guest/AP-SH4A-4A/buildroot-2012.05-ap/output/toolchain/gcc-4.7.0/configure --prefix=/opt/ ................. スレッドモデル: posix gcc バージョン 4.7.0 (Buildroot 2012.05) PC$ 3. U-Boot 3.1 U-Bootの作成 AP-SH4A-4A用U-Bootの作成を行います。 (1) クロス開発環境の構築時に作成したAP-SH4A-4Aの作業ディレクトリに移動します。 PC$ cd ~/AP-SH4A-4A (2) ホストPC上の作業ディレクトリ『AP-SH4A-4A』にAP-SH4A-4A用u-boot 『u-boot-2012.07-rc2-ap.tar.gz』をダウンロードします。 (3) 『u-boot-2012.07-rc2-ap.tar.gz』を解凍し、U-Bootのディレクトリに移動 します。 PC$ tar -xzpf u-boot-2012.07-rc2-ap.tar.gz PC$ cd u-boot-2012.07-rc2-ap (4) u-bootの作成を行います。 PC$ make ap_sh4a_4a ・ ・ ・ PC$ (5) コンパイルが正常に終了するとバイナリイメージ『u-boot.bin』、ELF イメージ 『u-boot』、モトローラS-Record フォーマット『u-boot.srec』が作成されます。 PC$ ls u-boot.bin u-boot u-boot.srec u-boot u-boot.bin u-boot.srec PC$ PC$ cp u-boot.bin /srv/tftp/u-boot-apsh4a4a.bin 3.2 ツールの設定 LinuxカーネルバイナリファイルをLinuxカーネルU-Boot用イメージに変換する『mkimage』 のパス設定を行います。 (1) U-Boot 用イメージ作成ツール『mkimage』が作成されていることを確認します。 PC$ ls tools/mkimage tools/mkimage PC$ (2) 『mkimage』のパスを設定します。 パス設定は一時的な設定なので、端末を終了すると設定が無効になります。 PC$ export PATH=~/AP-SH4A-4A/u-boot-2012.07-rc2-ap/tools:$PATH PC$ 4. ルートファイルシステム 4.1 ルートファイルシステムの作成 『buildroot』を使用してルートファイルシステムの構築を行います。 (1) ホストPC上のbuildrootのディレクトリに移動します。 PC$ cd ~/AP-SH4A-4A/buildroot-2012.05-ap PC$ (2) buildrootのデフォルト設定データを呼び出します。 (最初にルートシステムを作成する場合のみ行います。) PC$ make apsh4a4a_defconfig (ツールチェーンが消えないようにするため設定 ファイルを読み込みます) PC$ make distclean (作成されてツールチェンは残して、クリアします) PC$ make apsh4a4a_defconfig (再度ルートファイルシステムを作成するための 設定ファイルを読み込みます) (3) buildrootのコンフィグレータを起動します。 PC$ make menuconfig 必要に応じてデフォルトの設定を変更します (4) AP-SH4A-4A用ルートファイルシステムのネットワーク設定を変更します。 『./output/target/etc/network/interfaces』ファイル を変更します。 (5) AP-SH4A-4A用ルートファイルシステムを構築します。 PC$ make ・ ・ ・ PC$ (6) AP-SH4A-4A用ルートファイルシステムを確認します。 PC$ ls output/images/rootfs.cpio.gz output/images/rootfs.cpio.gz PC$ (7) AP-SH4A-4A用ルートファイルシステムを『/nfs』ディレクトリにコピー します。 PC# sudo mkdir /nfs PC# sudo chown guest:guest /nfs PC# cp output/images/rootfs.cpio.gz /nfs/rootfs-apsh4a4a.cpio.gz PC# ※ルートファイルシステムは、Linuxカーネルに組み込まれます。 そのため、ルートファイルシステムを変更した場合は、その後に5章のLinux カーネルの作成を行う必要があります。 5. Linuxカーネル 5.1 Linuxカーネルの作成 AP-SH4A-4A用Linuxカーネルの作成を行います。 (1) クロス開発環境の構築時に作成したAP-SH4A-4Aの作業ディレクトリに移動 します。 PC$ cd ~/AP-SH4A-4A (2) ホストPC上の作業ディレクトリ『AP-SH4A-4A』にAP-SH4A-4A用Linuxカーネル 『linux-3.5_for_apsh4a4a.tar.gz』をダウンロードします。 (3) 『linux-3.5_for_apsh4a4a.tar.gz』を解凍し、linuxのディレクトリに移動 します。 PC$ tar -xzpf linux-3.5_for_apsh4a4a.tar.gz PC$ cd linux-3.5_for_apsh4a4a (4) LinuxカーネルのAP-SH4A-4A用設定データを読み出します。 PC$ ARCH=sh make apsh4a4a_defconfig ・ ・ ・ # # configuration written to .config # PC$ (5) Linuxカーネルのコンフィグレータを起動します。 PC$ ARCH=sh make menuconfig (6) Linuxカーネルのコンフィグレータにて『Exit』を選択し、コンフィグレータを 終了します。 (7) Linuxカーネルの作成を行います。 PC$ ARCH=sh CROSS_COMPILE=sh4-linux- make uImage ・ ・ ・ PC$ ※4章で/nfsにコピーしたルートファイルシステムがuImageに組み込まれます。 (8) コンパイルが正常に終了すると『./arch/sh/boot』ディレクトリにLinux カーネル イメージ『uImage』が作成されます。 PC$ ls arch/sh/boot/uImage arch/sh/boot/uImage PC$ 5.2 Linuxカーネルのコピー LinuxカーネルバイナリファイルはTFTPを利用してダウンロードします。 (1) Linux カーネルイメージ『uImage』をTFTPサーバディレクトリ/srv/tftpにコピー します。 PC$ cp arch/sh/boot/uImage /srv/tftp/uImage-sh4a4a PC$ 6. システムの起動 6.1 シリアルコンソール設定 ボーレート : 115200 bps データ : 8ビット パリティビット : なし ストップビット : 1ビット フロー制御 : なし 6.2 ネットワーク設定 CN6(GigabitEthernet) IPアドレス : 192.168.128.200 サブネットマスク : 255.255.255.0 ゲートウェイ : 192.168.128.254 6.3 U-Bootの起動(tfpdでダウンロードしアップデートする場合は6.5を参照) U-BootをAP-SH4A-4Aのフラッシュロムに書込み、起動します。 (1) AP-SH4A-4Aの SW2を『1:ON, 2:ON, 3:ON, 4:ON, 5:OFF,6:ON, 7:OFF,8:ON 』に、 SW3を『1:ON, 2:ON, 3:ON, 4:ON, 5:ON, 6:ON, 7:ON, 8:ON 』に、 JSW2を『AUTO』に、 JSW3を『ON』に、 JSW4を『HOST』に、それぞれ設定します。 (2) JTAGデバッガで作成した『u-boot-apsh4a4a.bin』ファイルをAP-SH4A-4Aの フラッシュロムの先頭番地に書込みます。 (3) AP-SH4A-4AのCN10とRS232レベル変換ユニット『PC-RS-04』を接続し、PC-RS-04と ホストPCをシリアルケーブルで接続します。 (4) ホストPC上でTeraTermやminicomなどのシリアルターミナルソフトを起動し、 『6.1 シリアルコンソール設定』に合わせて、シリアルの設定を行います。 (5) AP-SH4A-4Aの電源を入れ、U-Bootを起動します。 U-Boot 2012.04.01 (Jun 26 2012 - 02:12:22) CPU: SH4 CPU Clock: 400MHz BOARD: Alpha Project. AP-SH4A-4A DRAM: 64MB Flash: 16MB In: serial Out: serial Err: serial Net: sh_eth => 6.4 u-boot ネットワーク設定 U-Bootとネットワークを使用してu-booot、Linuxカーネル、ルートファイルシステムを AP-SH4A-4Aのフラッシュロムに書込むための、ネットワーク設定をします。 (1) AP-SH4A-4AとホストPCをネットワークに接続します。 (2) AP-SH4A-4Aの電源を入れ、U-Bootを起動します。 (3) U-Boot上でネットワークを設定します。 U-Bootのネットワーク設定は『6.2 ネットワーク設定』、ホストPCのIPアドレス は『192.168.128.201』とします。 => setenv ipaddr 192.168.128.200 => setenv netmask 255.255.255.0 => setenv serverip 192.168.128.201 => saveenv Saving Environment to Flash... Un-Protected 1 sectors Erasing Flash... . done Erased 1 sectors Writing to Flash... done Protected 1 sectors => pingコマンドでサーバに接続できるかどうか確認します。 => ping 192.168.128.201 sh_eth:0 is connected to sh_eth. Reconnecting to sh_eth sh_eth Waiting for PHY auto negotiation to complete... done sh_eth: 1000Base/Full Using sh_eth device host 192.168.128.201 is alive 6.5 u-bootの書き込み(アップデート) (1) U-BootからTFTPでu-bootをダウンロードします。 ホストPC上ではTFTPサーバが動作していることを前提としています。 => tftp 88800000 u-boot-apsh4a4a.bin (2) u-bootを格納するフラッシュロムの領域のプロテクトを解除します。 => protect off A0000000 +$(filesize) Un-Protected 48 sectors => (3) u-bootを格納するフラッシュロムの領域を消去します。 => erase a0000000 +$(filesize) ................................ done Erased 48 sectors => (4) ロードしたu-bootをフラッシュロムに保存します。 => cp.b $(fileaddr) a0000000 $(filesize) Copy to Flash... done => 6.6 カーネルの書き込み (1) U-BootからTFTPでLinuxカーネルをダウンロードします。 ホストPC上ではTFTPサーバが動作していることを前提としています。 => tftp 88800000 uImage-sh4a4a sh_eth Waiting for PHY auto negotiation to complete... done sh_eth: 1000Base/Full Using sh_eth device TFTP from server 192.168.128.201; our IP address is 192.168.128.200 Filename 'uImage-sh4a4a'. Load address: 0x88800000 Loading: ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ######################## done Bytes transferred = 6109836 (5d3a8c hex) => (2) Linuxを格納するフラッシュロムの領域のプロテクトを解除します。 => protect off A0100000 +$(filesize) Un-Protected 47 sectors (3) Linuxを格納するフラッシュロムの領域を消去します。 => erase a0100000 +$(filesize) ............................................... done Erased 47 sectors (4) ロードしたLinuxカーネルU-Boot用イメージをフラッシュロムに保存します。 => cp.b $(fileaddr) a0100000 $(filesize) Copy to Flash... done 6.7 Linuxの起動 (1) U-Bootのブートコマンドを設定します。 => setenv bootargs 'console=ttySC4,115200 mem=64M root=/dev/ram' => setenv bootcmd 'bootm a0100000' => saveenv (2) AP-SH4A-4Aの電源を再投入し、Linuxを起動します。 U-Boot 2010.06-rc1 ( 7月 12 2010 - 16:18:30) CPU: SH4 BOARD: ALPHAPROJECT AP-SH4A-3A DRAM: 64MB FLASH: 16MB In: serial Out: serial Err: serial Net: smc911x-0 Hit any key to stop autoboot: 0 ## Booting kernel from Legacy Image at a0100000 ・ ・ ・ Welcome to Buildroot buildroot login: (3) ログイン画面で「root」でログインします。