Pylone Blog
PE-201B販売終了について
平素より、弊社製品をお引き立ていただき厚く御礼申し上げます。
2010年6月8日をもちまして組込みLinux開発用CPUボード Bishop 6.4インチLCDタイプPE-201Bの販売を終了致します。
なお、4インチLCDタイプPE-201Aは引き続き販売を継続いたします。
今後とも、弊社ならびに弊社製品をご愛顧賜りますよう、お願い申しあげます。
本件に関するお問い合わせ
E-mail: sales@pylone.jp
年末年始休業のお知らせ
誠に勝手ではございますが、株式会社パイロンは2009年12月27日から2010年1月4日の間を休業とさせていただきます。ご迷惑をおかけいたしますが、よろしくお願いいたします。
PowerPCボードADS512101へのLinuxカーネルの移植
Freescale社製PowerPCボードADS512101へLinuxカーネルを移植する手順を紹介します。
Freescale社ではADS512101用のLinuxBSPを公開しており、ソースコードから環境を構築することが可能ですが、Linuxカーネルのバージョンが2.6.24と若干古いため、比較的新しいバージョンを移植することが目的です。
予め
- PowerPC向けクロス開発ツール
- tftpサーバ
をインストールした環境を前提とします。
尚、使用するU-Boot、及びLinuxカーネルのバージョンは以下のとおりです。
- U-Boot 2009.1
- Linuxカーネル 2.6.28
U-Bootのビルド
オフィシャルサイトからソースコードを取得し、展開します。
% wget ftp://ftp.denx.de/pub/u-boot/u-boot-2009.01.tar.bz2 % tar xjfv u-boot-2009.01.tar.bz2
ターゲットにADS5121を指定してビルドします。
% cd u-boot-2009.01 % make ads5121_config % CROSS_COMPILE=powerpc-linux-gnu- make
Linuxカーネルのビルド
オフィシャルサイトからソースコードを取得し、展開します。
% wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.tar.bz2 % tar xjfv linux-2.6.28.tar.bz2
ADS5121ボード用(v2.6.28向け)のパイロン製パッチを取得・適用します
% wget http://code.pylone.jp/hg/linux-2.6-ads5121-mq/raw-file/tip/ads5121 % cd linux-2.6.28 % patch -p1 < ../ads5121
カーネル設定ファイルを設置後、必要に応じて設定を変更しビルドします(デフォルトでU-Boot形式が生成されます)。
% cp arch/powerpc/configs/ads5121_defconfig .config % ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- make menuconfig % ARCH=powerpc CROSS_COMPILE=powerpc-linux-gnu- make
デバイスツリーのビルド
デバイスツリーとは簡単に説明すると、
- PowerPC/Linux固有の仕組みで、ボード依存のデバイス情報(I/Oアドレス等)を定義したもの
- デバイスツリーを定義したソースファイル(*.dts)をコンパイラ(dtc)にてコンパイルしバイナリファイル(*.dtb)を得る
- *.dtbファイルはLinuxカーネルイメージとは別にメモリ上に置かれ、Linuxカーネルはその内容からボードに関する各デバイス情報を把握する
といったものです。
デバイスツリーコンパイラはLinuxカーネルに含まれているため、以下の様にしてADS5121向けデバイスツリーソースをコンパイルします。
% cd (Linuxカーネルのディレクトリ)/arch/powerpc/boot % ./dtc -O dtb -o ads5121.dtb dts/mpc5121ads.dts
Flash更新
tftpに備えて、これまで生成したバイナリファイルを、tftpサーバのディレクトリ(/srv/tftp/とします)にコピーしておきます。
# cp (U-Bootのディレクトリ)/u-boot.bin /srv/tftp/ # cp (Linuxカーネルのディレクトリ)/arch/powerpc/boot/uImage /srv/tftp/ # cp (Linuxカーネルのディレクトリ)/arch/powerpc/boot/ads5121.dtb /srv/tftp/
シリアルコンソールとしてシリアルクロスケーブルをHostPCとボードを接続します。通信設定は以下のとおりです。
| ボーレート | 115200 |
|---|---|
| ビット長 | 8 |
| フロー制御 | なし |
| ストップビット | 1 |
ボードの電源を投入後、SW1を押下しボード標準のU-Bootを起動します。このとき、
Hit any key to stop autoboot:
のカウントダウンが開始されたらキャンセルします。
tftpに備え、必要に応じて環境変数を設定します。 (ここでは、tftpサーバとなるHostPCのIPアドレスを192.168.0.26、ボードのIPアドレスを192.168.0.120とします)
=> setenv netmask=255.255.255.0 => setenv ipaddr=192.168.0.120 => setenv serverip=192.168.0.26
先ほどビルドしたU-BootをFlashに書き込みます。FlashのI/O開始アドレスは 0xFC000000 で、内容は以下の様になっています。
| アドレス | セクタ番号 | 内容 |
|---|---|---|
| FC000000 | 0 | Protected |
| FC040000 | 1 | File system |
| FFC40000 | 241 | Linux カーネル |
| FFEC0000 | 251 | Device tree |
| FFF00000 | 252 | U-Boot |
| FFF40000 | 253 | U-Boot 環境変数 |
まず、更新するU-BootをRAM上のダウンロード領域(0x20000000)へダウンロードします。
=> tftp 2000000 u-boot.bin
Using FEC ETHERNET device
TFTP from server 192.168.0.26; our IP address is 192.168.0.120
Filename 'u-boot.bin'.
Load address: 0x2000000
Loading: ################################################
done
Bytes transferred = 241680 (3b010 hex)
そして、Flashのライトプロテクトを解除、該当のセクタを消去し、書き込みます。
=> protect off bank 1 => erase 1:252-252 => cp.b 2000000 fff00000 3b010
上記cpコマンドのサイズ(0x3b010)はtftpコマンドで実際に転送されたサイズを指定しています
Linuxカーネルを更新する場合も同様の手順になります。
=> tftp 2000000 uImage => protect off bank 1 => erase 1:241-250 => cp.b 2000000 FFC40000 <size>
FlashのライトプロテクトはU-Boot更新時に解除していますので続けて更新する場合は不要です。
デバイスファイルも同様の手順です。
=> tftp 2000000 mpc5121ads.dtb => protect off bank 1 => erase 1:251-251 => cp.b 2000000 FFEC0000 <size>
起動
ボード標準のU-Boot起動コマンドでFlash上のrootfsから起動するには以下の様にします。
=> run jffs2boot
カーネルコマンドラインを指定して起動する場合は以下の様にします
=> set bootargs console=ttyPSC0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2 mem=256M => bootm ffc40000 - ffec0000
bootmコマンドの引数はそれぞれ、
- ffc40000 : カーネルのアドレス
- - : initial ramdiskのアドレス(未使用なので省略を示す'-')
- ffec0000 : デバイスツリーのアドレス
と言う意味になります。
Flashを更新せずにRAMから起動する場合
デバッグ段階などで、Linuxカーネルやデバイスツリーを頻繁に更新するようなケースで、毎回Flashに書き込みをしていては非効率です。そこで両ファイルをFlashに書き込まずにRAMから起動する場合は以下の様にします。
=> tftp 2000000 uImage => tftp 3000000 ads5121.dtb => set bootargs console=ttyPSC0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2 mem=256M => bootm 2000000 - 3000000
または、Flash上のデバイスツリーファイルを使用する場合は、最後のbootmコマンドのデバイスツリーファイルのアドレスを、
=> bootm 2000000 - ffec0000
とします。
jffs2イメージをloopback mount
block2mtdドライバを使えば、jffs2イメージファイルをloopbackでmountできます。
erasesize 128K (131072) のrootfs.jffs2を/mntにmountする場合
mount:
# modprobe jffs2 # modprobe mtdblock # losetup /dev/loop0 rootfs.jffs2 # modprobe block2mtd block2mtd=/dev/loop0,131072 # mount -t jffs2 -o ro /dev/mtdblock0 /mnt
umount:
# umount /mnt # rmmod block2mtd # losetup -d /dev/loop0
TOPPERS/JSPカーネル for Bishop
組込みLinux開発用CPUボードBishop向けに移植したTOPPERS/JSPカーネルを公開します。使用したTOPPERS/JSPカーネルのバージョンは 1.4.3 です。
TOPPERS/JSPカーネルとは、μITRON4.0仕様に準拠したリアルタイムカーネルで、TOPPERSプロジェクトの開発成果です。 TOPPERS/JSPカーネルの詳細についてはTOPPERSプロジェクトサイトを参照してください。
株式会社パイロンが独自に配布する非公式なバージョンです。本ソフトウェアについてTOPPERSプロジェクトへの質問はお控えください。
今回の移植は実験的なものです。実用レベルに達していないことを予めご了承ください。
| TOPPERS/JSP カーネル for Bishop | |||
| toppers-jsp-bishop-1.4.3-pylone0.tar.bz2 ソースコード | 1.4.3-pylone0 | ダウンロード | 996.4KB |
| toppers-jsp-bishop-1.4.3-pylone0.bin ROMバイナリ | 1.4.3-pylone0 | ダウンロード | 28.0KB |
移植概要
ゼロからの移植ではなく、標準TOPPERS/JSPカーネルに既に含まれる同一のCPUコアを持つシステムをベースにして移植を行いました。 BishopのCPUコアはARM920Tであるため、ベースにするシステムはIntegrator/AP+CM920Tとしました。
また、サポートしたデバイスは、TOPPERS/JSPカーネルの動作が最低限確認出来るものとして、
- インターバルタイマ
- UART
のみとしました。
Bishopエミュレータによる実行
Bishopエミュレータにて実行する手順です。 予めBishopエミュレータをインストールしたLinux環境を想定しています。
Windows上のBishopエミュレータでの実行手順、及びBishopボードでの実行手順に関しては後述の関連リンクを参照してください。
前述のTOPPERS/JSPカーネルのROMバイナリファイルをダウンロードして、ダウンロードしたディレクトリに移動後、
$ mv toppers-jsp-bishop-1.4.3-pylone0.bin u-boot.bin
としてファイル名称を変更して、
$ qemu-bishop -M pe201a -serial stdio -kernel dummy -mtdblock /dev/null -nographic
としてqemu-bishopを起動します。この時、
failed to open: led.img failed to open: led.img failed to open: led.img failed to open: led.img failed to open: pe201a.img bishop_reset: splash image splash480.bmp.gz was not found bishop_reset: failed to load a kernel image file
と、qemu-bishopがメッセージを出力しますがTOPPERS/JSPカーネルの動作に影響はありません。
次いで、
TOPPERS/JSP Kernel Release 1.4 (patchlevel = 3) for ARM - Pylone Bishop board (Feb 24 2009, 15:21:58)
Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
Toyohashi Univ. of Technology, JAPAN
Copyright (C) 2004-2006 by Embedded and Real-Time Systems Laboratory
Graduate School of Information Science, Nagoya Univ., JAPAN
System logging task is started on port 1.
Sample program starts (exinf = 0).
task1 is running (001). |
task1 is running (002). |
task1 is running (003). |
とTOPPERS/JSPカーネルのバナー、及びTOPPERS/JSP付属のサンプルプログラムからのシリアル出力が表示されると思います。
サンプルプログラムは起動中の3つのタスクに関する指示を与えられるようになっており、 例えばレディーキューを回転する'r'を入力すると、task1からtask2へと実行状態のタスクが切り替わります。
Sample program starts (exinf = 0). task1 is running (001). | task1 is running (002). | task1 is running (003). | #rot_rdq(three priorities) task2 is running (001). + task2 is running (002). + task2 is running (003). +
サンプルプログラムの詳細に関しては、TOPPERS/JSPカーネルソースコード内の sample/sample1.c 冒頭のコメント文を参照してください。
TOPPERS/JSPカーネルに標準で付属するWindows上で動作するシミュレータでもタスクの状態を検証する事が出来ると思いますが、今回のBishopエミュレータによる実行も併用すれば、実機によるデバッグをさらに軽減することが出来ると思います。