*書き換え中・・・中断 [#cfc2b002]
-linux-2.6.19-landisk メモ
--RTC新インタフェースへの対応
--button 仕様変更
--SH-IDEが除外されている。
---現状、USL-5PでCFが使えない。
---linux-2.6.20のlibata(driver/ata/pata_platform.c)でサポートされるらしい。?
**お試し版 [#fdfe0e3c]
http://eggplant.ddo.jp/www/download/kernel26/linux-2.6.19-landisk-tmp/ ~
~
対応landisk-tools:~
http://eggplant.ddo.jp/www/download/debian26/base/landisk-tools-20061204.tgz~
**button 仕様変更 [#xefc91ed]
landisk-tools-20061204.tgz の btnctrl2.cを例に簡単に説明します。~
本例では、(1)デバイスファイルをオープン、(2)selectでボタンの押下イベントを監視、(3)ボタンの情報を読み、押されたボタンの判定を行う、という手順でボタンの検出を行っています。~
selectを使用すると、タイムアウト処理、即ち「一定時間待ってボタンが押されなかった時の処理」を簡潔に記述できます。~
-/usr/local/src/landisk-tools/btnctrl2.c~
#pre{{
int main(int argc, char *argv[])
{
int fd;
int ret;
struct timeval tv;
fd_set rfds;
char buf[4];
int btn;
// 省略
&color(red){fd = open("/dev/btnctrl2", O_RDONLY); // (1)};
if(fd == -1) {
printf("/dev/btnctrl2 open error...\n");
exit(0);
}
while (1) {
FD_ZERO(&rfds);
FD_SET(fd, &rfds);
tv.tv_sec = 60;
tv.tv_usec = 0;
&color(red){ret = select( fd + 1, &rfds, NULL, NULL, &tv ); // (2)};
if( ret < 0 ) {
// 省略
}else if(ret > 0){
&color(red){read( fd, buf, 1 ); // (3)};
btn = (int)buf[0];
// 省略
}
}
}
}}
**デバイスファイルの補足事項 [#yf4b5c3c]
RTC等のデバイス番号は、カーネル起動時に動的に割り当てられるよう、仕様変更されています。~
本来ならは、udev を実装してデバイスの動的割り当てを行うべきでしょうが、面倒なので、~
下記スクリプトで代用することにします。~
~
-/etc/rc.boot/landisk_setup ~
#pre{{
#!/bin/sh
DEV=`awk '$2 ~ /rtc/ { print $1;}' /proc/devices`
rm -f /dev/rtc
if [ "$DEV" != "" ] ; then
mknod -m 660 /dev/rtc c $DEV 0
else
mknod -m 660 /dev/rtc c 10 135
fi
DEV=`awk '$2 ~ /landisk_drv/ { print $1;}' /proc/devices`
rm -f /dev/btnctrl /dev/btnctrl2 /dev/ledctrl
if [ "$DEV" != "" ] ; then
mknod -m 440 /dev/btnctrl2 c $DEV 0
mknod -m 660 /dev/ledctrl c $DEV 1
else
mknod -m 600 /dev/btnctrl c 99 22
mknod -m 660 /dev/ledctrl c 99 21
fi
}}
**コメント等 [#keb07235]
#comment