2007年10月29日月曜日

Windows Mobile 2003のプログラミング



C#でやるのがいいのかな?


ってことで、C#の勉強をしてみることにしました。


C#のいい本を探してみる。


WindowsCE関係のプログラミング関係の本があんまりない。





WILLCOMなんかでスマートフォンはやって、すこしは増えてるのかな。


WILLCOM携帯アプリプログラミングブック


ISBN:4839919682





Windows Mobile 5.0 アプリケーション開発 Beginner's Book


ISBN:4774128910






VS2003は持ってるので、追加で必要なSDKなどのリンクのメモ。


eMbedded Visual C++ 4.0 (日本語版)


http://www.microsoft.com/japan/msdn/vstudio/device/evc_download.aspx





eMbedded Visual C++ 4.0 SP3 (日本語版)


http://www.microsoft.com/downloads/details.aspx?FamilyID=5bb36f3e-5b3d-419a-9610-2fe53815ae3b&displaylang=ja





Windows Mobile 2003 Second Edition-based Pocket PC 用エミュレータ (英語)


http://www.microsoft.com/downloads/details.aspx?FamilyId=4953D34D-692F-4C87-AC69-CB235DBDAD1D&displaylang=en





Windows Mobile 2003 software for Pocket PC 日本語版 ソフトウェア開発キット (SDK) (日本語版)


http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=9996B314-0364-4623-9EDE-0B5FBB133652





Windows Mobile 2003 - based Pocket PCs : 他言語エミュレータ イメージ (英語)


http://www.microsoft.com/downloads/details.aspx?FamilyID=57265402-47a8-4ce4-9aa7-5fe85b95de72&DisplayLang=en





2007年10月17日水曜日

買ってみた



少し臨時収入があったのでPDAを買ってみました。


ipaqの2410で無線LANもついてて思いのほかいい感じです。


通勤電車のなかで音楽を聞きながらpdfの文章を読んだりしてます。


さすがに長文はかけないなぁ・・


これぐらいの長さで限界です。





2007年10月16日火曜日

4.22の設定



やること:


1.無線LANの設定(PCMCIAの周辺が変更?orinocoのドライバがないみたい)


ドライバはカーネルに組み込まれることになったようなので、ついでに色々いじってカーネルを再構築してみまた。


2.Subversionのインストール(contrib)


3.FluxBoxが1.0になったのでコンパイルしなおして、設定も1からやりなおす。


/usr/local/share/fluxboxの中身を$HOME/.fluxboxにコピーして色々いじる。





2007年10月1日月曜日

シグナル



カーネルやユーザからプロセスになにかを通知するために送られる。


何種類かあって、それぞれにデフォルトの動作が決まっているが、


デフォルトで無視されるものもある。


システムコールを捕捉(キャッチ、トラップ)して、プロセスが受け取った


ときに動作(シグナルハンドラ)を変更できる。





キャッチできないシグナルもある。例えばSIGKILLは、確実にプロセスを終了させる


ために、変更したりできなくなっている。











int sigaction(int signum,const struct sigaction *act,struct sigaction *oldact)


対象シグナルを指定して、プロセスが受け取った際の動作を変更する。





signum


対象となるシグナルを指定する。


SIGKILLとSIGSTOPは、指定できない。





const struct sigaction *act


シグナルを受け取った時の動作などを指定する。



struct sigaction{


void (*sa_handler) (int);


void (*sa_sigaction) (int,siginfo_t *,void *);


sigset_t sa_mask;


int sa_flags;


void (*sa_restorer) (void);


}






sa_handlerとsa_sigactionは、どちらかのみを利用して、シグナルハンドラを指定する。


sa_maskは、ブロックするシグナルを指定するのに使う。


シグナルは、プロセスが実行されている時のいつ送られてくるか分からない。そうすると、シグナルハンドラ実行中に、同じシグナルが送られてきて、シグナルハンドラが二重にじっこうされるかもしれない。それを止めるために、シグナルハンドラ実行中にシグナルが送られてきたとき、そのシグナルを保留(ブロック)しておく。


このブロックしておくシグナルを指定するのにsa_maskを使う。


sigaction()で、シグナルハンドラ実行中は、基本的にsigaction()で指定されているシグナルはブロックされる。





マスクをつくる関数


int sigemptyset(sigset_t *set);マスクsetを空にする。


int sigfillset(sigset_t *set); マスクsetに全てのシグナルを指定する。





struct sigaction *oldact


sigaction()が実行されたときのシグナルハンドラが入る。


必要ないときはNULLを指定。








理解できてるような、できてないような中途半端な感じ。。。。





2007年9月24日月曜日

CD-Plamoをカスタマイズしてみる



いろいろな都合でCDから起動する環境が必要になりました。


そこで、いつも使っているPlamoLinuxをベースにしたCD-Plamoを使うことにしました。


Knoppixとかも使ってみたんですが、やっぱり少し豪華すぎる気がしちゃいました。


ということで、CD-Plamoを使っていたんですが、いろいろいじりたくなったので、なんとなくでいじってみました。





●準備


contribからmkisosfをインストールしておく。それとディレクトリを圧縮する必要があるので、mkzftreeコマンドをインストールしておきます。


mkzftreeコマンドは、zisofsからソースをダウンロードできます。





CDの中味を全てコピーします。


CD-Plamoは、特殊な圧縮方式をつかっているので、Linux上で作業する必要があります。


デバイスをコピーするんでrootで作業します。



/root

|__/work

|__/CDPlamo  (ここにコピーしました)








chroot


chrootというコマンドを利用することで、指定したディレクトリを仮想的に'/'とすることができます。






#cd /root/work


#chroot /CDPlamo /bin/bash






これで/CDPlamoディレクトリを'/'としてbashを起動します。


これ以降は、このbash上で作業を行いますが、このシェルでは、/root/work/CDPlamoが仮想的な'/'になって、これより上に移動できないので、別のコンソールを開いて、そちらでファイルの追加等を行います。(この別のコンソールをzshと表記します)


既存のシステム上のディレクトリを母艦と表記します。





chrootの方と通常のシェルを間違って作業すると大変なことになります。


移動するごとにpwd,ls等で現在位置を確認してください。





●いじったところ


1.不要なアプリの削除


 通常と同じようにpkgtoolを利用して削除できる。


 この時に/dev/nullがないとエラーが出ますので。/devディレクトリを作って、その中に母艦から/dev/nullをコピーしておきます。






zsh


#mkdir /root/work/plamo/dev


#cp -a /dev/null /root/work/plamo/dev (aオプションを忘れない)






2.追加のアプリをインストール


 これも通常と同じようにinstallpkgを利用できる。


 このとき/tmpがないとエラーが出ますのでbashの方で作っておきます。(作らなくてもいけそうです)


 アプリを/usr/local以下に入れるのが主流だと思うんですが、/usr/local以下は存在しません。ので、/usr以下に入れて逃げました。


(自分メモ)


 vim,fluxbox,fluxconf,mpg123


変更等がおわったら、先程作った/tmp,/devディレクトリを削除し、chrootを終了しておきます。exitで終了できます。





3.ホームに置く設定ファイルの追加、変更


 追加したアプリや独自の設定があるアプリの設定ファイルを追加、変更しました。


 zshで、母艦のホームディレクトリからファイルを持ってきたり、bashで普通に編集したりします。


(自分メモ)


/home-----.fluxbox,.w3m,.zshrc,.vimrc,.gvimrc,.mozilla


/usr/sbin-viをrename、vimのシンボルリンクをviでつくる。





4.initrd.gzの変更


 起動したときにram上に展開される、つまり書き込みが可能になる部分は、このinitrd.gzの中に入ってるので、これを展開、マウントして、必要な部分を変更する。


 



zsh


#cd /root/work/plamo/isolinux


#cp initrd.gz ../../


#cd ../../


#ls


initrd.gz plamo/


#gzip -d initrd.gz


#mount -o loop initrd /mnt






これで、initrd.gzが/mntにマウントされ編集可能になります。


ここでは、/etc,/rootで編集が必要な設定ファイルを変更しました。


(自分メモ)


/etc-----hosts,network.conf,passwd(シェルの変更)


/root----.bashrc





変更が終わったらinitrdをアンマウント、圧縮する。






zsh


#umount /mnt


#cd /root/work 


#gzip -9 initrd


#ls


initrd.gz






5.isoイメージを作る


 コピーしたinitrd.gzをもとに戻し、isolinuxディレクトリは、圧縮しないので、ひとつ上にコピーします。


 その後、圧縮して、isoイメージをつくります。






zsh


#cd /root/work/


#ls


initrd.gz plamo/


#mv initrd.gz plamo/isolinux


#cp -ar plamo/isolinux .


#ls


isolinux/ plamo/


#mkzftree plamo/ plamo_cus  (plamoディレクトリを圧縮しplamo_cusを作る


#cp -ar isolinux plamo_cus (isolinuxディレクトリをもどす)


#mkisofs -v -J -R -z -b isolinux/isolinux.bin -c isolinux/boot.cat \


-no-emul-boot -boot-load-size 4 -boot-info-table \


-V CDplamo_cus -o cdplamo_cus.iso plamo_cus


(ブート可能なisoイメージをつくる)


 #ls


cdplamo_cus.iso plamo/ plamo_cus/






完成です!!





ここまで、一週間かかりました。。。