OpenBlocksに関するページです。

OpenBlocksとは

ぷらっとホーム社が発売しているマイクロサーバの総称。初代のOBS50から現在のOpenMicroServerまで数種類のモデルが存在する。その大きさと自由度の高さから、一時期ちょっとしたブームになった。

シリアルコンソール

9600baud, 8 bit, stop bit 1, parity none
LinuxではJerminalが便利。コンパイルして、/usr/local/bin/にでも放りこんでおく。

Jerminalのインストール

$ wget http://www.bsddiary.net/jerm/jerm-8095.tar.gz
$ tar jerm-8095.tar.gz
$ cd jerm-8095
$ make JUPITER_FLAGS=
$ sudo cp jerm /usr/local/bin/

Ubuntuでは/dev/ttyS?とか/dev/ttyUSB?などのCOMポートへのアクセスが、rootとdialoutグループにしか許可されていないので、注意。

カーネルのコンパイル

[obu:01141] OBSS のカーネル再構築に記載された方法で行う。クロスコンパイル環境の構築などは、ここなどを参照のこと。

ramdiskイメージファイルの作成

プラットホーム社よりramdiskイメージファイルをダウンロードし、各自の環境に合わせて編集する。

  1. 必要なファイルのダウンロード
    # wget ftp://ftp.plathome.co.jp/pub/ssdlinux/0.3-STABLE/powerpc-obs200/installation/ramdisk.image.gz
    # wget ftp://ftp.plathome.co.jp/pub/ssdlinux/distfiles/linux-2.4.26.13-ppc-obs.patch.bz2
    # wget http://ring.maffin.ad.jp/archives/linux/kernel.org/kernel/v2.4/linux-2.4.26.tar.bz2
  2. カーネルソースの展開
    # tar jxvf linux-2.4.26.tar.bz2
    # cd linux-2.4.26
    # bzcat2 linux-2.4.26.13-ppc-obs.patch.bz2 | patch -p 1
  3. RAM DISK用イメージの確保
    # dd if=/dev/zero of=./ramdisk.image bs=1k count=16384
    ddの引数のcountに16384を渡していますが、これはぷらっとホームが提供 するRAM DISK用コマンドセットを展開するのに必要な最低限の容量です。 実際にRAM DISKを使用して運用する場合は、24576ぐらいで確保する 必要があるかもしれません。ただし、32768以上確保する場合は、カーネル 設定のCONFIG_BLK_DEV_RAM_SIZEを増やさなければならないかも しれません。
    # mke2fs -m 0 ./ramdisk.image
    mke2fs 1.19, 13-Jul-2000 for EXT2 FS 0.5b, 95/08/09 ./ramdisk.image is not a block special device. Proceed anyway? (y,n) と出るが、yを押して続行。
  4. RAM DISK用コンテンツの作成
    # mkdir rd
    # mount -o loop ./ramdisk.image ./rd
    # tar xzpf rd011206.tar.gz
    必要であれば./rdの中を変更します。 IPアドレスなどを変更されている場合などは、ここでそれを反映しておくと 便利です。
  5. 各種設定の変更
    1. eth0のIPアドレス(etc/ifconfig.eth0)
      vi ./rd/etc/ifconfig.eth0
    2. デファオルトゲートウェイ
      vi ./rd/etc/mygate
    3. ホスト名
      vi ./rd/etc/mygate
    4. ディスクパーティション
      vi ./rd/etc/fstab
  6. RAM DISK用イメージをビルド可能に
    # umount ./rd
    # dd if=./ramdisk.image bs=1k | gzip -v9 > ramdisk.image.gz
    # cp ramdisk.image.gz linux/arch/ppc/boot/images
  7. カーネル設定をぷらっとホーム提供のデフォルト設定に変更
    # cp linux-2.4.10-plathome-011119.config linux/.config
    # cd linux
    # make oldconfig
    カーネルの設定を変更したい場合は、ここで行います。make menuconfig などが使いやすいでしょう。Windowsのtelnetなどで入っている場合は 画面が崩れますので、export TERM=vt100などとコマンドラインで入力 してからやるとよいです。 モジュール化することも可能ですが、RAM DISKの中にそれを入れようと するとちょっとだけ面倒でしょう。
  8. カーネルビルド
    # make dep
    # make zImage.initrd
    # make modules
  9. RAM DISK起動
    # sync
    # shutdown -h now
    ここで、OpenBlockSSのshutdownがLEDインジケータで[2]になったまま ハングアップすることが確認されています。ですので、念のためsync コマンドは発行しておいて下さい。 AC電源を抜き差しして電源を再投入します。 ちゃんと起動したら、またshutdownします。(ファイルシステムの同期の ためで、それができるのであればどのような方法でもかまいません) またAC電源を抜き差しして電源を再投入しますが、このときはRAM DISK で起動するため、INITボタンをステータスインジケータの[6]が終了する まで押しつづけます。
  10. . 新カーネルの書き込み
    # cd /mnt/ide?/<ぷらっとホームから入手したファイルを置いた場所>
    # cd linux/arch/ppc/boot/images
    ビルドしたカーネルの場所に移動
    # flashcfg f zImage.initrd.treeboot check
    HDD上から書き込みをしていますが、RAM DISKに容量があれば このファイルを/tmpなどのRAM上に転送し、そこから書き込むほうが 無難です。
    # flashcfg c harddisk
  11. 動作確認 HDDでの起動、INITボタンを押してのRAM DISK起動に問題なければ 終了です。 起動していたら、dmesgコマンドでカーネルの起動メッセージを確認 できます。 現象によりますが、うんともすんとも言わなくなった場合、ディップスイッチ 切替によるファームウェアアップデートで戻せると思いますので、 マニュアルを参考にしてください。(たぶん)

お読みいただいている方で補足、コメント等ありましたらよろしくお願いします。

岡本剛和

カーネルの書き換え

bootp + tftp

bootpの設定

/etc/bootptabを編集

.default:\
	:hd=/home/obs200/boot:\
	:bf=zImage.initrd.treeboot:\
	:ds=192.168.10.1:\
        :sm=255.255.255.0:\
        :sa=192.168.10.155:\
        :gw=192.168.10.254:\
        :to=+32400:

obss:\
        :ht=ether:\
        :ha=00806D5119B9:\
        :ip=192.168.10.174:\
        :bf=zImage.initrd.treeboot-20051027-1:\
        :bs=auto:\
        :tc=.default:

DIP SW4をONにして起動する。

tftpdの設定

Debianではatftpdが便利。インストールすればinetd経由で起動するように自動的に設定されるが、bootpとの連携をとる必要がある。具体的には、/etc/inetd.confのtftpdの項をファームウェアのイメージファイルを置いておくディレクトリを/etc/bootptabの指定と合わせるということ。

#:BOOT: TFTP service is provided primarily for booting.  Most sites
#       run this only on machines acting as "boot servers."
tftp            dgram   udp     wait    nobody /usr/sbin/tcpd /usr/sbin/in.tftpd --tftpd-timeout 300 --retry-timeout 5     --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=7  /home/obs200/boot
bootps          dgram   udp     wait    root    /usr/sbin/bootpd        bootpd -i -t 120

書き換え

inetdのプロセスを kill -HUP してからOpenBlockSの電源を入れてしばらくすると、LEDがものすごい早さで回転して点滅し、やがて「2」→「6」と変化し、書き換わったカーネルで起動する。

直接FlashROMを書き換える

FTPを用いる方法

  1. ネットワーク上にFTPサーバを立ち上げ、そこにファームウェアを用意する。
  2. INITボタンを押しながらOBSの電源を入れ、RAMディスクをrootデバイスとして起動する。
  3. シリアルコンソールからroot(パスワードもroot)でログインする。
  4. ftpでファームウェアファイルをダウンロードする。
  5. 以下のコマンドで書き換える。
    # flashcfg f ファイル名 check

NFSを用いる方法

カーネルがNFSをサポートしていれば、作業は楽。

  1. ネットワーク上にNFSサーバを立ち上げ、そこにファームウェアを用意する。
  2. INITボタンを押しながらOBSの電源を入れ、RAMディスクをrootデバイスとして起動する。
  3. シリアルコンソールからroot(パスワードもroot)でログインする。
  4. NFSサーバの公開用ディレクトリをローカルマシン上にマウントする。
    # mkdir /mnt/nfs
    # mount -t nfs NFSサーバのIPアドレス:公開用ディレクトリ /mnt/nfs
  5. 以下のコマンドで書き換える。
    # flashcfg f ファイル名 check

kernel-2.6系の移植(未完)

plathomeのSSDLinuxに2.6.12までOBS200のパッチ残骸あり

RTC

OBS200ではI2C経由でDS1307をRTCとして利用している

  • カーネル2.6用Armadillo-9 パッチ
    2.6.12.2用のパッチがあり、drivers/i2c/chips/ds1307.cにDS1307用のコードが含まれている。なお、最近のカーネルではDS1307用のコードは drivers/rtc/rtc-ds1307.c に移っている。

MTD

ここにtaga氏がppcbootを移植した際に作成したmtdドライバあり。

segled_obs200.c

リンク

ブートシーケンス

arch/ppc/boot/simple/head.S

arch/ppc/boot/simple/relocate.S

arch/ppc/boot/simple/misc-embedded.c

load_kernel関数

  • embed_config関数(arch/ppc/boot/simple/embed-config.c)呼出し
    • OBS200のボード情報を取得して、構造体bpに入れる
    • UART0の初期化
  • LED表示を0にする
  • RAM容量、ブートモード、メモリ内部情報表示
    [decompress_kernel] Ramsize 64MB (0x04000000)
    [decompress_kernel] Entering hard disk mode. Root FS: hard disk
    
    loaded at:     00500000 00C0816C
    relocated to:  00400000 00B0816C
    board data at: 00B06124 00B0616C
    relocated to:  00405198 004051E0
    zimage at:     00405A79 00544D3A
    avail ram:     00B09000 04000000
  • コマンドライン表示
    Linux/PPC load: root=/dev/hda1
  • カーネル展開開始
    Uncompressing Linux...
  • LED表示を1にする
  • カーネル展開終了
    done
  • initrdとbi_recの重複調査(?)
  • カーネルブート開始表示
    Now booting the kernel
  • シリアルポートをクローズ

arch/ppc/kernel/head_4xx.S

_stext

start_here

  • early_init(arch/ppc/kernel/setup.c)
    do_cpu_ftr_fixupsを呼び出し
  • machine_init(arch/ppc/kernel/setup.c)
    platform_initを呼び出し
    • platform_init(arch/ppc/platform/4xx/obs200.c)
      ppc4xx_init(r3, r4, r5, r6, r7);
      ppc_md.setup_arch = obs200_setup_arch;
      ppc_md.setup_io_mappings = obs200_map_io;
      ppc_md.time_init = obs200_time_init;
      ppc_md.set_rtc_time = obs200_set_rtc_time;
      ppc_md.get_rtc_time = obs200_get_rtc_time;
      ppc_ide_md.ide_init_hwif = obs200_ide_init_hwif_ports;
  • MMU_init(arch/ppc/mm/init.c)を呼出し
    MMU:enter
    MMU:hw init
    MMU:mapin
    MMU:setio
    MMU:exit

リンク


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-11-27 (金) 00:41:04 (3714d)