いろいろ記録しておこう。
_ FlashROM まわりを少し直す。危険なので bank0 はプロテクトしておく。 プロテクトといってもソフトウェアレベルのもの。FlashROM 自身を プロテクトモードにしているわけではない。ので、安心してプロテクトする。
_ saveenv してみた。ちゃんと FlashROM に書き込めたようだ。
とりあえず更新。
_ Flash まわりをもう一度。なんとなく 0xffff0000 のセクタは deadbeaf なので プロテクトする。
_ ppcboot 用 Linux Kernel イメージを専用コマンドで作らなくてはならない。 README をよく読む。
tools/mkimage -n '2.2.13 on OpenBlockS' \ -A ppc -O linux -T kernel -C gzip -a 00000000 -e 0000000C \ -d somewhere/linux-2.2.13/arch/ppc/coffboot/vmlinux.gz \ image-2.2.13_ あらかじめ FlashROM を消しておく。そしてシリアルでダウンロード。 115200[bps] では無理。フローコントロールは効かない。38400[bps] なら O.K.
BOOT: erace ffe00000 ffe7ffff BOOT: setenv baudrate 38400 BOOT: loads ffe00000_ とりあえずイメージを認識してブートをかけられるようだ。
_ よくよく考えると linux/arch/boot/mbx でやっていることは ppcboot で やっておかないといけない。
_ というわけで以下を設定するべし。すると rtc/mpx8xx.c:void rtc_set(struct rtc_time *tmp) で設定できる・・・のか。
#define CONFIG_RTC_MPC8xx /* use internal RTC of MPC8xx */ #define CONFIG_COMMANDS ( CONFIG_CMD_DFL | \ CFG_CMD_DATE ) /*----------------------------------------------------------------------- * RTCSC - Real-Time Clock Status and Control Register 11-27 *----------------------------------------------------------------------- */ /* +0x0220 => 0x00C3 */ #define CFG_RTCSC (RTCSC_SEC | RTCSC_ALR | RTCSC_RTF| RTCSC_RTE)_ やはり CONFIG_I2C でなんとかするしかないようだ。
_ 時計の話:
ふらふらみていたら見つけた。にかなり強引なパッチをあてているぞ。これでずれないようにしているらしい。linux-es/arch/ppc/kernel/m8xx_setup.c:void m8xx_calibrate_decr(void)_ IDEの話:
CONFIG_ISA_IS_PCMCIA でして、PCMCIA インタフェースを使っていますなあ。 さすがにこれは使ったことがないのでよく分からん。読むしかないなあ。/* Define this to make a PCMCIA ATA Flash card work. */ #define ES 1 /* @@*/
SCCR[RTSEL] がたっていない ?
_ common/board.c:: void board_init_r(bd_t *bd, ulong dest_addr)
ここから呼び出される misc_init_r() で RTC と EEPROM を読むことにする。
また新しくなったみたいね。
起動する。Vine-2.1.5 使用。inetd 経由。 /etc/inetd.conf でコメントになっているので有効にする。 home として /tftpboot を作る。ファイルを置く。 ppcboot 用は mkimage しておくこと。
ppcboot 経由で動かすには、かなり手を加える必要がある。include/asm-ppc/obs.h の bd_t を ppcboot のものにあわせないといけない。bd_t の中身はすべて ppcboot で設定してポインタを直接 vmlinux に渡す。
linux/arch/boot/mbx はもはや使用しない。
うーん。どうしましょ。
tftpboot に成功。しかし途中で止まる。bd_t が不一致を起こしているので当然。
うーん。どうしましょ。
_ クロックの話:
組込み Linux/PPC はクロックを MHz でやっていた。で前に強引に Hz で OpenBlockS を動かした。ちゃんと MHz にしようと思っていたのだが。
どうもうまく動かないと思ったら baudrate がおかしい。いつのまにか 1000000 倍が消えている。ということは Hz で決めうちになっているじゃないか。
というわけで、Hz にしましょう。_ IDE の話:
たぶんセンチェリーさんとは違う形で実装されているような気がする。 include/asm-ppc/ の ivms8.h, spd8xx.h とかを読むべし。
config_OpenBlockS.h に CFG_CLKS_IN_HZ を追加する。これで 49152000 が カーネルに渡される。
MAC アドレス、RTC は後回し。とりあえず固定でやる。大事無い。
_ IDE の話:
全然違う。わけがわからん。センチュリーさんのコードだと結局こういうこと。#define ES #define ATA_FLASH #undef CONFIG_ISA_IS_PCMCIA
_ IDE の話:
かなり手間取ったが IDE で名前は取れた (IDENTIFY DEVICE COMMAND)。
よく分からないが、バイトスワップ (insw, outsw) しなくちゃいけないのか。 スワップなし (insw_ns, outsw_ns) では逆になる。
IDE というか ATA レジスタ群は 0x80000000 のあたり。16[bit] バス幅固定。 アドレスは 2[Byte] 境界切り。
IDE0_INTERRUPT を追加。したら動いた。_ restart 出来ない:
のは m8xx_restart() のあたりがうまくいっていないからだろう。 MMU を切って RTE しないとうまくいかないような。machine check exception で check stop state に入れて、リセットをかけようということ、らしいがどうかな。
_ DipSW の話:
ルートファイルシステムとして ramdisk を使うかハードディスクを使うかは、 DipSW で決める。
- arch/ppc/boot/mbx/misc.c でカーネルパラメータ (root=) を変更
- drivers/block/rd.c:identify_ramdisk_image() で ramdisk を識別するときに エラーにする
- init/main.c:root_dev_setup() へのパッチはいらないだろう。ic_enable は ip_auto_config() するときのため。
_ arch/boot/mbx:
ppcboot 互換に書き換え。_ fec の話:
何もしなくても動くのはすごい。 が、このままだと Link Status Change で割り込みが入らないようだ。 ということは、Auto Negotiation で全2重/半2重 が変わった時に対応できない だろう。速度は 10/100[MHz] が変わっても問題はない。まあめったに問題は でないので、よしとするか。
_ restart 出来ない:
この件は少し追いかけたが良く分からない。大体 shutdown -r now して LED がカウントダウンするのはどういうわけだ ??
というわけでパッチを作る。
そういえば来週ぐらいで OpenBlockS 発売1周年ですな。
そういえば gcc-3.0 も出たのにまだ gcc-2.95.2 だなあ。せめて gcc-2.95.3 ぐらいに上げようか。