2007年7月28日:本記事にてご案内した uClibc によるルートファイルシステムは中止させていただきました。
Bishop の NAND フラッシュメモリにプリインストールされるルートファイルシステムは buildroot によって作られたものです。 現在検討中の構成は以下の通りです。
詳細につきましては、正式決定後に製品情報ページや本ブログにてお知らせいたします。
buildroot とは uClibc の作者である Erik Andersen 氏によって開発されたルートファイルシステムを作成するための仕組みで、様々なプログラムを uClibc でビルドするための Makefile や patch で構成されています。
Bishop のブートローダ U-Boot は前身であるPowerPC用ブートローダ ppcboot を他のアーキテクチャにも対応させた組込み向け汎用ブートローダです。 tftpによるネットワークブートなどブートローダとしての機能に加え、 USB、MMC、IDE、MII、PCMCIA、NAND、I2C、SPI など様々なデバイスやバスに対応 したモニタプログラムでもあります。
U-Boot の特筆すべき点は移植性の高さです。アーキテクチャに依存する部分と非依存の部分が分離されているため、コアアーキテクチャさえ対応していれば新しい CPU への対応も比較的少ない作業で済みます。また、デバイスドライバが豊富に用意されているため、対応しているデバイスであればデバイス固有のパラメータを与えるだけで動いてしまう事が多いです。例として、実際に U-Boot を Bishop へ移植した際に追加したコードの一部をご紹介します。
DM9000 のドライバは common/dm9000x.c です。ターゲットで動かすためにはアドレスとバス幅を指定します。
include/configs/bishop.h:
#define CONFIG_DRIVER_DM9000 1 /* ドライバを有効化 */ #define CONFIG_DM9000_BASE 0x20000300 #define DM9000_IO CONFIG_DM9000_BASE /* アドレス (I/O) */ #define DM9000_DATA (CONFIG_DM9000_BASE + 4) /* アドレス (データ) */ #define CONFIG_DM9000_USE_32BIT 1 /* バス幅 */
NAND のドライバは drivers/nand/ です。動かすためにはチップの数と NAND コントローラのベースアドレスを指定し、NAND コントローラ固有の処理を追加します。
include/configs/bishop.h:
#define NAND_MAX_CHIPS 1 #define CFG_MAX_NAND_DEVICE 1 #define CFG_NAND_BASE 0x4E000010
board/pylone/bishop/nand.c:
#include <common.h>
#if (CONFIG_COMMANDS & CFG_CMD_NAND) && !defined(CFG_NAND_LEGACY)
#include <nand.h>
#include <s3c2440.h>
static int hwctl = 0;
static void bishop_hwcontrol(struct mtd_info *mtdinfo, int cmd)
{
S3C2440_NAND * const reg = S3C2440_GetBase_NAND();
switch (cmd) {
case NAND_CTL_SETCLE:
hwctl |= 0x1;
break;
case NAND_CTL_CLRCLE:
hwctl &= ~0x1;
break;
case NAND_CTL_SETALE:
hwctl |= 0x2;
break;
case NAND_CTL_CLRALE:
hwctl &= ~0x2;
break;
case NAND_CTL_SETNCE:
reg->NFCONT = reg->NFCONT & 0xfffffffd;
break;
case NAND_CTL_CLRNCE:
reg->NFCONT = reg->NFCONT | 2;
break;
}
}
static void bishop_write_byte(struct mtd_info *mtdinfo, u_char byte)
{
S3C2440_NAND * const reg = S3C2440_GetBase_NAND();
if (hwctl & 0x1)
reg->NFCMMD = byte;
else if (hwctl & 0x2)
reg->NFADDR = byte;
else
reg->NFDATA = byte;
}
static u_char bishop_read_byte(struct mtd_info *mtdinfo)
{
S3C2440_NAND * const reg = S3C2440_GetBase_NAND();
return reg->NFDATA;
}
static int bishop_dev_ready(struct mtd_info *mtdinfo)
{
S3C2440_NAND * const reg = S3C2440_GetBase_NAND();
while (!(reg->NFSTAT & 1));
return 1;
}
void board_nand_select_device(struct nand_chip *nand, int chip)
{
S3C2440_NAND * const reg = S3C2440_GetBase_NAND();
reg->NFCONT = reg->NFCONT & 0xfffffffd;
return;
}
int board_nand_init(struct nand_chip *nand)
{
S3C2440_NAND * const reg = S3C2440_GetBase_NAND();
nand->eccmode = NAND_ECC_SOFT;
nand->hwcontrol = bishop_hwcontrol;
nand->read_byte = bishop_read_byte;
nand->write_byte = bishop_write_byte;
nand->dev_ready = bishop_dev_ready;
reg->NFCONF = 0x0300;
reg->NFCONT = 0x0063;
return 0;
}
#endif /* (CONFIG_COMMANDS & CFG_CMD_NAND) && !CFG_NAND_LEGACY */前回の記事で JTAG-ICE を使わないでフラッシュメモリに書込む方法をご紹介しましたが、実際の開発では JTAG-ICE を用いたデバッグのニーズも多いかと思います。基本的には ARM920T コアを サポートしている JTAG-ICE であれば使用可能ですが、コアだけに対応して CPU 固有 のペリフェラルに対応していない JTAG-ICE では使い勝手はあまりよくありません。
Bishop の推奨 JTAG-ICE は
ビットラン株式会社様
の DR-01 です。
DR-01 の
デバッガソフト
は CPU 固有のペリフェラル定義を簡単に追加できます。
パイロンでは S3C2440 用ペリフェラル定義ファイルを公開する予定です。
このペリフェラル定義ファイルをデバッガソフトに追加することによって、直感的なユー
ザインタフェースで S3C2440 のペリフェラルレジスタへアクセスできます。
2008/06/07: ペリフェラル定義ファイルを公開
Bishop にプリインストールされるブートローダ U-BootはOSのブートだけでなくフラッシュメモリの書き込みもできます。フラッシュメモリ上のLinuxカーネルやルートファイルシステムを書き換えるにはU-Bootを使うのがもっとも簡単な方法です。
U-BootによってU-Boot自体を書き換える事も可能ですが、書き込みに失敗した場合は起動できなくなります。お客様がU-Bootを上書きした事による起動の不具合についてはサポート対象外とさせていただきます。
オプションとして販売予定のダウンロードケーブルとライタープログラムを使えば、 PC からNORフラッシュメモリへ書き込む事ができます。U-Bootを使った書き込みでは U-Boot自体の上書きが失敗した場合に起動できなくなってしまいますが、本ケーブルを使えば起動できない状態でも書き込むことができます。フラッシュメモリ書き込みのためだけにJTAG-ICEを購入する必要はありません。
Bishop
のフラッシュメモリは 4MB の NOR 型 と 128MB の NAND 型です。
NOR は S3C2440 のメモリコントローラに直接つながり、
NAND は S3C2440 の NAND コントローラによって制御されます。
S3C2440 のリセットベクタはメモリコントローラのバンク0 (ROM/RAM の先頭)になります。出荷状態の Bishop では バンク0 は NOR になっていますので、ブートローダは NOR にインストールされます。S3C2440 の Stepping Stone と呼ばれる機能により NAND からもブート可能ですが、Bishop では Stepping Stone をサポート対象外とさせていただきます。
Bishop にはタッチパネルと LCD (TFT) が付属します。サイズは2種類です。
| サイズ | 解像度 |
|---|---|
| 6.4インチ | 640x480 (VGA) |
| 4インチ | 480x272 |
6.4インチ (写真) はボードとほぼ同じサイズで解像度は VGA です。
4インチは QVGA をワイドにした感じの 480x272 というちょっと変わった解像
度です。PSP
と同じ解像度といえばわかりやすいでしょうか。
タッチパネルからの入力は Linux Input Drivers が提供する仕組みによって 特定のデバイスに依存しない抽象的なイベントとして扱うことができます。 /dev/input/event0 や /dev/input/ts0 に対応したアプリケーションであれば修正す ることなくタッチパネルを使えるでしょう。 サンプルアプリケーションとしてタッチパネルを 利用した手書き入力やソフトウェアキーボードなどもご用意させていただく予定です。
Bishop の CPU は ARM920T コアの
SAMSUNG S3C2440 400MHz です。価格が安く、海外のポータブルナビ市場におけるシェ
アが高いことで知られています。この S3C2440 は SAMSUNG の CPU ラインナップの中
でモバイル SoC と位置付けられ、モバイル機器に必要とされる標準的なペリフェラル
を内蔵しています。 Bishop の LCD、タッチパネル、MMC/SD、USB、オーディオなどの
機能も S3C2440 の内蔵ペリフェラルによるものです。
これから何回かにわたって、7月発売予定の組込み Linux 開発用 CPU ボード Bishop についての情報をお伝えしたいと思います。予定している内容は以下の通りです。