まどかの 日記

[2005/04/11〜2005/04/17の日記]
[2005/04/18〜2005/04/24の日記]
[2005/04/25〜2005/05/01の日記]
[2005/05/02〜2005/05/08の日記]
[2005/05/09〜2005/05/15の日記]
[2005/05/16〜2005/05/22の日記]
[2005/05/23〜2005/05/29の日記]
[2005/05/30〜2005/07/03の日記]
[2005/07/04〜2005/07/10の日記]
[2005/07/11〜2005/07/17の日記]
[2005/07/18〜2005/07/24の日記]
[2005/07/25〜2005/07/31の日記]
[2005/08/01〜2005/08/07の日記]
[2005/08/08〜2005/08/14の日記]
[2005/08/15〜2005/08/21の日記]
↑過去3ヶ月くらいの日記はこちら↑

まどかは「P/ECE Hand Book」を応援しています



1385
2005/08/28()
 色々回ってきました
 今日はのんびりお昼まで寝て、昼から一人でちょっと遠くのカラオケに行き、DAMの最新採点システムで歌いたかったのですが、案内されたDAMは古いタイプで、何にも面白くないので、採点無しに普通に歌ってきましたorz
 
 で、その後は、嫁さんに頼まれたものを探しに、ドンキホーテや大須を巡って帰宅。
 もっとやりたいこといっぱいあったけど、疲れたのでそのまま寝ました。

 来週は何しようかな。
 それでは、おやすみなさーい

1384
2005/08/27()
 息子に会ってきました(^^
 今日は午前中から嫁さんの実家に向かって、1日息子と遊んで(?)来ました(^^
 相変わらず元気でたくさんお乳を飲むので、だいぶ色々なところにお肉がついて来ました。
 元々ちょっと小さい子なので、この調子でどんどん大きくなって欲しいですね(^^

 というところで、今日はちょっとした事件発生。うんこをしたみたいなので、おむつを換えようと、オムツカバーを開けて別の布オムツに換えようとしてたら、急におしっこをし出して、しかもその状態のまま暴れたりするから、おしっこの軌跡が弧を描き、自分自身の顔めがけて飛んで行きました(^^;
 自分のおしっこが顔にかかっているのにも関わらず、本人は別に泣くわけでもなくなお暴れてました(笑)
 私達は、急いでおむつでフタをして、顔を拭いたりシーツを拭いたり。
 頭にも服にもかかってしまったので、そのままお風呂に入れることに。

 お風呂は私が入れたのですが、まだ段取りがよく判っていないので嫁さんに聞きながら一生懸命洗いました。
 先週はずーっと持っているだけでも腕が疲れたのですが、この1週間鉄アレイとかで腕を鍛えておいたおかげか、今回は全然疲れ知らずでした(^^ でもそのかわり、ずーっと中腰でいるため今度は腰と背中が疲れてしまいました。うーん、トレーニングメニューにそこらの部位も追加せねば……。

 で、今日は夕飯まで頂いてから自宅に帰りました。
 家に帰ってからは、この日記書いたり音楽聴いたり。

 ちなみに、夜に私の母親から電話がかかってきて、今日の息子のおしっこ事件の話をしたら、「あんたもよくそうなってたよ」って言われました。あちゃー(笑)

 明日は良く晴れるそうなので、お布団干したりします。
 あと、今日嫁さんの実家に向かう途中のバスの中で、miniSDを内蔵することによって持ち出しやすくなったMMC/SD改造のP/ECEでMP3を聴いていたら無性にカラオケに行きたくなったので、一応嫁さんの許可をもらって、運動がてらちょっと遠くのカラオケに行ってこようと思います。

 最近はDAMの採点機能がパワーアップしてるみたいなので、楽しみにしてます(^^
 それでは、おやすみなさーい

1383
2005/08/26()
 μClibc試してみました
 今日は11月にある展示会のブースレイアウトについての打ち合わせとか、他の仕事もしながら、主にLinuxを使うシステムでのメモリ容量削減のため、通常のglibcライブラリ互換でかつサイズの小さいμClibc(uClibcと書くときもある)を導入することに決めて、今日はそのあたりの勉強と実験をしていました。

 一応Embedded UNIXとか読んでてuClibcの導入方法とかはなんとなく知っていたのですが、オフィシャルサイトから最新版を取ってきたら、なんか雑誌で紹介されている内容と違うみたいなので、英語の資料を読んだりしてコンパイル&インストールなどをやってました(^^; buildrootって便利ですね。

 ちなみにuClibcはLinuxの各種コマンドやシェルの動作を一手に引き受けるLinux縮小計画にはかかせないBusyboxと同じ作者によるものです。
 BusyboxもuClibcを使うようにしてコンパイルしなおせばさらに小さくすることが出来ます。すごいですね。
 ちなみに、uClibcのようにglibcに代わる小サイズライブラリはdietlibcとかがあるようなのですが、とりあえずBusyboxも小さくしたいので、相性が良さそうで有名なuClibcを使うことにしました。

 で、色々試してみたのですが、2.4.18ベースのSH-Linuxのカーネルソースがうまくコンパイルできなかったり、デバイスドライバもuClibc対応のgccでコンパイルすると上手く動いてくれなかったり、何よりもBusyboxがuClibc版だと上手く動かない……orz
 カーネルコンパイルに使用しているgccのVer.とuClibcに対応させたgccのVer.が同じじゃないとだめだとか、なんかそういう部分のところの相性で上手くいかないのかなぁ。
 一応uClibc対応じゃないgcc3.2.3でコンパイルし、glibcを静的リンクしたLinuxカーネルとbusyboxで起動し、uClibcもルートファイルシステム内に入れて、uClibcをリンクするようにコンパイルしたデバイスドライバのテストプログラムはちゃんと動いたので、uClibcのコンパイルとSH3環境へのインストールは上手く行っているみたいですが、uClibc版のbusyboxでやると、起動時にシェルが起動しません。起動時に上手くライブラリがリンクできないのでしょうか。ダイナミックリンカ関連の不備かな。また勉強します(- -;

 Linuxはこういうところが結構大変なのかも知れませんが、オープンソースなのでソースを頑張って読めばなんとなく流れがわかるおかげで、まだ挫折せずに済んでます(^^;
 クロス開発はいろいろややこしくて大変ですが、その代わりかなり楽しいです。
 SH7727内蔵のLCDCのデバイスドライバもどきも書けるようになったので、SH3ボードでの動画再生も夢じゃないなぁと思いました。

 というわけで、今日はここまで。
 それでは、おやすみなさーい

1382
2005/08/25()
 LCDCドライバもどき書けました(^^;
 今日は昨日の続きで、SH3のレジスタ領域にアクセスさせる独自のデバイスドライバ経由でCPU内蔵のLCDC(LCDコントローラ)のレジスタを書き換えて、画面の色のパレットを変更するというのを作っていました。
 昨日の段階で一応だいたいできていたのですが、LCDを付けてくれた上司の配線が、暫定的なものだった(まじめに配線するといっぱいつなげないといけなくて大変だから)ので、通常のパレット制御だと上手く色が出てくれませんでした。
 
 そこで、今日はその配線を考慮してパレットの設定値を適切にし、思った通りの色がでるようになりました(^^
 まだ出来る制御はLCDCの各レジスタへの設定値読み取り&書き込みと、パレットの設定くらいですが、とりあえずテスト用ではまずまずのものが出来ました。
 今回利用しているSH-Linuxのカーネルソース(SH7727用のパッチ当て済み)には、ターゲットCPU SH7727のLCDC用のデバイスドライバ(日立製?)が付属しているので、そのデバイスドライバを利用すれば普通に使えば良かったのかも知れませんが、うちの会社のハードを制御するデバイスドライバの練習がてら自分で作ってみました。

 これでようやく通常ユーザープログラムからアクセスできないレジスタ領域にデバイスドライバ経由でアクセスさせる方法が判ってきました。こうしてひとつずつ理解していくのは嬉しいものですね(^^
 この基本ができたらあとは何でもできそうなので、バリバリ制御しまくるぞ。

 というわけで、今日はここまで。
 それでは、おやすみなさーい

1381
2005/08/24()
 レジスタへのアクセス成功
 今週頭から色々試していたCPUのレジスタ領域へのアクセスですが、結局自分でデバイスドライバ書いて、それのioctlメソッドで絶対アドレスを指定してアクセスするという方法を採りました。

 /dev/memデバイスを使う方法やmmap、そしてllseek(lseek64)を使う方法だと、0xA4000C00というようなアドレスが上手く伝わらないようです。普通そんな領域に簡単にアクセスできたら問題だからですよね(^^;
 MMUがOFFだったら上手くいったのかな?

 めでたくCPUの各種レジスタにアクセスすることができるようになったので、LCDCのレジスタを書き換えて、液晶のパレット変更とかが出来るテストプログラムを作ってました。
 本来なら、ちょっとした作業ならシェルスクリプトで書けると思うのですが、構文とか利用可能なコマンドとかがよく判らなかったので、結局自分でプログラム書いてしまいましたorz。今度本屋でシェルスクリプトに関しての本を買ってこようと思います。
 実は、(ちょっと凝った)繰り返し処理なんかシェルスクリプトでちょちょいのちょいだーっていう淡い幻想を抱いていたのですが、実際やってみたら全然やり方が判らなくて惨敗。本で勉強して出直してきます(j−j

 で、出来たLCDC制御プログラムでパレット変更をやってみたのですが、なぜか思った色がでなくて、結局今日はそこでつまづいてしまいました。
 ですが、色々LCDCのデータシートや液晶のデータシートを読んでたら、ハードウェア担当の上司が暫定的な配線でつなげていたことを思い出して、通常のパレット操作では思ったとおりの色が出ないことに気付きました(^^;
 最初から普通に配線されていないんじゃ、普通のやり方でやっても色が出ないのは当たり前ですね(汗

 と、いうところで今日はタイムアップ。明日早速パレット設定の部分を現状に合わせて直そうと思います。原因が判ればこっちのものです(^^

 それでは、おやすみなさーい

1380
2005/08/23()
 引き続き悩む(−−;
 今日も1日中/dev/mem経由の物理メモリアクセスでLCDCのレジスタを制御しようと頑張ったのですが、結局何やっても上手くいかないので、自分でデバイスドライバ書いて、それのioctlのリクエストコマンドとしてシークとメモリへの8bit,16bit,32bitアクセスを実装することにしました。

 こういうやり方が正攻法なのかどうかもよく判っていませんが、とりあえず今はこれでやることにします。
 そのうちちゃんとした方法がわかったらそれに直すつもりです。

 ああ、なんか負けちゃった気分。
 それでは、おやすみなさーい

1379
2005/08/22()
 物理メモリへのアクセスに悩む
 今日は先週末に液晶に表示されたペンギンを、ハードウェア担当の上司に見てもらったら、CPU内蔵のLCDC(LCDコントローラ)のレジスタに設定された値が知りたいのと、そのレジスタに対して任意の値を設定したいという要望をもらったので、今週はその辺りを主にやっていくことに。

 通常、OS上で動くプログラムからアドレスを指定すると、それは仮想メモリ上のアドレスということになり、またMMUのメモリ保護機能によりレジスタなどのある領域へのアドレス直接指定ができません。
 今回使用するSH-Linuxも例に漏れず、SH3上で動いているのですが、MMUが効いているので上記の制約があります。
 
 というわけで、ユーザープログラムからレジスタの物理メモリアドレスを指定してアクセスする方法を確立しないとLCDCの制御はできないわけで、普通に考えたらカーネルモードで動くデバイスドライバで指定メモリにアクセスさせるインターフェースを作っちゃえば良い気がするのですが、色々調べてみると/dev/memというデバイスドライバ経由で物理メモリにアクセスできるようなので、ちょっとそれを勉強してみようと思いました。

 早速、色んなサイトを参考にしながら/dev/memを使ってのレジスタアクセスに挑戦するが、全く上手くいかないorz。何回やっても良くわからないので、/dev/memへの引数の渡り方を調べるために、元のソースをいぢるのはちょっと嫌なので、自分で/dev/memドライバもどきを作ってデバッグすることにしました。

 そこで判ったこと。アドレス指定に使用するlseekシステムコールのオフセットの型がoff_t(typedef long off_t;)だったので、0xA4000C00とかいうアドレスは上手く指定できない……orz。(マイナスは弾かれる)
 デバイスドライバに渡ってくるファイル位置を示す引数はloff_t(64bit符号付整数)なので、それを使ってやるシークってできないのかなと色々調べてみたらllseek(lseek64)っていうシステムコールがあることが判って、早速それ使ってやってみたのですが、やっぱり上手くアドレスが引数として渡ってこない。
 ※2005/08/27 追記 ソースの最初に#define _FILE_OFFSET_BITS 64 って書けばよかったのかな?(^^;

 結局今日はこれ以上進まず時間切れ。
 予想ではもっとすんなりいけると思っていたのになぁ。奥が深いですね。
 というわけで、今日はここまで。

 それでは、おやすみなさーい