Pylone Blog - タグ:software

CPU ボード Bishop (10)『Debian GNU/Linux』

Debian 前回の記事 でご紹介した uClibc によるルートファイルシステムとは別に Debian GNU/Linux 環境もご提供させていただく予定です。

組込み Linux 開発において、アプリケーションのクロスコンパイルだけでそれなりの 時間を取られてしまった経験のある開発者の方も多いかと存じます。 Debian の豊富な バイナリパッケージをお使いいただければ製品企画段階のデモ機作成などが手軽に行え ます。

CPU ボード Bishop (8) 『U-Boot』

Bishop のブートローダ U-Boot は前身であるPowerPC用ブートローダ ppcboot を他のアーキテクチャにも対応させた組込み向け汎用ブートローダです。 tftpによるネットワークブートなどブートローダとしての機能に加え、 USB、MMC、IDE、MII、PCMCIA、NAND、I2C、SPI など様々なデバイスやバスに対応 したモニタプログラムでもあります。

U-Boot の特筆すべき点は移植性の高さです。 アーキテクチャに依存する部分と非依存の部分が分離されているため、 コアアーキテクチャさえ対応していれば 新しい CPU への対応も比較的少ない作業で済みます。 また、デバイスドライバが豊富に用意されているため、 対応しているデバイスであれば デバイス固有のパラメータを与えるだけで動いてしまう事が多いです。 例として、実際に U-Boot を Bishop へ移植した際に追加したコードの一部をご紹介します。

LANコントローラDM9000

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

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 */

CPU ボード Bishop (6) 『フラッシュメモリの書き込み』

U-Bootによる書き込み

Bishop にプリインストールされるブートローダ U-BootはOSのブートだけでなくフラッシュメモリの書き込みもできます。フラッシュメモリ上のLinuxカーネルやルートファイルシステムを書き換えるにはU-Bootを使うのがもっとも簡単な方法です。

U-BootによってU-Boot自体を書き換える事も可能ですが、書き込みに失敗した場合は起動できなくなります。お客様がU-Bootを上書きした事による起動の不具合についてはサポート対象外とさせていただきます。

ダウンロードケーブルによる書き込み

図

オプションとして販売予定のダウンロードケーブルとライタープログラムを使えば、 PC からNORフラッシュメモリへ書き込む事ができます。 U-Bootを使った書き込みでは U-Boot自体の上書きが失敗した場合に起動できなくなってしまいますが、本ケーブルを使えば起動できない状態でも書き込むことができます。 フラッシュメモリ書き込みのためだけにJTAG-ICEを購入する必要はありません。

CPU ボード Bishop (3) 『タッチパネルと LCD』

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 に対応したアプリケーションであれば修正す ることなくタッチパネルを使えるでしょう。 サンプルアプリケーションとしてタッチパネルを 利用した手書き入力やソフトウェアキーボードなどもご用意させていただく予定です。