トップ 最新 追記
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|10|12|
2009|02|03|06|07|10|11|12|
2010|01|02|03|04|07|09|10|11|12|
2011|01|03|04|05|06|07|08|10|
2012|01|06|08|09|10|12|
2013|01|02|03|04|07|09|11|12|
2014|01|03|04|05|06|09|
2015|04|
2016|01|08|
ここは旧えびめもです。えびめも2に移行します(2016/12/1)

2003年03月01日

CAT709

先日書いた IOIS16* 関連のALTERA改造&チェックを行った。

むぅ。一発OKとは行かなかったか。

サルサ

土曜日はエルココの日なのでエルココへ。でも人が少ない!先週に引き続き壊滅的に人がいない。10時過ぎにみんなアバナに梯子するといって出て行った(アバナは12時までなのでそのあとココに戻ってくるとさ)。俺は飯を食ってからアバナに行こうと思って外に出たところでばったりMさんに出会った。飲み会の帰りに踊りに来たのだって。ちょうど良かったよエルココには誰もいないよ〜ってことで二人でアバナに移動した。アバナは女性1000円デーでした。エルココからアバナに梯子するときは提携しているから1000円でよいので二人とも千円(W/1dr安っ!)

アバナは結構人がいて皆上手い。よしゃよしゃ(^-^)v。最近女性ステップ覚えたのでEMIKO先生にリードしてもらって男女逆で一曲踊りました。わははは。女性パートおもしれ〜。楽し〜。セテンタよりもソンブレロが気持ちよかったのが意外な発見!

12時過ぎ(12時半くらい?)で閉店したので撤退。女の子達はエルココに戻ってオールだと言ってたけどわたしゃ帰るよ(苦笑


2003年03月03日

CAT709

IOIS16*の問題でALTERAの改造に着手。生産のほうはSRAMがいまだに入手できなくて(*_*)段取りできない状態です。すいません。SRAMが入ればすぐにでもマウンターの段取りができるんですが、、

XAX

ボディーパンプ45に参加。マスタークラスから45分版に短縮になってしまったのでマッチョ系の男らは減ったように思う。確かに45分では物足りない。アームカールが無かったらつまらんなぁ。月曜のあの時間はマスタークラスのほうがにぎわってて良かったのに。

そうそう、腕の裏側は上腕二等筋と書いていたが三等筋の間違いだね。で、その腕の裏側(上腕三等筋)を虐めるマシンがあるのでBP45で足りない部分はマシントレイニングで補う。


2003年03月04日

CAT709

まだ納期回答が出ない。あ゛〜。

イーオン

今日はテキストを使わずに、improve your self (向上しよう)ってことでグループ討論だった。どうやって言葉を覚えるか?というテーマだった。ありがちな "単語カードを使って単語を覚える" という話をしてて「もう歳だもんで、新しい単語覚えられないんだよねぇ」と弱気を言ってたら、外人講師が「あんたらは文字覚えなくていいから楽だよ。俺日本語勉強してるけど、この歳になって文字覚えるのはつらいぜ」といって平仮名・カタカナをけなげに書いた単語カード見せてくれた。そうか、俺らは英語だろうがスペイン語だろうが文字は覚えなくていいもんな。スペルくらいなら音から想像できるし、多少間違えても通じるし。日本語覚えようとしている彼はまず文字から覚えなくてはならなくて、完全に丸暗記の世界だから相当苦労している。平仮名カタカナで100文字もあるもんな。

彼の努力に感動して「単語覚えれねーよ」と弱音を吐いている自分を恥じた。


2003年03月05日

CAT709

来週中には部品が全部そろいそうな感じになりました。(^^v。お待たせしている皆さんごめんなさい。やっとです。ALTERAの改造は金曜日にいろいろ試験を行うことになった。

サルサ

レディアン春日井にて初級・中級・上級と参加。

初級ではベーシックや右回り、エンチュフラなどの基本ステップを。

中級はソンブレロを中心とした基本的な技。上級では例のエルメスいってらっしゃい会で習ったやつ。

そのあとライムストーンで21:30〜25:00まで。チエちゃんというLAの踊り手の娘が来てくれたので久しぶりに盛り上がった。やす君も久々に来てくれた。ジャンキーも2ヶ月ぶりの参加!今日は久しぶりに盛り上がったなぁ写真とっておけばよかった。


2003年03月06日

カーネル空間コードのデバック自分用メモ

メジャーなツールとして以下の2種類がある

kdb(カーネルデバッカ)
カーネルに組み込んで使う
1台のPCで利用できる。キーボードのPauseキーを押したらいつでもデバック画面に入れる。シンプルでお手軽だ。
http://oss.sgi.com/projects/kdb/

kgdb(カーネルgdb)
カーネルに組み込んで使う
必ず2台のPCが必要
ターゲット機ではカーネルにgdbサーバを組み込んで動かし、シリアルケーブルで接続したもう1台のPCでユーザーインターフェース用のgdbを動かして操作する。gdbのフル機能が使える(らしい)
http://kgdb.sourceforge.net/
http://sourceforge.net/projects/kgdb/

kdb

kernel-2.4.20でkdbを使ってみた。 ftp://oss.sgi.com/projects/kdb/download/v3.0/から
kdb-v3.0-2.4.20-common-1.bz2
kdb-v3.0-2.4.20-i386-1.bz2
をダウンロード
$ bzip2 -d kdb-v3.0-2.4.20-common-1.bz2
$ bzip2 -d kdb-v3.0-2.4.20-i386-1.bz2
# cd /usr/src/linux
# patch -p1 < kdb-v3.0-2.4.20-common-1
# patch -p1 < kdb-v3.0-2.4.20-i386-1
# make menuconfig
Kernel hacking  --->
  [*]   Compile the kernel with frame pointers
  [*]   Built-in Kernel Debugger support (NEW)
# make dep bzImage
# cp arch/i386/boot/bzImage /boot
# vi lilo.conf
append="kdb=on"
# lilo
# reboot

再起動してきたらキーボードの Pauseキーを押すといつでもシステムが停止してデバッカに入れる。Pauseキーを押してデバック画面に入るとキーボードのLEDが点滅する。たまにキー入力が効かないことがあるかリターンキーを数回押すと直る。hでヘルプ、gで再開、btでバックトレース、ssでシングルステップ実行。bpで怪しそうな箇所にブレイクポイントを張って(ラベルは使えるので関数名でOK)gで再開させ、ブレイクが来たらssでシングルステップ実行させてバグを追うといった使い方をする。ただしC言語ソースレベルでバックはできないのでi386のアセンブラの知識が必要だしローカル変数もスタックフレームから追わなければならないのでかなり上級者向けだ。

それでもkdbを入れておけば、例えばドライバのバグでハングアップ(無限ループ)に入ってしまったときにあわてずPauseキーを押してデバック画面に入ればとりあえずPC値がわかるので(関数名+オフセット番地)どこで無限ループしているかは把握できる。

使ってみた感触としてはkdbパッチを当てておけば万が一の時に役に立つと思うし普段は意識しないので当てておいて損は無いと思う。


2003年03月07日

CAT709

IOIS16*の問題解決!問題は意外なところにあった(試作マザーボードを手配線したときのミス)人間思わぬところで間違いをするもんだ。もちろんALTERAも改造してよい方向になった。

製品版マザーボードの資料(構造図・回路図)を試作ページにアップロードしました。

03/2/25の日記で、IOIS16*を返す時にマスクかける必要があると書いたが、よくよく調べてみたら無くても大丈夫だった。もちろんあったほうが良いが無くてもOKだ。やっぱりCF君たちはチップセレクト(CE1* nor CE2*)されてない時にIOIS16*を返すなんて手抜きな事はしていなかった。


2003年03月08日

CAT709

IPLプログラムに機能追加を試みた。CFに少量のFATパーテーションを切って/bootとし、FATパーテーションからzImageファイルを探し出してロードする機能を追加しようとした。FATであれば解析が簡単だからだ。そこでまずはパーテーショニングに関する資料を探した。CHSとLBAの変換とかだ。この辺は大雑把な知識はあるが正確な資料を探した。ここで大きな問題に直面した。慣例的にパーテーションはシリンダー単位で分けるそうだ。パーテーションテーブル的にはCHSで指定のパーテーションが切れるが、cfdiskやfdiskといったユーティリティーは慣例に従ってcylinder単位に切り上げてしまう。手持ちの64MByteのCFを見るとCylinder=7だった。そのため最小でも8Mbyte単位でしかパーテーションが切れないのだ(1Mと指定しても8Mになってしまう)。/bootだけに8Mbyteもとるのはもったいない。従ってFATパーテーションをきるという案は却下だ。

ext2から直接zImageを探すためにext2の内部構造に関する資料を集めた。多重間接ブロックが面倒そうだけども読むだけならそんなに難しくなさそうだ。

サルサ

土曜日なのでel cocoへ。レッスン生がすごく少なくて、ほぼマンツーマン状態だった。しっかり指導してもらえるのは嬉しいけど寂しい限りだ。EMIKO先生も"宣伝不足と思う"といっていたし、もっと人口が増えるといいね。ココ見てくれてる人でサルサ興味ある人いたら参加しませんか?楽しいすよ。

レッスンの後10:00くらいにアバナにハシゴした。アバナとエルココは千円でハシゴできるのだ。アバナを12時に出てエルココに戻ってきた。驚いた!すげー混んでんじゃん!これくらい人がいないとね!結局3時までいて帰った

まりりん。をぃ外人バーはいつ行くのだ?


2003年03月09日

日曜日

遠藤君の結婚式の2次会だった。ヤツもとうとう結婚したかぁ。おめでとう。


2003年03月10日

CAT709

一昨日くらいの日記に書いた ext2fs から直接zImageファイルを読むプログラムが出来上がった。2日で完成した。最初はきれいに汎用的に書こうと思っていたがだんだん志が下がってきて、「/zImageを読む専用プログラムでいいやぁ」になってしまった。結果Cソースで261行でかけた。objファイルで約19kbyte。なんだこのくらいでかけるなら、PCもliloなんて使わずにext2から直接ブートしてくれてもよさそうなものなのに。ちなみに制限事項は
・/zImageであること(サブディレクトリに未対応)
・symlinkも対応していない
・ファイルサイズは63.55Mバイトまで(3重間接ブロックに対応してないから。苦笑)
まぁ必要最低限といったところでしょうか。

inode->i_blocks[12]、[13]、[14]の多重間接ブロックの部分、もうちっと上手く書けると思うんだけど、組み込みのしかもipl部分で再帰を使うとスタックが足りなくなりそうなので力ワザになってしまった。再帰でかければコードはもっと美しくなりそう。

さっそく ipl+g に組み込んでみたけども一発では上手く動かなかった。理由は自明で、ipl+gはスタックが 1536バイトしかないが とりあえず作ったプログラムはかなりのローカルバッファを使う。こんなかんじで↓ここでSECTOR_SIZEは512バイトだ。当然スタックオーバーフローするだろうな。やれやれ。明日リンカースクリプトを再調査する。もう眠いし。もうすぐ5時だし。(>_<)

//  filename で検索して inode番号を返す
//  [入力] inode ...    ディレクトリのinode番号
//         filename ... ファイル名
//  [出力] 検索した結果のinode番号
//         見つからなかったら0を返す
int ipl_ext2_serch_dir(struct ext2_inode *inode, const char *filename){
  int i;
  int block;
  unsigned char buf[SECTOR_SIZE*2*12];
  struct ext2_dir_entry_2 dirent;
  unsigned char *p;
  // ディレクトリを読む
  for(i=0; i<12; i++){
    block=inode->i_block[i];
    if(block==0)
      break;
    ipl_read_block(block, buf + i*EXT2_BLOCK_SIZE);
  }
  p=buf;
  while(p < buf + EXT2_BLOCK_SIZE*12){
    memcpy(&dirent,p,sizeof(struct ext2_dir_entry_2));
    if(dirent.inode==0)
      return 0;
    dirent.name[dirent.name_len]=0; // nullターミネート
    printf("inode %d:%s\n",dirent.inode, dirent.name);
    if(strcmp(dirent.name,filename)==0){
      return dirent.inode;
    }
    p += dirent.rec_len;
  }
  return 0;
}

2003年03月14日

仕事

納品直前のピークで死にそうでした。日記も数日更新できなかった

CAT709

こちらもごめんなさい。CN1,2コネクタがいまだに納期回答が出ないです(;_;)

メーカーのラインがトラブってるそうで。。。あとの部品はそろっているのでCN1,2が入ればすぐにでも量産できるんですが、、m(_ _)m

サルサ

calizaのホームページを作ってみた。


2003年03月15日

CAT709

マニュアルを書いた。

/dev/mtd0  IPL プログラム領域(128Kbyte)
/dev/mtd1  zImage カーネル領域(896Kbyte)
/dev/mtd2  ファイルシステム (7Mbyte)

サルサ

今日はLA HABANAがレディヤンデーということで、2レッスン+パーティー+1drinkで\2000とお得だったのでアバナのレッスンに行った。2レッスンといっても初中級クラスなので基礎ステップ中心だった。自分的にはプリマの特訓になったので参加してよかったと思う。

その後パーティーでEMIKO先生に踊ってもらって、途中で男女入れ替わる妙技?を実践で教えてもらった(笑)。女性ステップも楽しいなぁ。EMIKO先生も丸一日レッスンで疲れてると思うけど、パーティーでしり込みしている生徒さん達の気を使ってあげて、お疲れ様と思う。

その後11時くらいからEL COCOに移動

左:俺とマリリン。右:ischuteとChie
珍しく(?)ischuteが来てた。みんなもどんどんパーティー来いや〜


2003年03月16日

カーネルhack

デバイスドライバをkernel-2.2から2.4に変更するための箇所をまとめた

ブロッキング処理(sleep/wakeup)

カーネル2.2では
プロセスを停止させる箇所1箇所につき変数ひとつ
static struct wait_queue *my_wait=NULL;
/* カレントプロセスを停止させる */
interruptible_sleep_on(&my_wait);
/* 停止させたプロセスを再開させる */
wake_up_interruptible(&my_wait);
カーネル2.4では以下のように書き換える
プロセスを停止させる箇所1箇所につき変数ひとつ
wait_queue_head_t my_wait;
必ず初期化する
init_waitqueue_head(&my_wait);
停止と再開は同じ
カレントプロセスを停止させる
interruptible_sleep_on(&my_wait);
停止させたプロセスを再開させる
wake_up_interruptible(&my_wait);

request_region

request_region(), release_region(), check_region() のためには
#include <linux/ioport.h>
が必須となった。

bottom_half

ボトムハーフの扱いはめちゃ楽になった
ボトムハーフの宣言(名前、関数、引数)
DECLARE_TASKLET(parasw_tasklet,parasw_bh_tasklet,0);
void parasw_interrupt(略)
{
略
  /* 下半分をマークする */
  tasklet_schedule(& parasw_tasklet);
}
/* これが下半分 */
void parasw_bh_tasklet(unsigned long unused){
  wake_up_interruptible(& parasw_read_wait);
}

kgdb

カーネルgdb。数日前にカーネルハッキングのところに書いたけども、kgdbを試してみた。オリジナルのパッチはlinux-2.4.18までしか対応していなくてしかもpatchミスがあった。

というわけで linux-2.4.20用のkgdbパッチを作った。 パッチがあたることと、コンパイル&起動はOKだった。それくらいしか試していないので誰か試して。 ftp://ftp.si-linux.co.jp/pub/silinux/kgdb/

$ tar xzfv linux-2.4.20.tar.gz
$ cd linux-2.4.20
$ patch < linux-2.4.20-kgdb-1.6-ebihara.patch
$ make menuconfig
Kernel hacking  --->
 [*] KGDB: Remote (serial) kernel debugging with gdb
 [ ] KGDB: Thread analysis
 [ ] KGDB: Console messages
$ make dep
$ make bzImage

2003年03月17日

仕事

仕事のため上京
http://www.catnet.ne.jp/triceps/sem/c030317a.htm

ぷらっとこだまエコノミーグリーンで東京まで寝ながら行こうと思って朝9時ジャストに名駅に到着するも、9:13のこだま号は売り切れだって。なーんだぁ。結局普通に新幹線になった。

こだまで行くつもりがひかりになったので予定より1時間早く東京に着いた。まだ時間があるので秋葉原へ。このへんが根っからのエンジニアだね。名古屋は晴れてたのに東京は小雨だ。

秋葉原駅についてまず驚いたのは、山手線ホームの上野側から直接一階に下りる階段(とエスカレータ)が増設されたこと。

い・いつのまに??以前は中央にしか階段がなくて狭くて人があふれてたもんな。この階段はかなり高得点間違い無しだ。ビジュアルブックマークだ!と心の中で叫びながらデジカメで写真を撮ってきた。

秋葉原にいった理由はもちろん、CAT709のコネクタ(FC4B)が未だに入手できないので店頭在庫を探そうとおもったからだ。真っ先に秋葉原の一番こゆい界隈(正式名称は知らないが秋月通りと呼べばその筋の人は皆理解する)に向かう。

HRSのコネクタを探しつつ面白そうな半導体をチェック

3AのDCモーター用Hブリッジ(PWMスイッチング制御入力端子つき)が百円だった

秋月通りでHRSコネクタが見つからないのでラジオデパートに戻ってみることにする。
望み薄いなぁ。なんでも揃うって看板がすでにむなしい
(ラジオデパートにおいてある部品てみな古いんだもの)

あぁっ!!テクトロのカラーデジタルオシロスコープが14万円!!
ほすぃ!!コレさえあればなんなことやこんなことがっ!!
それにこれくらいしっかりした電源装置もほしい。垂涎の品々だ。
どんどんビジュアルブックマークだ。

ラジオデパートうろついたけどやっぱりコネクタ見つからない

ところでメディアがかなり安くなっている。 DVD-Rで1枚110、CD-Rは1枚23.8円だって。安ぅ。

喫茶店"エビハラ"。少なくても20年以上前から営業しているところを見たことが無い。立地条件は悪くないのに

イロモノ屋のあきばお〜にも寄る

いきなり俺を出迎えてくれたのは953円の英会話教材「TO BE NATIVE」「英会話教材の決定版」だ。
しかもその上に電子レンジ用コーヒーメーカーが重ねて販売してある。さすがである。味わい深い。
当然ビジュアルブックマークしたが、ネタ用に買ってくればよかったかな。

こっちではホワイトレーベルのCD-Rが1枚34円。ビジュアルブックマークは便利だ。

中央線と総武線が立体交差するあたり。
俺が子供の頃ここで電車見て喜んでいた。

というわけで今日の仕事場に到着だ。

サルサ

うふふふ。うふふふふふふふ。
もちろん仕事で上京したのだけども、今回の上京には 『六本木デビュー』という副題があったのだ。昼間の仕事はLinuxデバイスドライバー入門の先生なんだが、無難にこなす。ていうか朝から頭の中はSalsaのリズムだ。カーネルのmake画面ですらクラベ打っているに見えてくる。

昨日日記書いたんだけど事情により一部を削除。Calizaのページのほうに移動させることにした。

17時に仕事を終え、ホテルに荷物を置いて出発。ちょっと迷って19:05にCaribeに到着。Caribeはエントランス\1300(w/1dr)、レッスンは初心者レッスン無料、初中級90分 \1000。安いな〜。\2300で5時間以上も遊べるんだもの。

広さはEl CoCo の 1.5倍といったところか。LA HABANAの鏡のあるほうのスペースくらい。もちろん鏡はない。ここが六本木のサルサの老舗かぁと感動を覚えつつ、ちょうど初心者無料レッスンが始まるところだったのでいそいそと参加した。はじめはOn2だと思ってて、On2難しそうだなぁとおもってたら、On1だった。MIUちゃんというかわい〜い先生だ。もちろん2ショットでビジュアルブックマークだ v(^^)v MIUさん、ご指導ありがとうございます

月曜日は初心者向けの日ということだった。生徒人数は女性8人、男性5人といったところ。男性は初心者が多かった。初心者向けレッスンとはいっても、今日のお題は初心者にはちょっと難しかったかもしれない。スタイルはLAっぽいのだけど森田先生がいうには南米スタイルだって。女性に優し〜いリードで、キレ良くスパッと。そんな感じ(^^

レッスン中に「後で踊ってくださいね」と約束しておいた子と((サルサ初心者の男性諸君!レッスン中に「後で踊ってくださいね」と声かけとくのは有効技だよん))今日のお題の復習的に踊ってもらったりしながら普通のダンスパーティーに。流れ的にいい感じ。10時過ぎくらいからだんだん人が増えてきた。外国人はあまりいない。日本人の20代,30代の若い人ばかり。みなOn1のLAスタイルで、キューバンスタイルの人は皆無だった。俺は最近覚えつつある自己流LA(これをガンバスタイルとしてJISとIEEEに登録してもらおう考えている。仕様書かかなきゃ)で対応しつつ、たまにキューバンの荒くない技(セテンタ系)を入れたりして個性を主張(A^o^;)

12時前くらいまで居て、10人くらいと踊ってもらった。女性のほうから「踊ってください」と2人から声かけらたので俺的には勝利。やっぱり、"キレ良く" やさしいリードだよね。テンション感じあいながら一体感感じられるようなサルサができれば最高!もっと修行積まなきゃ。

MIUさんとも何回か踊ってもらった。MIUさんが言うにはもともとキューバンスタイルから入った?とかで「懐かしい感じがする」と感想を言われた。微妙な表現だ。

Caribeのお客さんはみんな気さくで楽しい人ばかりで、カウンターで気軽に話ができるひとばかりだった。卒業して神戸に帰るという、名前聞いたけど忘れちゃった子、元気でね。MIUさん、また修行積んで遊びに来るので踊ってくださいね。サルサって一期一会ですね。同じ人同じ時間同じ場所同じ曲というのは二度とない。だからこそ、一曲には物語があって、初めと終わりがあるんだなぁと、昔だれかが語っていた言葉を思い出した。

最後に森田先生とがっちり握手をして岐路に着いたのでした。六本木サルサCaribeいい店でした。最後にひとつ、ラティーノの店員さんには西語で挨拶くらいできたらいいなぁとやっぱり感じた。!Muchas Grasias!


2003年03月18日

仕事

どじった。朝からどじった。(書きたくない)

今日の仕事は昨日の続きでデバドラの先生だ。朝イチの失敗はセミナーの内容で取り戻すしかないからがんばらなきゃ。
と思ってがんばったんですよ。(A^o^;;;

ラーメン

東京のラーメンはやっぱりうまい。2日で3回ラーメン食べた。名古屋では、なんというか美味いラーメン屋が無い気がする。透き通るような琥珀色のしょうゆラーメンが一番好きだ。実家(千葉)にも美味いラーメン屋は多いのに名古屋でこの味が探せないのが残念だ。

サルサ

名古屋駅に着いたら夜の8時だった。これから会社に行く気にもならないしかといって家に帰るには早いので伏見のJMAXへ。JMAXにははじめて行った(サルサは火曜日しかやってないから)

PEPE&ホア組が先生だった。レッスンには間に合わなかったので見学した。サルサナイトが始まってみたら、噂どおり上手い人が多い。というか初心者はいない。最低でもある程度踊れる人たちだし、それこそ全身がまるで楽器のように表現している人も何人もいた。俺も(PEPEさんがいるからというわけじゃなく)知らない子と踊る時は特に気を使うリードに徹することにしている。

3時間くらい踊って帰路に着き、地下鉄でボーっと考えた。何かが違う気がした。何だろう?何が違うんだろう。jMAXよりELCOCOや昨日のCaribeのほうが、踊ってても、見てても、そこに居ることが楽しい。

千種駅で地下鉄からJRに向かって歩いているとき、やっと違いに気がついた。そうだ。JMAXにはラテンの雰囲気が全然無いんだ。JMAXは確かにきれいなクラブだけどやっぱりクラブだ。ビーナス像やアポロン像の置物、大理石っぽい床、金色の装飾なんていらないんだ。

ELCOCOの、あのギーときしむ木のドア。木の板にペンキを塗っただけの壁、いっちゃ悪いけどあの場末的な雰囲気と熱気が俺は気に入ってるんだってことに今日気がついた。そういえばCaribeもそんな雰囲気だった。わくわくした。木の板に緑や水色のペンキ、黄色の文字。!Muchogusto amigos! そんな雰囲気が人を呼び、躍らせ、熱気を生み、言葉を交わさなくてもリードとフォローと"目"で意思が通じる、そんなサルサ場がやっぱり好きだな。


2003年03月19日

仕事

忙しかったので日記なし

サルサ

夜10時からLimeStoneでCalizaの活動


2003年03月20日

仕事

先日の東京出張で秋葉原によった時にゲットしてきたアイテム

ガス式半田ごてと無帯電部品トレイ
これでセミナー開催中に装置が故障しても直せるし、家に居ながらにしてパーツショップごっこで遊べる。


2003年03月21日

祝日

お彼岸だ。お彼岸の墓参りは10年くらいいってない。秋には帰ろうとおもう。

CAT709

RTC9701JEにちょっとした問題。電圧が低下してレジスタが狂うと次回起動時にbusyから抜けなくなる。busy_timeoutあたりの処理にクリア処理を追加しなきゃ

サルサ

RICO先生からELCIDで90分の特別レッスン+パーティーがあると誘われたので行ってみる。ELCIDにいくのは半年ぶり?くらいとおもう。Ischuteも来た。えーと(A^o^;; こんな事いうと怒られてしまいますが、踊れる人が少なかった。11時くらいにELCOCOにはしご。チエちゃんと合流する。

ELCOCOはやっぱりうまい人が多い。自分よりうまい人のほうが人数が多いから勉強になるし、みているだけでも面白い。


2003年03月22日

仕事

相変わらず忙しい。世間は三連休かもしれんけども俺んとこは3日とも仕事だ。ただ休出なので5時で終わりにしてもらうけど。

サルサ

今日はエルメスお帰りなさいパーティーだった。アバナは\2500飲み放題ということだったから、せっかくなのでエルメスのレッスンも出ることにした。60分x2コマ出て、飲み放題のパーティーに出て\3500安いとおもうよ。エルメスの技は相変わらず難しいというか複雑だ。面白けど実践で使えるようになるには、それ以前に基本がしっかりとできていなければ不可能だ。基本をしっかり身に付けろって事だね。

11時頃にアバナがすいてきた。ということはELCOCOに移動してったということだから(笑)俺もELCOCOに向かう。しかし今日は失敗だったかもしれない。あまり知ってる人もいず、しかも踊らない外人さんばっかりで混雑していて入店した瞬間帰ろうかと思ったくらいだ。

ASKAさんとミシェルさんに踊ってもらった。いやぁすごいや。目が醒めたというかついてけないや(A^o^;;;


2003年03月24日

仕事

会社のコンピュータがいろいろと不調だ。だましだまし使っているが、大事件に発展する前に直しておかなければいけない。たとえばファイルサーバのミラーRAIDの片一方が落ちたままだとか(笑い事ではないな)

今週末くらいにいっせいにリプレースの予定で、現行機種は予備として保存用し、現在保存してあるやつは廃棄とする。今保存してある中で最古のマシン DELL Optiplex 466/L を、廃棄前の最後の仕事としてCAT709との速度比べに使用した。

この Optiplex 466/L はホスト名 "delly" として 99年頃までメールサーバとして活躍してくれた。CPUも、オリジナルの486DX2-66から、ゲタをはかせて 486DX4-100に置換し、その後 AMD 5x86-133へと順調な成長をした。現役を退いた後もしばらくは自宅でサーバとして使用していた(動作音が静かでほとんど音がしない名機だった)

久しぶりにdellyを起動させようとしたが850M のE-IDE HDDは壊れていたし、CPUファンもグリスが固まってしまっていてファンがまったく動かない状態になっていた。急遽外付けにファンを仮設し、HDDの代わりにIDE-CF変換基板によりSiliconLinuxで起動させた(こういうときIDE-CFやSiliconLinuxは本当に便利だ)

試験はカーネルソースの展開時間を計測する方法で行った。ベンチとしては正確ではないが、日常でよく見かける場面での速度調査だ。

# time tar xzvf linux-2.4.20.tar.gz
dellyCAT709
AMD 5x86 133MHz / memory 32M
kernel-2.4.20 debian woody
SH3 117MHz / memory 32M
kernel-2.4.19 debian sid
real    6m32.344s
user    1m9.690s
sys     2m8.960s
U+S 約3分18秒
real      4m 9.04s
user      1m 10.47s
sys       2m 6.95s
U+S 約3分17秒

というわけでこれは偶然か?user+system 時間(つまりプロセスの走行時間)はほとんど同じだった。前々からSH3のパフォーマンスは同クロックの486程度と感じていたが、動作クロック差は多少あるが、実行速度は誤差の範囲だった。CAT709のパフォーマンスは結構いい感じだろう。

delly君はこうしてバラされて廃棄されることとなった。さようならdelly君。ありがとうdelly君。 形見の品として、まだ動作に支障がない「 AMD5x86-133MHzCPU + マザーボード + 32MバイトSIMM 」を取っておくので欲しい方(いるのか?笑)に差し上げます。写真のように IDE-CFをつかってSiliconLinux機として使うのが吉と思います。

CAT709

IPLプログラムに改造を加えてオンボードCFからのブートをサポートした。先日書いたようにext2-fs解読ルーチンを組み込み、zImageファイルを直接起動できるように予定しているが、取り急ぎ従来のCAT68701と同じようにliloにてブートする方法をサポートした。ipl-romのイメージファイルをFTPサーバに置いた。sh-stub_2003-03-24.bin を IPL-ROMとして書き込む。

cat709にて
# cp sh-stub_2003-03-24.bin /dev/mtd0
これでIPLのアップデート完了だ。起動時の日付が
SH IPL+g version 0.11, Copyright (C) 2001 Free Software Foundation, Inc.
build Mar 24 2003 23:39:26
となっていればIPLのアップデートはOKだ。CAT68701と同じようにbキーでオンボードCFからliloブートする。

lilo でブートする時はカーネルパラメータはコマンドラインでCキーでタイプして記録するパラメータよりも lilo.confのappend=行のほうが優先される。以下のようなlilo.confで動作を確認した。

linear
boot = /dev/hde   ← 開発機からみたCFデバイス
disk = /dev/hde   ← 開発機からみたCFデバイス
bios=0x80
append="ro root=301 console=ttySC0,115200 ide0=0xb80001f0,0xb80003f6,34"
delay = 30
vga = normal
image = /boot/vmlinuz
label = linux
root = /dev/hda1
read-only
なお、カーネルソースにも一箇所だけ修正が必要だ。
linux-2.4.19カーネルのdrivers/ide/ide.cの3426行付近を
/*
 * Cryptic check to ensure chipset not already set for hwif:
 */
 if (i > 0 || i <= -11) {                        /* is parameter a chipset name? */
 #if ! (defined(CONFIG_SH_CAT68701) || defined(CONFIG_SH_CAT709))
     if (hwif->chipset != ide_unknown)
          goto bad_option;        /* chipset already specified */
 #endif
     if (i <= -11 && i != -18 && hw != 0)
といった具合に #if 〜 #endif 節を加える。これでオンボードCFからブートできるようになった。

su

suが動作しないのは/bin/su が setuidされていなかったからだ。ちょいミスだった。chmod u+s /bin/su で ok.


2003年03月25日

仕事

昨日"ファイルサーバのミラーRAIDの片側DISKが死んだままになっている"と書いたが、やっぱり放置してたらシャレにならないので交換することにした。今回は上側(/dev/hde)側が落ちてる。と自分用にビジュアルブックマーク。

今までな〜ぜかRAIDの交換には手間取ってしまうのだが(?)原因がわかった。linuxのソフトウェアraidを使う時はパーテーションタイプを0xFD(raid自動認識)にする必要があったのだがこれをすっかり忘れていたのだ。自動認識しない状態だったので各種howtoページには書かれていないraidstartなどのコマンドタイプが多く必要になっていた。

故障ディスクの交換手順を下にまとめておく

電源を切る
壊れたdiskを新品に交換する
電源を入れる
(ちなみに片方のdiskしか装着されていなくてもちゃんと起動してマウントできる)
新品ディスクにパーテーションを切る。この時必ずパーテーションタイプを0xFDにする
# raidhotadd /dev/md0 /dev/パーテーション名
# cat /proc/mdstat
で進行具合を確認

2003年03月26日

仕事

年度末だ。うちの会社は年度末が7月末としているので今はそんなに忙しくないが、それでも世間は年度末なのでいろいろとあわただしい毎日だ。今日は税理士さんに来ていただいて帳簿のチェックや打ち合わせなど。今回の改正税法について要点をまとめた。
1.30万円までの購入品を一括で損金にできる(H15.4.1〜H18.3.31まで)
2.消費税の課税業者は売り上げ1000万円以上に引き下げられる
3.消費税込み金額の表示義務化。値札や伝票に税込み金額を書かなければならないらしい
とりあえず1としてパソコンなどを資産計上せずに一括損金にできるようになったのがうれしいか。3.に関してはWebの表記を修正する必要があるが、これは来年の4月からだ。

それからsh-linuxでのNMI処理問題をやっつけた。kernelに request_nmi(void(*handler)(void))なる関数を作ってNMI処理をドライバモジュールから登録できるようにした。

サルサ

直接サルサねたではないが、calizaの活動場所であるLimeStoneでいつもジャズを聞かせてくれるバンド?の写真。今日もかっちょいい演奏を聞かせてくれました。

ナイスミドル2人と、乙女2名。ジャズかっちょいいなぁ

caliza活動はSonrisaもKiaritaもChieも来られなかったのでメンバーの女の子がいなかった。LimeStoneのお客さんの女性が飛び込みで参加してくれたのでベーシックを踏んだ。サルサ人口が増えればよいと思う。


2003年03月27日

CAT709

shに限らずi386でも同じと思うが、linux-2.4.19カーネルで、"jffs2"と"PPP Deflate compression"を両方ともYにするとコンパイルエラーが出てしまった。

drivers/net/net.o: In function `deflate':
/home/ebihara/project/sh/cat709/linux-2.4.19-cat709/drivers/net/zlib.c:974: multiple definition of `deflate'
fs/fs.o:/home/ebihara/project/sh/cat709/linux-2.4.19-cat709/fs/jffs2/zlib.c:974: first defined here
drivers/net/net.o: In function `_tr_flush_block':
/home/ebihara/project/sh/cat709/linux-2.4.19-cat709/drivers/net/zlib.c:2687: multiple definition of `_tr_flush_block'
fs/fs.o:/home/ebihara/project/sh/cat709/linux-2.4.19-cat709/fs/jffs2/zlib.c:2687: first defined here
drivers/net/net.o: In function `zlibVersion':
/home/ebihara/project/sh/cat709/linux-2.4.19-cat709/drivers/net/zlib.c:5145: multiple definition of `zlibVersion'
略
エラーメッセージから判断すると、jffs2もPPP Deflate compressionも両方ともzlib圧縮ルーチンを使うのだが、どちらもzlibを静的リンクしようとするので2重定義エラーが出てしまうようだ(こりゃカーネルのbugだな)。具体的に言うと drivers/net/zlib.c と fs/jffs2/zlib.c の両方をリンクしようとするのでエラーが出ている。 こちらに同様の報告を見つけた
さて、ぼちぼちと kenerl-hack 開始だ。まず、両方のzlib.cの差分を見てみる
$ diff -u drivers/net/zlib.c fs/jffs2/zlib.c
--- drivers/net/zlib.c  Sat Aug  3 09:39:44 2002
+++ fs/jffs2/zlib.c     Sat Aug  3 09:39:45 2002
@@ -433,7 +433,7 @@
     int nice_match; /* Stop searching when current match exceeds this */
                 /* used by trees.c: */
-    /* Didn't use ct_data typedef below to suppress compiler warning */
+    /* Didn't use ct_data typedef below to supress compiler warning */
     struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */
     struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
     struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */
@@ -689,7 +689,7 @@
 /* ===========================================================================
  * Update a hash value with the given input byte
- * IN  assertion: all calls to UPDATE_HASH are made with consecutive
+ * IN  assertion: all calls to to UPDATE_HASH are made with consecutive
  *    input characters, so that a running hash key can be computed from the
  *    previous key instead of complete recalculation each time.
  */
@@ -700,7 +700,7 @@
  * Insert string str in the dictionary and set match_head to the previous head
  * of the hash chain (the most recent string with same hash key). Return
  * the previous length of the hash chain.
- * IN  assertion: all calls to INSERT_STRING are made with consecutive
+ * IN  assertion: all calls to to INSERT_STRING are made with consecutive
  *    input characters and the first MIN_MATCH bytes of str are valid
  *    (except for the last MIN_MATCH-1 bytes of the input file).
  */
@@ -2065,7 +2065,7 @@
  */
 local void tr_static_init()
 {
-    static int static_init_done;
+    static int static_init_done = 0;
     int n;        /* iterates over tree elements */
     int bits;     /* bit counter */
     int length;   /* length value */
コメントのスペルミス(笑)以外違いはまったくないし、static変数を=0で初期化している部分だけ違うが、linuxではstatic変数は0初期化されることが保障されているので実質的にはどちらもまったく同じコードだということがわかった。とりあえず jffs2は/のマウントに必要だから必ずYで組み込むことケテーイなので drivers/net/zlib.c を捨てる作戦に出る。

drivers/net/Makefile を見てもzlib.oのリンクの記述が見つからない。あれれ?おかしいなと、grepしたところ drivers/net/ppp_deflate.c に

#include "zlib.c"
を発見。ぬわんだこれは?? .c ソースをincludeしてやがる。これを直すのは面倒そうなので、fs/jffs2/Makefileを修正して
 COMPR_OBJS     := compr.o compr_rubin.o compr_rtime.o pushpull.o \
-                      compr_zlib.o zlib.o
+                      compr_zlib.o
とpatchした。これでコンパイルが通ったし起動もOKだったので、応急処置はできたとおもうが、これで対処できるのは「jffs2とPPP Deflate compressionを両方ともYにしたときのリンクエラー」の対応のみだ。jffs2のzlibのリンクを削っているので当然PPP Deflate compressionをYにしなければjffs2に必要なzlibが組み込まれない。こんな対応をせずともPPP側をモジュールにすればリンクエラーは出ないので、すなおにモジュールにしたほうがよさそうだ(jffs2は/のマウントに必要なのでモジュールにできない)

jffs2とppp圧縮が両方ともzlibのインスタンスを組み込もうとしているので実はzlibはスレッドセーフじゃないのかもしれないという一抹の不安は残る。


2003年03月28日

CAT709

CAT709のシリアルにモデムをつないでPPPダイヤルアップの実験を行った。プロバイダにつなぎ、インターネット接続に成功した。モデム側をRTS-CTS, DTR-DSR ループバックして実験を行った

新ユーザーランドの整備を行っている。

サルサ

エルココでmiho先生のレッスンに出て、そのままパーティーへ。Chieちゃんが23時頃にやってきた。金曜日のエルココは25時で終わりだ。


2003年03月29日

サクラサク ついに桜が咲いた。春日井市の花はサクラの花だ。いわれて見れば市内には桜がたくさん咲いている。わが街にも一年で一番きれいな季節がやってきた。

ガードレールにも桜のマーク 会社の隣の八田川(田舎だなぁ)

CAT709

/lib の下を削っていた、、、というかlddコマンドで必要なものだけ調べてコピーしていたらloginができなくなってしまった。

supercat login: root
Login incorrect
パスワードも聞いてこない。
とりあえず /bin/login に必要な共有ライブラリを調べた。
# /lib/ld-linux.so.2 --list /bin/login
libcrypt.so.1 => /lib/libcrypt.so.1 (0x29559000)
libpam.so.0 => /lib/libpam.so.0 (0x29595000)
libpam_misc.so.0 => /lib/libpam_misc.so.0 (0x295ad000)
libdl.so.2 => /lib/libdl.so.2 (0x295bf000)
libc.so.6 => /lib/libc.so.6 (0x295d1000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x296ef000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x52aaa000)
これだけはそろえたので /bin/login は動作するものの、DLLが足りないらしい。全ての/libファイルをコピーして、 ls -lut でアクセスタイムを調べ、実際にロードされたライブラリファイルの一覧を得た。結果、
libnsl-2.2.5.so
libnss_compat-2.2.5.so
が必要なことがわかった。これを追加してloginが復活した。もっとスマートに必要なDLLを調べる方法は無いものかな。

サルサ

19:15にマコンドに行ってLAをちと習う。アシスタントっぽい女の子(名前は知らないんだけど)がめちゃかわいかった。常連さんの人気者なんだろうな。うれしいことに踊り誘われたので一曲踊ってもらった。22:30頃にエルココに移動。きれいなマコンドもいいけど、やっぱエルココの場末的な雰囲気がいいなぁ。土曜のエルココ最高!

24時からChieちゃんが顔を出した。この時間からご出勤てのも相当のサルバカだな〜(^^)


2003年03月31日

CAT709

PPPの続き。Microdriveにフルのdebianを入れてダイヤルアップ接続に成功したので、必要なファイルをFLASHメモリに入れる作業を継続中。しかしpppdを直接起動させるとsegmentation faultが発生する。(Microdrive上のdebianで動作させると起こらない)

# pppd call airh
Segmentation fault
これだけではまったく原因の特定ができないのでstraceを使ってどこで落ちているか追跡をすることにする。というわけでまずstraceをコンパイルしてみたが arch=sh3 だとコンパイルできなかった。configureを見るとarch=sh ということになっているらしいので一部修正をして再コンパイルだ。
strace-4.4.94/configure  の 1908行付近
-sh)
+sh3)
         arch=sh
 cat >>confdefs.h <<\_ACEOF
 #define SH 1
strace-4.4.94/configure.ac  の 90行付近
-sh)
+sh3)
        arch=sh
        AC_DEFINE([SH], 1, [Define for the SH architecture.])
        ;;
という修正でコンパイルできた。さっそく実行してみる。
# strace pppd call airh
略
fstat64(0, {st_mode=S_IFCHR|0600, st_rdev=makedev(204, 8), ...}) = 0
fstat64(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(204, 8), ...}) = 0
open("/dev/ppp", O_RDWR)                = 3
fcntl64(3, F_GETFL)                     = 0x2 (flags O_RDWR)
fcntl64(3, F_SETFL, O_RDWR|O_NONBLOCK)  = 0
socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 4
socket(PF_INET6, SOCK_DGRAM, 0)         = -1 EAFNOSUPPORT (Address family not supported by protocol)
open("/var/run/pppd.tdb", O_RDWR|O_CREAT, 0644) = 5
fcntl64(5, F_SETLKW, {type=F_WRLCK, whence=SEEK_SET, start=0, len=1}) = 0
fcntl64(5, F_SETLKW, {type=F_RDLCK, whence=SEEK_SET, start=4, len=1}) = 0
read(5, "TDB file\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 40) = 40
fstat64(5, {st_mode=S_IFREG|0644, st_size=556, ...}) = 0
old_mmap()                              = -1 EINVAL (Invalid argument)
fcntl64(5, F_SETLKW, {type=F_UNLCK, whence=SEEK_SET, start=0, len=1}) = 0
getpid()                                = 136
fcntl64(5, F_SETLKW, {type=F_WRLCK, whence=SEEK_SET, start=1208, len=1}) = 0
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
どこで落ちるかはわかった。なんだろ?old_mmap()がエラーな点がクサイ。ソース追いかけるか。

と思ったが、上のstraceの結果だけでは、まるで暗闇でカニを探すようなもので(?)埒が明かないのでgdbをインストールし、pppdを-gオプションつきでコンパイルしなおして細かく追いかけた。で、、、、
わーかった!!
疲れた。どうやって発見したかの説明は長くなるので端折るがpppdのバグを発見した。
正常に動作する時

(gdb) r call airh
Starting program: /mnt/root/build/ppp-2.4.1.uus/pppd/pppd call airh
Breakpoint 1, tdb_read (tdb=0x458088, offset=476, buf=0x7bfffa30 "\a", len=4)
    at tdb.c:241
241             if (tdb_oob(tdb, offset + len) != 0) {
(gdb) n
246             if (tdb->map_ptr) {
(gdb)
247                     memcpy(buf, offset + (char *)tdb->map_ptr, len);
(gdb) p *tdb
$3 = {name = 0x457458 "/var/run/pppd.tdb", map_ptr = 0x29569000, fd = 8,
  map_size = 8192, read_only = 0, locked = 0x458250, ecode = 0, header = {
    magic_food = "TDB file\n", '\000' , version = 637606248,
    hash_size = 128}}
落ちる時
(gdb) r call airh
Starting program: /mnt/root/build/ppp-2.4.1.uus/pppd/./pppd call airh
Breakpoint 1, tdb_read (tdb=0x458088, offset=60, buf=0x7bfffa20 "\a", len=4)
    at tdb.c:241
241             if (tdb_oob(tdb, offset + len) != 0) {
(gdb) n
246             if (tdb->map_ptr) {
(gdb) p *tdb
$1 = {name = 0x457458 "/var/run/pppd.tdb", map_ptr = 0xffffffff, fd = 7,
  map_size = 556, read_only = 0, locked = 0x458250, ecode = 0, header = {
    magic_food = "TDB file\n", '\000' , version = 637606248,
    hash_size = 128}}
(gdb) n
247                     memcpy(buf, offset + (char *)tdb->map_ptr, len);
(gdb) p offset + (char *)tdb->map_ptr
$2 = 0x3b <Address 0x3b out of bounds>
(gdb) n
Program received signal SIGSEGV, Segmentation fault.
0x2963a2cc in memcpy () from /lib/libc.so.6
落ちる時は tdb->map_ptr が 0xffffffff つまり -1 になっていることがわかった。map_ptr は mmap() の戻り値であるが、先ほどstraceで調べた時にわかったように、mmap()のエラー -1そのものだ。mmap()がエラーぶっこいているにもかかわらずpppdにエラー処理が抜けていて、のんきにpidなどを調べて先に進んでいるので、その先のmemcpy()で落ちていた。pppdのエラー処理ミスのbugだ。ちなみに、同時にわかることであるが map_ptr は "/var/run/pppd.tdb" のmmap()だ。

肝心なのはなぜmmap()がエラーになるかであるが、『jffs2上にファイルが置いてあるのでmmap()の挙動に問題があるのではないか?』と思いついたので /var を ramfsに置いて実験をしたところ、ppp接続に成功した!v(^-^)v

この結果から判断すると jffs2はmmap()できないようだが、いまいちしっくりこないので簡単なコードを書いて実験を行った。結果、O_RDONLYでopen()したときはmmap()に成功し、O_RDWDでopen()したときにmmap()に失敗した。googleで jffs2 mmap で調べたところ以下の文書を発見した。
http://www.handhelds.org/pipermail/intimate/2001-July/000028.html
The problem is that jffs2 does not support shared writeable mmap
というわけで原因もわかったことだし、この件は決着。長くなるが動作画面を貼っておく

supercat:~# modprobe sh3_ss
Using /lib/modules/2.4.19/pcmcia/pcmcia_core.o
Linux Kernel Card Services 3.1.22
  options:  none
Using /lib/modules/2.4.19/pcmcia/sh3_ss.o
Warning: loading sh3_ss will taint the sh3ss_ss: sh3ss_set_voltage(0, 0, 0)
ksh3ss_ss: sh3ss_init_socket(irq=34,mem_base=b8000000)
sh3ss_ss: sh3ss_reset_socket(0, 1)sh3ss_ss: sh3ss_set_voltage(1, 0, 0)
sh3ss_ss: sh3ss_init_socket(irq=32,mem_base=b8008000)
sh3ss_ss: sh3ss_reset_socket(1, 1)sh3ss_ss: sh3ss_init(0)
sh3ss_ss: sh3ss_set_voltage(0, 0, 0)
sh3ss_ss: sh3ss_inquire_socket(0)
sh3ss_ss: sh3ss_proc_setup(0)  XXX
sh3ss_ss: sh3ss_init(1)
sh3ss_ss: sh3ss_set_voltage(1, 0, 0)
sh3ss_ss: sh3ss_inquire_socket(1)
sh3ss_ss: sh3ss_proc_setup(1)  XXX
SH3 PCMCIA bridge:
e  socket 0 at 0xb8000000 irq 34 io window 20K@0xc0131000
r  socket 1 at 0xb8008000 irq 32 io window 20K@0xc0136000
nel: no license
  See http://www.tux.org/lkml/#export-tainted for information about tainted modules
supercat:~# modprobe ds
Using /lib/modules/2.4.19/pcmcia/pcmcia_core.o
Using /lib/modules/2.4.19/pcmcia/ds.o
sh3ss_ss: sh3ss_register_callback(0)
sh3ss_ss: sh3ss_get_status(0) = 10c0
sh3ss_ss: sh3ss_get_status(0) = 10c0
sh3ss_ss: sh3ss_set_socket(sock=0, flags=0, csc_mask=80, Vcc=33, Vpp=33, io_irq=0)
sh3ss_ss: sh3ss_set_voltage(0, 33, 33)
sh3ss_ss: sh3ss_set_socket(sock=0)SS_DETECT
sh3ss_ss: sh3ss_set_socket(sock=0, flags=240, csc_mask=80, Vcc=33, Vpp=33, io_irq=0)
sh3ss_ss: start reset card
sh3ss_ss: enabling card output
sh3ss_ss: sh3ss_set_socket(sock=0, flags=200, csc_mask=80, Vcc=33, Vpp=33, io_irq=0)
sh3ss_ss: stop reset card
sh3ss_ss: sh3ss_get_status(0) = 10c0
sh3ss_ss: sh3ss_register_callback(1)
sh3ss_ss: sh3ss_get_status(1) = 10c0
sh3ss_ss: sh3ss_get_status(1) = 10c0
sh3ss_ss: sh3ss_set_socket(sock=1, flags=0, csc_mask=80, Vcc=33, Vpp=33, io_irq=0)
sh3ss_ss: sh3ss_set_voltage(1, 33, 33)
sh3ss_ss: sh3ss_set_socket(sock=1)SS_DETECT
sh3ss_ss: sh3ss_set_socket(sock=1, flags=240, csc_mask=80, Vcc=33, Vpp=33, io_irq=0)
sh3ss_ss: start reset card
sh3ss_ss: enabling card output
sh3ss_ss: sh3ss_set_socket(sock=1, flags=200, csc_mask=80, Vcc=33, Vpp=33, io_irq=0)
sh3ss_ss: stop reset card
sh3ss_ss: sh3ss_get_status(1) = 10c0
supercat:~#
supercat:~#
supercat:~# cardmgr
cardmgr[146]: watching 2 cs: IO port probe 0x0000-0x0fff:sockets
 excluding excluding 0x08-0x0f 0x18-0x1f 0x28-0x2f 0x38-0x3f 0x48-0x4f 0x58-0x5f 0x68-0x77 0x80-0x87 0x90-0x9f 0xa8-0xa
f 0xb8-0xc7 0xd8-0xdf 0xe8-0xef 0xf8-0xff 0x108-0x10f 0x118-0x11f 0x128-0x12f 0x138-0x13f 0x148-0x157 0x160-0x167 0x170
-0x177 0x180-0x19f 0x1a8-0x1af 0x1b8-0x1cf 0x1d8-0x1ef 0x1f8-0x227 0x230-0x237 0x240-0x247 0x250-0x257 0x260-0x267 0x27
0-0x277 0x280-0x2af 0x2b8-0x2bf 0x2c8-0x2cf 0x2d8-0x2e7 0x2f0-0x327 0x330-0x347 0x350-0x357 0x360-0x37f 0x388-0x3cf 0x3
d8-0x3ef 0x3f8-0x3ff 0x408-0x40f 0x418-0x41f 0x428-0x42f 0x438-0x43f 0x448-0x467 0x470-0x497 0x4a0-0x4a7 0x4b0-0x4c7 0x
4d0-0x4ef 0x4f8-0x4ff 0x508-0x50f 0x518-0x51f 0x528-0x52f 0x538-0x53f 0x548-0x557 0x560-0x567 0x570-0x577 0x580-0x587 0
x590-0x5a7 0x5b0-0x637 0x640-0x647 0x650-0x667 0x670-0x687 0x690-0x697 0x6a0-0x6a7 0x6b0-0x6b7 0x6c0-0x6c7 0x6d0-0x717
0x720-0x727 0x730-0x737 0x740-0x747 0x750-0x75f 0x768-0x76f 0x778-0x77f 0x788-0x7a7 0x7b0-0x7cf 0x7d8-0x7ef 0x7f8-0x7ff
 0x808-0x80f 0x818-0x81f 0x828-0x82f 0x838-0x83f 0x848-0x84f 0x858-0x877 0x880-0x8c7 0x8d0-0x8ef 0x8f8-0x90f 0x918-0x96
7 0x970-0x977 0x980-0x987 0x990-0x99f 0x9a8-0x9af 0x9b8-0x9bf 0x9c8-0x9cf 0x9d8-0x9e7 0x9f0-0x9f7 0xa00-0xa07 0xa10-0xa
1f 0xa28-0xa2f 0xa38-0xa3f 0xa48-0xa4f 0xa58-0xa5f 0xa68-0xa77 0xa80-0xa87 0xa90-0xa97 0xaa0-0xaa7 0xab0-0xaf7 0xb00-0x
b07 0xb10-0xb1f 0xb28-0xb2f 0xb38-0xb3f 0xb48-0xb4f 0xb60-0xb67 0xb70-0xb77 0xb80-0xb87 0xb90-0xbbf 0xbc8-0xbcf 0xbd8-0
xbef 0xbf8-0xbff 0xc08-0xc0f 0xc18-0xc1f 0xc28-0xc2f 0xc38-0xc3f 0xc48-0xc4f 0xc58-0xc67 0xc70-0xc77 0xc80-0xc87 0xc98-
0xc9f 0xca8-0xcaf 0xcb8-0xcbf 0xcc8-0xccf 0xcd8-0xce7 0xcf0-0xcff 0xd08-0xd0f 0xd18-0xd27 0xd38-0xd3f 0xd48-0xd7f 0xd88
-0xd8f 0xd98-0xde7 0xdf0-0xdf7 0xe00-0xe07 0xe10-0xe17 0xe20-0xe27 0xe30-0xe37 0xe40-0xe77 0xe80-0xe97 0xea8-0xeaf 0xeb
8-0xebf 0xec8-0xecf 0xed8-0xee7 0xef8-0xeff 0xf08-0xf1f 0xf28-0xf2f 0xf38-0xf3f 0xf48-0xf67 0xf70-0xf77 0xf80-0xf87 0xf
90-0xf97 0xfa0-0xfb7 0xfc0-0xfc7 0xfd0-0xfd7 0xfe8-0xfef 0xff8-0xfff
supercat:~# sh3ss_ss: sh3ss_get_status(0) = 10c0
sh3ss_ss: sh3ss_set_socket(sock=0, flags=200, csc_mask=80, Vcc=33, Vpp=0, io_irq=0)
sh3ss_ss: sh3ss_set_voltage(0, 33, 0)
sh3ss_ss: sh3ss_set_socket(sock=0, flags=220, csc_mask=80, Vcc=33, Vpp=0, io_irq=9)
sh3ss_ss: sh3ss_set_socket(sock=0) sh3ss_map_irq(34,9)
cat709_make_irq_demux(34 -> 9)
sh3ss_ss: card type: i/o
cs: write_cis_mem(1, 0x103, 1)
write_cis_mem::bus_writeb(0,b8000206)
cs: write_cis_mem(1, 0x100, 1)
write_cis_mem::bus_writeb(41,b8000200)
cs: write_cis_mem(1, 0x101, 1)
write_cis_mem::bus_writeb(0,b8000202)
cs: write_cis_mem(1, 0x102, 1)
write_cis_mem::bus_writeb(0,b8000204)
sh3ss_ss: sh3ss_set_io_map(sock=0, map=0, flags=0x5, speed=0ns, start=0x0b50, stop=0x0b5f)
sh3ss_ss: port_map(start=0xb50,stop=0xb5f,physaddr=0xba000000)
cat709_port_map(start(0xb50),stop(0xb5f),offset(0xba000000))
supercat:~#
supercat:~# ide_cs: ide_register() at 0xb50 & 0xb5e, irq 9 failed
sh3ss_ss: sh3ss_set_socket(sock=0, flags=200, csc_mask=80, Vcc=33, Vpp=0, io_irq=0)
sh3ss_ss: sh3ss_set_socket(sock=0) sh3ss_unmap_irq(9)
cat709_make_irq_undemux(34)
sh3ss_ss: card type: memory
sh3ss_ss: sh3ss_set_io_map(sock=0, map=0, flags=0x0, speed=0ns, start=0x0000, stop=0x0001)
sh3ss_ss: port_unmap(start=0x000,stop=0x001)
cat709_port_unmap(start(0x000) or stop(0x001))
sh3ss_ss: sh3ss_get_status(1) = 10c0
sh3ss_ss: sh3ss_set_socket(sock=1, flags=200, csc_mask=80, Vcc=33, Vpp=0, io_irq=0)
sh3ss_ss: sh3ss_set_voltage(1, 33, 0)
sh3ss_ss: sh3ss_set_socket(sock=1, flags=320, csc_mask=80, Vcc=33, Vpp=0, io_irq=9)
sh3ss_ss: sh3ss_set_socket(sock=1) sh3ss_map_irq(32,9)
cat709_make_irq_demux(32 -> 9)
sh3ss_ss: card type: i/o
cs: write_cis_mem(1, 0x103, 1)
write_cis_mem::bus_writeb(0,b8008206)
cs: write_cis_mem(1, 0x100, 1)
write_cis_mem::bus_writeb(4b,b8008200)
cs: write_cis_mem(1, 0x101, 1)
write_cis_mem::bus_writeb(8,b8008202)
cs: write_cis_mem(1, 0x102, 1)
write_cis_mem::bus_writeb(0,b8008204)
cs: write_cis_mem(1, 0x104, 1)
write_cis_mem::bus_writeb(0,b8008208)
cs: write_cis_mem(1, 0x105, 1)
write_cis_mem::bus_writeb(e8,b800820a)
cs: write_cis_mem(1, 0x106, 1)
write_cis_mem::bus_writeb(2,b800820c)
sh3ss_ss: sh3ss_set_io_map(sock=1, map=0, flags=0x1, speed=0ns, start=0x02e8, stop=0x02ef)
sh3ss_ss: port_map(start=0x2e8,stop=0x2ef,physaddr=0xba008000)
cat709_port_map(start(0x2e8),stop(0x2ef),offset(0xba008000))
ttyS00 at port 0x02e8 (irq = 9) is a 16550A
supercat:~#
supercat:~#
supercat:~# pon airh
supercat:~# tail -f /var/log/syslog
Jan  4 08:45:08 supercat chat[175]: expect (CONNECT)
Jan  4 08:45:08 supercat chat[175]: ^M
Jan  4 08:45:10 supercat chat[175]: ATDT0570-570-635##61^M^M
Jan  4 08:45:10 supercat chat[175]: CONNECT
Jan  4 08:45:10 supercat chat[175]:  -- got it
Jan  4 08:45:10 supercat chat[175]: send (\d)
Jan  4 08:45:11 supercat pppd[174]: Serial connection established.
Jan  4 08:45:11 supercat pppd[174]: using channel 1
Jan  4 08:45:11 supercat pppd[174]: Using interface ppp0
Jan  4 08:45:11 supercat pppd[174]: Connect: ppp0 <--> /dev/ttyS0
Jan  4 08:45:12 supercat pppd[174]: sent [LCP ConfReq id=0x1    ]
Jan  4 08:45:12 supercat pppd[174]: rcvd [LCP ConfRej id=0x1   ]
Jan  4 08:45:12 supercat pppd[174]: sent [LCP ConfReq id=0x2 ]
Jan  4 08:45:13 supercat pppd[174]: rcvd [LCP ConfReq id=0x1   ]
Jan  4 08:45:13 supercat pppd[174]: sent [LCP ConfAck id=0x1   ]
Jan  4 08:45:13 supercat pppd[174]: rcvd [LCP ConfAck id=0x2 ]
Jan  4 08:45:13 supercat pppd[174]: sent [LCP EchoReq id=0x0 magic=0x25a868b6]
Jan  4 08:45:13 supercat pppd[174]: sent [PAP AuthReq id=0x1 user="xxxxxxxxx" password=]
Jan  4 08:45:13 supercat pppd[174]: rcvd [LCP EchoRep id=0x0 magic=0xc3c0bdb9]
Jan  4 08:45:13 supercat pppd[174]: rcvd [PAP AuthAck id=0x1 ""]
Jan  4 08:45:13 supercat pppd[174]: kernel does not support PPP filtering
Jan  4 08:45:13 supercat pppd[174]: sent [IPCP ConfReq id=0x1    ]
Jan  4 08:45:13 supercat pppd[174]: rcvd [IPCP ConfReq id=0x1 ]
Jan  4 08:45:13 supercat pppd[174]: sent [IPCP ConfAck id=0x1 ]
Jan  4 08:45:14 supercat pppd[174]: rcvd [IPCP ConfRej id=0x1 ]
Jan  4 08:45:14 supercat pppd[174]: sent [IPCP ConfReq id=0x2   ]
Jan  4 08:45:14 supercat pppd[174]: rcvd [IPCP ConfNak id=0x2   ]
Jan  4 08:45:14 supercat pppd[174]: sent [IPCP ConfReq id=0x3   ]
Jan  4 08:45:15 supercat pppd[174]: rcvd [IPCP ConfAck id=0x3   ]
Jan  4 08:45:15 supercat pppd[174]: not replacing existing default route to eth0 [192.168.7.1]
Jan  4 08:45:15 supercat pppd[174]: Cannot determine ethernet address for proxy ARP
Jan  4 08:45:15 supercat pppd[174]: local  IP address 61.193.64.236
Jan  4 08:45:15 supercat pppd[174]: remote IP address 61.204.7.254
Jan  4 08:45:15 supercat pppd[174]: primary   DNS address 202.225.94.247
Jan  4 08:45:15 supercat pppd[174]: secondary DNS address 210.147.240.193
Jan  4 08:45:15 supercat pppd[174]: Script /etc/ppp/ip-up started (pid 178)
Jan  4 08:45:15 supercat pppd[174]: Script /etc/ppp/ip-up finished (pid 178), status = 0x0
Jan  4 08:45:43 supercat pppd[174]: sent [LCP EchoReq id=0x1 magic=0x25a868b6]
Jan  4 08:45:43 supercat pppd[174]: rcvd [LCP EchoRep id=0x1 magic=0xc3c0bdb9]

XAX

月曜日はエグザスでbody pumpの日で楽しみにしてたんだけども、pppdのハッキングをしていて行けなかった。腕立てして寝ることにする。