玄箱でNetBSDを動かす Linkstation-mipsel

(このページの最終更新日: 2007-02-04)

実験用筐体


左下の黄色のスイッチがコンソール切り替え(J2から)
右下のコネクタがシリアルコンソール(3.5φステレオミニピンジャック;J1から)
台は玄箱

(目次)

LinkStation (MIPS) のメモ

MIPSなLinkStationたち

  • HD-LANv3
  • HD-HLANv2
  • HD-HLWG

ハードウェア

  • CPU
    • IDT 79RC32H434-400BC
      • MIPS32 4Kcコア
        • キャッシュはライトスルーのみ?
      • いろいろ内蔵
        • PCIコントローラ
        • SPI(マスタのみ)
        • I2C(未使用)
        • Ethenet MAC
        • UART(1つ)
        • DDRコントローラ(折角のDDRなのにバス幅は16ビット)
        • その他もろもろ
      • 浮動小数点サポートは無し(ソフトでエミュレート)
  • USBコントローラ(HD-HLANv2,HD-HLWG)
    • NEC D720101GJ
      • ehci & ohciドライバ
  • 電源管理
    • Freescale MC68HC908JL8
      • TeraStationと同じ
      • "NASIDT001"のマーク有り(HD-HLANv2)
      • 通常はUARTの先に接続されている
  • ATAコントローラ
    • ITE IT8211AF
      • TeraStationと同じ
        • iteideドライバ
      • よく見たらアクセスLEDのパターンが有る
  • RTC
    • RICOH RS5C348A
      • SPI接続
        • ドライバ無し(要作成)
        • 論理フォーマットはRS5C372とそっくり
  • Ethernet PHY
    • Realtek RTL8201CP
      • ukphyドライバ ?

メモリマップ(工事中)

  • 内部ペリフェラルレジスタマップ(オフセットは暫定値)
0x18000018 SYSID System Identification
0x18008000-0x1800800b Reset and Initialization
0x18008000 RESET Reset
0x18008004 BCV Boot configuration
0x18008008 CEA CPU error address
0x18010000-0x18010057 Device Controller
0x18018000-0x18018027 DDR Controller
0x18020000-0x18020007 PMBus Arbiter
0x18028000-0x1802803b Counter/Timers
0x18030030-0x1803003f System Integrity Functions
0x18038000-0x1803803f Interrupt Controller
0x18040000-0x18040077 DMA Controller
0x18048000-0x1804803b IPBus Arbiter
0x18050000-0x18050017 GPIO Controller
0x18058000-0x18058043 UART
0x18060000-0x1806024b Ethernet Interface
0x18068000-0x1806802b I2C
0x18070000-0x1807001b Serial Peripheral Interface
0x18078000-0x18078013 NVRAM(control)
0x1807a000-0x1807a07f NVRAM(memory area)
0x18080000-0x1808005f PCI Bus Interface
0x18088010-0x18088037 PCI Messaging Unit
  • RAM(以下はすべて同じものを指しているはず)
0x00000000-0x03ffffff 64MB (物理メモリ)
0x80000000-0x83ffffff 64MB kseg0
0xa0000000-0xa3ffffff 64MB kseg1

  • 現在のメモリマップ@NetBSD(IPBus側)
0x00000000-0x0fffffff 256MB DDR-SDRAM 先頭64MBにのみ実装
0x10000000-0x17ffffff 128MB PCI Memory
0x18000000-0x181fffff 2MB On-Chip Peripheral 上記参照
0x18200000-0x187fffff 6MB 未使用
0x18800000-0x18bfffff 4MB PCI I/O
0x18c00000-0x18ffffff 4MB (PCI Memory)
0x19000000-0x1fbfffff
0x1fc00000-0x1fffffff 4MB FLASH-ROM

NetBSDを移植するのに不足しているもの

  • ブートローダー(済)
  • CPUサポート(汎用コードを使用)
    • メモリ周り初期化(済)
    • PCIバス周り初期化(済)
    • 割り込み周り初期化(済)
    • UART(シリアル)ドライバ(済)
    • Ethernet (MAC)ドライバ(済)
    • SPIドライバ
      • idtspiドライバ(仮称)
      • GPIOも同時に触る必要あり
  • RTC@SPIドライバ
    • rs5c348rtcドライバ(仮称)
  • (移植者の気力・体力・時間・知識・その他もろもろ)
    • 最後にMIPSを触ったのは9年くらい前かな…完全に忘れている…

移植のベースとするのはどれが良いか

  • MIPS-LinkStationは『IDT 79EB434 評価ボード』をベースにしたらしい。
  • 既存のMIPS(Little Endian)な移植
    • algor
      • Algorithmics, Ltd.の評価ボード用(P-4032, P-5064, P-6032)
        • この会社、もう無い?
    • arc
      • Advanced RISC Computing仕様の装置(ワークステーション?)用
    • cobalt
      • コバルトキューブ用
    • evbmips
      • Malta評価ボード用
      • AlchemyのPB1000, PB1500
    • hpcmips
      • PDA用
    • playstation2
      • PlayStation2用
    • pmax
      • DECstation/DECsystem用
    • sbmips
      • Broadcomの評価ボード用
  • 定番としてevbmips以下に入れることになると思う。
    • MALTA上ではMIPS32 4Kcが動いているらしいのでこれをベースにする。
    • 他のものも勉強がてら眺めてみる。

ブートローダー実験


NetBSDカーネル移植実験


デバッグ方法の検討メモ

  • (カーネルを含めた)デバッグはシリアルコンソールが頼り。
    • コード上の各チェックポイントでシリアルコンソールに文字を出力し、どこまで到達したか、またはどのように分岐したかをチェックする。
    • シリアル周辺はLinux側で初期化されているため、気にせずポートへ出力すればよい(はず)。
      • cacheが無効なkseg1の0xb8058000にバイトライトすれば良い(はず)。
        • 『はず』ばかり orz
        • ブートローダー側(Linux kernel module)での動きは確認。
        • *((volatile unsigned char *)0xb8058000) = '@'; で@がシリアルに出力された。
      • 欲張ってたくさん出力しようとするとFIFOが溢れるので、ゆっくり出すか、そもそも欲張らないようにすべし。

電源管理のメモ (内容の信憑性は低い)

  • 電源スイッチON時: "IIII\\\\" (Boot ROMが出している)
  • mc_ctld開始時: "AAAAFFFFJJJJ>>>>VVVV" ">>>>ZZZZ"(←ACK)
  • 定期動作: "VVVV" (40秒間隔で繰り返し)
    • DISK FULL LEDの消灯だが、Watchdogへの餌やりになっている。
  • 電源管理プロセッサからのメッセージに対するACK: ">>>>ZZZZ" (これを返さないと電源が落ちる)

シリアルコンソール周辺情報


参考サイト


雑記(妄想)

  • ブートローダーはnbloaderをベースで考える(insmodで対応)
    • MIPS依存なところはakmemのコードを参考にするつもり
    • MIPSアセンブラを再勉強する必要あり(レジスタは32ビットが32個だっけ?)
    • kseg0,1が有るので、ブート時にMMU周りは気にする必要は無いはず。
  • メモリや割り込みの初期化は必須
    • メモリの初期化はLinuxに頼っても良いかも
  • シリアルのサポートも(最初は)必須
    • 電源管理のためには必須。
    • 最初はコンソールにしておき、後で電源管理に向ける。
      • 向けた後はコンソールはNULLコンソールとしてログインはTelnet等、ネットワーク経由のみとする。
  • PCIバス初期化が出来ればハードディスクとUSBはOK
    • Ethernetは最初はUSB接続のみでも良いか
  • RTCはSPI接続なので最初はダミーで済ませる
  • MINI PCIをいじれたら面白そう
    • 普通のPCIコネクタ化出来ないかな?

資料


蛇足

Linux関連はこちらへ移動

  • ブートローダー実験メモ(初期)
  • Linuxカーネルのリコンパイル実験メモ(初期)
  • Debian化
  • パーティション入れ替えスクリプト

ハードウェア情報はこちらへ移動

  • 電源ユニット
  • へたりかけのFANを延命


48458