火曜日, 4月 25, 2006

またまたロングランで落ちるプログラム・・・・

外部の制御器からUDPの通信でデータを受け取っ記録するプログラム。
一定時間運転させるとSegmentation Faultで落ちる。
通信バッファが怪しいとにらんで、カーネルのチューニングも含めて調査。
受信バッファのサイズはパラメータで変更できるようにしてあったので、
このパラメータのチューニングも実施。

でも、いろいろやってみたけどガ原因が解決出来ない。

結局プログラムを徹底的に調査したら、外部からパラメータを与えるように
修正したつもりで、バッファサイズを固定値で設定していたことが判明。

駄目じゃん・・・・・

さて、これからロングランだ。

日曜日, 4月 23, 2006

ようやくお仕事用Linux CF完成

お仕事で使う組み込み用PCのLinux環境の作成メモ。

glibcが2.2系、カーネルがacpiをサポートした2.4.22以降、pcmciaが使えること。
最初はRedhat9をベースに作っていたのだが、サポートが既に終了している為、情報があまり正確に残ってない。
カーネルにACPIサポートを入れてビルドし直したりしたけど、カーネル構築で他に必要なものを入れ忘れたりで、何度か繰り返したりで、結局面倒くさくなって挫折。

で、今インストールイメージが入手できて、ACPIがパッケージでインストールできそうなvine2.6を発見し、
こいつをベースに環境構築を始める。

とりあえずgccも使えるようにと1GBのCFで作成。
Xはいらないから、パッケージを選択して1GBに収まるように設定。
代替のデスクトップPCでのインストールだから、明示的にノートPC用のPCMCIAサポートを忘れずに選択。

インストール完了後、ACPIをVinePlusからダウンロードしてインストール。
rpm -UVh acpid-・・・・
このままでは、シャットダウンスクリプトが正しくないので修正
サンプルをコピーし以下の名前で作成。
/etc/acpid/events/power

# /etc/acpid/events/power

event=button.power.*
action=/sbin/poweroff

書き換え後、acpidを起動
/etc/rc.d/init.d/acpid start

電源ボタンでシャットダウンを確認する。

さて、このまま入れ換えて実機で起動をかけてみたところ、
実機では起動できずKernel Panic
何故かと考えてみたら、元々内蔵しているHDDがhdaとして認識されてしまい、起動できないようである。

別のPCにIDE-CFアダプタつけて起動し、liloの設定/etc/lilo.confを書き換えて、
lilo -v
して、liloをコンパイルして書き込みして再起動

OKOK。これで起動はOK。

しかーし、今回はたまたまCFから起動できる別のPCがあったから良いが、実際にはこれでは不便。
てな訳で、aptのsource.listを修正して、
#apt-get install grub
でgrubをインストールし、grubをMBRに書き込む
# /usr/sbin/grub-install /dev/hda

そして再起動
これでgrubで再起動が可能になった。
とりあえず、これでCFをマウントできるLinuxがあればgrub.confを書き換えてやれば、
hdaだろうがhdbだろうがコンパイルなしで切り替えられる。

さて、ここまで来てPCMCIAのカードを入れてみる。
認識されない・・・・・(-o-;

/etc/sysconfig/pcmciaをみると、
pcmcia=noになってた。
ここいらをちょいと弄くって再起動

そんなこんなでようやく終了。

あとは、/etc/rc.localで、自動マウントやら自動プログラム起動を書いて終了。
次はいらないものが何処まで削れるかだな。

火曜日, 4月 18, 2006

Linuxの環境も結構面倒だ・・・・

お仕事Linux環境としてセットアップしたVine3.2では、なんとまぁ、肝心のプログラムが動かない。
なんてこったい。
開発環境がglibc2.2、こいつは2.3。
うーむ、困ったもんだ。どうしましょ。

日曜日, 4月 16, 2006

お仕事用Linux CF作成中

お仕事の組み込みPC用Linux CF作成中
ACPIをサポートしていて、カーネル2.4のものを物色。

とりあえずVineの最新版3.2が対応していそうなので、こいつをインストール。
電源ボタンで電源も切れるし、ま大丈夫でしょう。