*書き換え中・・・中断 [#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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS