Linux/CAN

なんとか Linux が動く環境まで持っていけるようになった。結局、OPB を2本持ち、片方は dcm で 25Mhz まで落とした。
OPB は 100MHz で動作しているが、CAN の core は 100Mhz では動作しない。こういう場合、IPIF で FIFO を使えばよいのだが、現状は FIFO を持っていないので、dcm で落とすことにした。手間がかかったが、結局落ち着いてやればうまくいく。
ということで、あとは Linux の世界の話になる。デバイスドライバ自体は、割り込みを使わなければそう難しくない。ちょこちょこ書いてデバッグすればよい。どういうわけか、デバイスドライバで死んでも、Linux はシステムごとパニックにならない。それでいいのかどうかは疑問。
通常、Unix では信頼性があるから、デバイスドライバ内での異常事態は想定外なわけで、想定外の時は早々にシステムをとめる必要がある。それがパニックだ。Linux ではデバイスドライバ内で問題が起きてもなぜか、関連する(かどうかわからない)プロセスが死ぬだけだ。設定の問題か?とにかく、こういう状態が存在すると言うところが、Linux の思想であり、信頼性(逆の意味も含めて)であろう。BSD 系ではありえない(と思う。最近の流れは知らないが)
あとは KGDB を動かせるようにしておかないとならないな。printk でもデバッグ可能だけど。カーネルの全コンパイルに1時間かかるので、できれば効率の良いデバッグがしたい。もっとも、クロスコンパイル環境をi386/Linuxにつくれば、全コンパイルも数分で終わりそうだが。
うわさによると、KGDB は使えないとか。redboot との絡みはどうなっているのだろう?その辺は調査しないとならない。
ついでに、PowerPC 405 の math-emu ありの Linux 上で、-mhard-float のオブジェクトを動かしてみた。バスエラーで落ちました。なぜ?このカーネルはちゃんと math-emu していないようだ。