雑記


過去ログ
2004/07/29 〜 2004/08/12までの雑記

2005年11月3日(木)
● linux.h を修正して動作確認
struct usb_urb {
unsigned char type;
unsigned char endpoint;
short padding; /* サイズ合わせのパディング (arm用) */
int status;
unsigned int flags;
...

linux.c:252 IOCTL_USB_SUBMITURB -2144578294 (802C550A) Call Size = 44
linux.c:253 size = 44
linux.c:254 usb_urb->endpoint = 1
linux.c:255 usb_urb->status = 4
linux.c:260 IOCTL_USB_SUBMITURB Error ret = 0 ★
linux.c:283 errno = 11 ★
linux.c:322 usb_urb_transfer() bytesdone = 12
ptpcam.c:167 result = 12(C)
ptp.c:116 ret = 8193
ptp.c:326 PTP_DP_NODATA

転送そのものは成功するがまだエラーがあるもよう

2005年11月1日(火)
● linux カーネルのオフセット
devio.c:1263 usbdevfs_urb = 44
devio.c:1264 usbdevfs_urb->endpoint = 1
devio.c:1265 usbdevfs_urb->status = 4

printk("%s:%d usbdevfs_urb = %d\n",__FILE__,__LINE__,sizeof(struct usbdevfs_urb) );
printk("%s:%d usbdevfs_urb->endpoint = %d\n",__FILE__,__LINE__,(int)&(((struct usbdevfs_urb *)0)->endpoint) );
printk("%s:%d usbdevfs_urb->status = %d\n",__FILE__,__LINE__,(int)&(((struct usbdevfs_urb *)0)->status) );

● libUSBのオフセット
linux.c:253 size = 42
linux.c:254 usb_urb->endpoint = 1
linux.c:255 usb_urb->status = 2

printf("%s:%d IOCTL_USB_SUBMITURB %d (%X) Call Size = %d\n",__FILE__,__LINE__,IOCTL_USB_SUBMITURB,IOCTL_USB_SUBMITURB,sizeof( struct usb_urb ) );
printf("%s:%d size = %d\n",__FILE__,__LINE__,sizeof( struct usb_urb ) );
printf("%s:%d usb_urb->endpoint = %d\n",__FILE__,__LINE__,(int)&(((struct usb_urb *)0)->endpoint) );
printf("%s:%d usb_urb->status = %d\n",__FILE__,__LINE__,(int)&(((struct usb_urb *)0)->status) );

という事で、ダミーフィールドを2バイト追加すれば解決する?

2005年10月31日(月)
構造体の定義

● libUSBの linux.h
struct usb_urb {
unsigned char type;
unsigned char endpoint;
int status;
unsigned int flags;
void *buffer;
int buffer_length;
int actual_length;
int start_frame;
int number_of_packets;
int error_count;
unsigned int signr; /* signal to be sent on error, -1 if none should be sent */
void *usercontext;
struct usb_iso_packet_desc iso_frame_desc[0];
};

● linuxカーネル 2.4 の usbdevice_fs.h

struct usbdevfs_urb {
unsigned char type;
unsigned char endpoint;
int status;
unsigned int flags;
void *buffer;
int buffer_length;
int actual_length;
int start_frame;
int number_of_packets;
int error_count;
unsigned int signr; /* signal to be sent on error, -1 if none should be sent */
void *usercontext;
struct usbdevfs_iso_packet_desc iso_frame_desc[0];
};

一見同じに見える

・カーネルで認識しているサイズ
devio.c:1263 usbdevfs_urb = 44
・libUSB側の認識サイズ
linux.c:252 IOCTL_USB_SUBMITURB -2144709366 (802A550A) Call Size = 42

2005年9月29日(木)
カーネルが予定しているコードは、
USBDEVFS_SUBMITURB = 802C550A
libUSBが呼び出しているコードは
0x802A550A
マクロの展開がおかしいもよう。


_IOR('U', 10, struct usb_urb)
この定義の調査がいるかな。


2005年9月29日(木)
ちと仕事が落ち着いたので再開。
カーネルのコンパイル方法忘れている。(;_;)v

2005年8月29日(月)
ちと本業が忙しくてさぼり気味

////////// OSが認識した時の情報
usb.c: USB device 2 (vend/prod 0x4b0/0x10d) is not claimed by any active driver.
Length = 18
DescriptorType = 01
USB version = 1.10
Vendor:Product = 04b0:010d
MaxPacketSize0 = 8
NumConfigurations = 1
Device version = 1.00
Device Class:SubClass:Protocol = 00:00:00
Per-interface classes
Configuration:
bLength = 9
bDescriptorType = 02
wTotalLength = 0027
bNumInterfaces = 01
bConfigurationValue = 01
iConfiguration = 00
bmAttributes = c0
MaxPower = 0mA

Interface: 0
Alternate Setting: 0
bLength = 9
bDescriptorType = 04
bInterfaceNumber = 00
bAlternateSetting = 00
bNumEndpoints = 03 ★
bInterface Class:SubClass:Protocol = 06:01:01
iInterface = 00
Endpoint:
bLength = 7
bDescriptorType = 05
bEndpointAddress = 04 (out)
bmAttributes = 02 (Bulk)
wMaxPacketSize = 0040
bInterval = 00
Endpoint:
bLength = 7
bDescriptorType = 05
bEndpointAddress = 83 (in)
bmAttributes = 02 (Bulk)
wMaxPacketSize = 0040
bInterval = 00
Endpoint:
bLength = 7
bDescriptorType = 05
bEndpointAddress = 81 (in)
bmAttributes = 03 (Interrupt)
wMaxPacketSize = 0008
bInterval = 0a
/////////////////// PTPCAMからみた時の情報
ptpcam.c:488 エンドポイント数 = 3 ★正しい
ptpcam.c:222 init_ptp_usb() IN
usb.c:202 usb_open()
linux.c:58 device_open() FILENAME = |/proc/bus/usb/001/002|
ptpcam.c:245 dev->config->interface->altsetting->bInterfaceNumber = 0
linux.c:112 usb_claim_interface()
linux.c:124 usb_claim_interface() interface = 0 ret = 0
ptpcam.c:250 device_handle = 0x155a8
ptp.c:443 ptp_opensession()
ptp.c:313 send request
ptp.c:98 ptp_usb_sendreq()
ptp.c:105 PTPContainer req->Code = 4098
ptpcam.c:162 ptp_write_func() size = 16
データDUMP
0xbffff8b0:10 00 00 00 01 00 02 10 00 00 00 00 01 00 00 00

linux.c:326 usb_bulk_write()
linux.c:210 usb_urb_transfer()
linux.c:211 size = 16
0xbffff8b0:10 00 00 00 01 00 02 10 00 00 00 00 01 00 00 00

linux.c:252 IOCTL_USB_SUBMITURB -2144709366 (802A550A) Call ● この呼び出しでエラーになっている(BULK転送)
linux.c:254 IOCTL_USB_SUBMITURB Error ret = -1
ptpcam.c:167 result = -515(FFFFFDFD)
ptp.c:116 ret = 767
ptp.c:460 ptp_opensession() ret = 767 session = 1
ERROR: Could not open session!
Try to reset the camera.
//////////////////////// その時のカーネル側の認識

devio.c:203 usbdev_read() READED = 17
devio.c:1253 usbdev_ioctl() cmd = 0x40085511 arg = 0xBFFFDCDC
devio.c:1256 MODE OK
devio.c:1262 DEVCHK OK
devio.c:1303 USBDEVFS_CONNECTINFO ■ 正常
devio.c:1360 ret = 0
devio.c:1364
devio.c:122 usbdev_read() nbytes = 18
//// 省略 ////
devio.c:1364
devio.c:1253 usbdev_ioctl() cmd = 0x8004550F arg = 0xBFFFFA98
devio.c:1256 MODE OK
devio.c:1262 DEVCHK OK
devio.c:1346 USBDEVFS_CLAIMINTERFACE ■ 正常
devio.c:1360 ret = 0
devio.c:1364
devio.c:1253 usbdev_ioctl() cmd = 0x802A550A arg = 0xBFFFF824
devio.c:1256 MODE OK
devio.c:1262 DEVCHK OK ● この呼び出しを認識していない?
devio.c:1360 ret = -515
devio.c:1364
devio.c:1253 usbdev_ioctl() cmd = 0x80045510 arg = 0xBFFFFB28
devio.c:1256 MODE OK
devio.c:1262 DEVCHK OK
devio.c:1351 USBDEVFS_RELEASEINTERFACE ■ 正常
devio.c:1360 ret = 0
devio.c:1364


2005年8月17日(水)
libUSB
・libUSBで定義されている IOCTL
/libusb-0.1.10a/linux.h:#define IOCTL_USB_SUBMITURB _IOR('U', 10, struct usb_urb)

・カーネルで定義されているIOCTL
./include/linux/usbdevice_fs.h:#define USBDEVFS_SUBMITURB _IOR('U', 10, struct usbdevfs_urb)

で呼び出されている筈なのだが...ログにはそれが残らない。
Aug 17 10:13:24 localhost kernel: devio.c:203 usbdev_read() READED = 31
Aug 17 10:13:24 localhost kernel: devio.c:1237 usbdev_ioctl() cmd = 0xC00C5512 arg = 0xBFFFF6D4
Aug 17 10:13:24 localhost kernel: devio.c:1237 usbdev_ioctl() cmd = 0xC00C5512 arg = 0xBFFFF6D4
Aug 17 10:13:24 localhost kernel: devio.c:1237 usbdev_ioctl() cmd = 0x8004550F arg = 0xBFFFFA98
Aug 17 10:13:24 localhost kernel: devio.c:1237 usbdev_ioctl() cmd = 0x802A550A arg = 0xBFFFF824
Aug 17 10:13:24 localhost kernel: devio.c:1237 usbdev_ioctl() cmd = 0x80045510 arg = 0xBFFFFB28
Aug 17 10:30:44 localhost -- MARK --

それ以前の問題?

2005年8月16日(火)
linux/drivers/usb/devio.c の USBDEVFS_SUBMITURB がどんなパラメータで呼び出されている
か確認してみる。

カーネルコンパイルした時点で体力が尽きた。

2005年8月15日(月)
libUSB のデバッグの続き
・ptpcam の書き込み関数。
この usb_bulk_write() の戻り値が -515

static short ptp_write_func (unsigned char *bytes, unsigned int size, void *data)
{
int result;
PTP_USB *ptp_usb=(PTP_USB *)data;

printf("%s:%d ptp_write_func()\n",__FILE__,__LINE__ );
result = usb_bulk_write(ptp_usb->handle,ptp_usb->outep,(char *)bytes,size,3000);

printf("%s:%d result = %d\n",__FILE__,__LINE__,result);

・この時に送信した内容
ptpcam.c:162 ptp_write_func() size = 16
0xbffff8ac:10 00 00 00 01 00 02 10 00 00 00 00 01 00 00 00

色々調べた結果 libUSB の usb_urb_transfer() からの IOCTL_USB_SUBMITURBの
呼び出しが -1 で帰ってきている。

2005年8月11日(木)
libPTP
・ BUSのオープンエラーが出る。

linux.c:59 device_open() FILENAME = |/proc/bus/usb/001/002|
ERROR: Could not open session!
Try to reset the camera.

libPTPから libUSB の 呼び出し usb_claim_interface()を追跡中
init_ptp_usb(¶ms, &ptp_usb, dev); は正常に動作しているように見える。

ptp.c:436 ptp_opensession()
ptp.c:453 ptp_opensession() ret = 767 session = 1

で,767 が 0x2FF
#define PTP_ERROR_IO 0x02FF
に相当しているように見える。

通信CORE部のチェックが必要みたい。

2005年8月10日(水)
バックアップ
スリムデスクトップ(Linux)マシンの内蔵CD-ROMを外して、IEEE1394カードも外して
CF-IDEのコンバータを取り付けてCFのバックアップ中。

とりあえず読むぐらいは出来るみたい。

● 母艦でBOOTメディアを作成する
# fdisk /dev/hdc

コマンド (m でヘルプ): p

ディスク /dev/hdc: ヘッド 32, セクタ 63, シリンダ 992
ユニット = シリンダ数 of 2016 * 512 バイト

デバイス ブート 始点 終点 ブロック ID システム
/dev/hdc1 * 1 992 999904+ 6 FAT16
領域 1 は異なった物理/論理終点になっています:
物理=(959, 31, 63) 論理=(991, 31, 63)

コマンド (m でヘルプ): d
領域番号 (1-4): 1

コマンド (m でヘルプ): n
コマンドアクション
e 拡張
p 基本領域 (1-4)
p
領域番号 (1-4): 1
最初 シリンダ (1-992, 初期値 1):
初期値 1 を使います
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-992, 初期値 992):
初期値 992 を使います

コマンド (m でヘルプ): t
領域番号 (1-4): 1
16進数コード (L コマンドでコードリスト表示): 83

コマンド (m でヘルプ): w
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。
#
● ディスクをフォーマットする
mke2fs -O none /dev/hdc1
mke2fs 1.34 (25-Jul-2003)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
125184 inodes, 249976 blocks
12498 blocks (5.00%) reserved for the super user
First data block=0
8 block groups
32768 blocks per group, 32768 fragments per group
15648 inodes per group
Superblock backups stored on blocks:
32768, 65536, 98304, 131072, 163840, 196608, 229376

Writing inode tables: done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

● マウントする
mount /dev/hdc1 /mnt/hdc

● マウントした場所に行って 展開する。
# tar xvzf /extra/Armadillo9_20050810.tar.gz

● Armadillo-9に CF を指してBOOT 成功。
>Debian GNU/Linux 3.1 armadillo9 ttyAM0
>armadillo9 login:

カーネルも最新版(DEBUG版)に変えて問題無く動作する事を確認。

・おまけ
CF-IDE のアダプタにメモリを指していないと 母艦がBOOTしない事に気が付いた。
困ったもんです。

2005年8月8日(月)
・ USBに繋ぐための 2.5"HDD(40G) を購入してケースに入れてみたが、Linuxからは
認識しなかった。(残念)

・libPTP は相変わらず BUSエラーが出るが、こちらの方もconfigure の CFLAGS を設定している
場所に -fpack-struct を入れる事によって BUSエラーが出なくなる事を確認

# turn on warnings for gcc
if test "$ac_cv_c_compiler_gnu" = "yes"; then
CFLAGS="$CFLAGS -Wall -Wmissing-declarations -Wmissing-prototypes -fpack-struct"
LDFLAGS="$LDFLAGS -Wall"
fi

※ いかん /etc/hotplug に仕込んだ小細工が無くなっている...(;_;)v

2005年8月8日(月)
このリクエストが問題の一端みたい。
※ 18バイトしかないのに 20バイトの読み込み命令が出ている。
そのため、次の2バイトを読み込んでしまっている。

devio.c:122 usbdev_read() nbytes = 20
devio.c:134 pos = 0 usb_device_descriptor = 0
devio.c:146 pos = 0 nbytes = 0 len = 20
DebugDump = 18(12)
c5fbeecc:12 01 10 01 09 00 00 08 00 00 00 00 00 00 00 02
c5fbeedc:01 01
devio.c:187 User Memory pos = 18 last = 0 len = 18
DebugDump = 2(2)
c035ad80:09 02
devio.c:203 usbdev_read() READED = 20

・libUSB の usb_device_descripter 読み込み部にデバッグ文を入れてみる。
ret = read(fd, (void *)&dev->descriptor, sizeof(dev->descriptor));
if (ret < 0) {

※ 構造体サイズを20と判断している。

・Makefile の CFLAGS に -fpack-struct をつけてコンパイルする。
CFLAGS = -g -O2 -g -Wall -fpack-struct

devio.c:122 usbdev_read() nbytes = 18
devio.c:134 pos = 0 usb_device_descriptor = 0
devio.c:146 pos = 0 nbytes = 0 len = 18
DebugDump = 18(12)
c5fbeecc:12 01 10 01 09 00 00 08 00 00 00 00 00 00 00 02
c5fbeedc:01 01
devio.c:203 usbdev_read() READED = 18
※ 読み込みバイト数が18になった。

2005年8月8日(月)
眠れなかったので
復旧作業に入る。

気が付くと telnetd も ftpd もインストールしていなかった。
・user を追加する。
・apt-get install inetutils-telnetd
・apt-get install pure-ftpd
で telnetとftp をインストールする。

※ inetdutils-ftpd と異なり inetd.conf を設定してくれる。

telnet stream tcp nowait root /usr/sbin/telnetd -D -a off

ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper
の行の下に追加する。

TELNETのログインは出来るが、ftpのログインで認証エラーが出る。
pure-ftpd を止めて inetdutils-ftpd を入れ直す。...忘れていた、普通のftpd で無いと
ファイル一覧がうまくいかないのだった。
apt-get install ftpd を実行
/etc/inetd.conf に以下の行が追加されている事を確認。
ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.ftpd

※ しかし、ログイン出来ない。
/etc/passwd のユーザーエントリーにログインSHELL (/bin/bash) が書かれていない事が原因でした。

でバックアップからライブラリ関係を復帰

2005年8月8日(月)
Armadillo9
ちと酷使しすぎたのか、Trancend の CF(512) からBOOTしなくなった。
カーネルイメージを差し替えた直後だったので、イメージが壊れているのかと
思って古いものに差し替えてみたがNG

配布イメージのものに差し替えたら1回だけBOOTした。
バックアップ用のCF(512)に差し替えるとOK(もちろん内蔵ROMイメージもOK)

寝てあした復旧する。

2005年8月7日(日)
見込み違い
devices.c に本格的にデバッグ文を入れてみたが出力されているタイミングが違う

・libgphoto2 がおかしな干渉をしているのかと思って組み込みを中止してみたが
特に現象変わらず。
※ ドライバの組み込みに失敗した時に バスのパーミッションが設定されない問題は見つけたが...

/etc/hotplug/usb.agentに設定を追加する。
if [ "$FOUND" = "false" ]; then
debug_mesg "... no modules for $LABEL"
# Append
chmod -R 777 /proc/bus/usb/0* > /dev/null 2>&1
exit 2
fi

・libUSB の対象バッファを初期化して現象を再確認してみる。
linux.c の読込バッファを 0xFFで初期化する。(480行目前後)

    for (i = 0; i < dev->descriptor.bNumConfigurations; i++) {
      char buffer[8], *bigbuffer;
      struct usb_config_descriptor *desc = (struct usb_config_descriptor *)buffer;

      memset( desc,0xFF,sizeof( struct usb_config_descriptor ));

      /* Get the first 8 bytes so we can figure out what the total length is */
      ret = read(fd, (void *)buffer, 8);
      if (ret < 8) {
        if (usb_debug >= 1) {
          if (ret < 0)
            fprintf(stderr, "Unable to get descriptor (%d)\n", ret);
          else
            fprintf(stderr, "Config descriptor too short (expected %d, got %d)\n", 8, ret);
        }
        goto err;
      }
printf("%s:%d usb_config_descriptor = %p\n",__FILE__,__LINE__,desc);
DebugDump( desc ,sizeof( struct usb_config_descriptor ) );

・で、実行結果。
データDUMP
0xbfffdc24:19 00 01 01 00 40 00 09 FF FF FF FF FF FF FF FF
0xbfffdc34:FF FF FF FF FF FF FF FF
u_int8_t desc->bLength = 25
u_int8_t desc->bDescriptorType = 0
u_int16_t desc->wTotalLength = 257
u_int8_t desc->bNumInterfaces = 0
u_int8_t desc->bConfigurationValue = 64
u_int8_t desc->iConfiguration = 0
u_int8_t desc->bmAttributes = 9
u_int8_t desc->MaxPower = 255
linux.c:513 desc->wTotalLength = 257(101)
linux.c:517 desc->wTotalLength = 257(101)
この時、/var/log/message に文字列が出力されないので、devices.c はこれに対応している訳では
ない筈。

・めぼしいUSBデバイスの read 関数に printk() をばらまいて見る。
dabusb.c devio.c hiddev.c usb-skeleton.c

・AP側の読み込みタイミングと同期しているのは、
devio.c:86 usbdev_read()
devio.c:86 usbdev_read()
これみたい。

・カーネル側のデバイスディスクリプタ
Aug 7 02:57:35 localhost kernel: DebugDump = 24(18)
Aug 7 02:57:35 localhost kernel: c035ad80:09 02 19 00 01 01 00 40 00 09 04 00 00 01 09 00
Aug 7 02:57:35 localhost kernel:
Aug 7 02:57:35 localhost kernel: u_int8_t config->bLength = 9
Aug 7 02:57:35 localhost kernel: u_int8_t config->bDescriptorType = 2
Aug 7 02:57:35 localhost kernel: u_int16_t config->wTotalLength = 25
Aug 7 02:57:35 localhost kernel: u_int8_t config->bNumInterfaces = 1
Aug 7 02:57:35 localhost kernel: u_int8_t config->bConfigurationValue = 1
Aug 7 02:57:35 localhost kernel: u_int8_t config->iConfiguration = 0
Aug 7 02:57:35 localhost kernel: u_int8_t config->bmAttributes = 64
Aug 7 02:57:35 localhost kernel: u_int8_t config->MaxPower = 0
Aug 7 02:57:35 localhost kernel: devio.c:188 usbdev_read() READED = 20
Aug 7 02:57:35 localhost kernel: devio.c:117 usbdev_read() nbytes = 8
Aug 7 02:57:35 localhost kernel: devio.c:151 usb_config_descriptor = c035ad80

・libUSB側のデバイスディスクリプタ
linux.c:501 usb_config_descriptor = 0xbfffdc34
データDUMP
0xbfffdc34:19 00 01 01 00 40 00 09 FF FF FF FF FF FF FF FF
0xbfffdc44:FF FF FF FF FF FF FF FF
u_int8_t desc->bLength = 25
u_int8_t desc->bDescriptorType = 0
u_int16_t desc->wTotalLength = 257
u_int8_t desc->bNumInterfaces = 0
u_int8_t desc->bConfigurationValue = 64
u_int8_t desc->iConfiguration = 0
u_int8_t desc->bmAttributes = 9
u_int8_t desc->MaxPower = 255
linux.c:513 desc->wTotalLength = 257(101)
linux.c:517 desc->wTotalLength = 257(101)
linux.c:524
linux.c:528 ret = 15(F) ret+8 = 23(17)

● ここまでで判る事
(1) カーネルは正しく USBの情報を認識している。
(2) libUSBは 誤って認識している。

では、確認項目は
(1) 正しくデータを送り出したか?
(2) 正しく受け取ったか?
という事になる。


2005年8月6日(土)
USB Driver
・ devices によれば、組み込まれているのは HUB ドライバ。

armadillo9:/proc/bus/usb# cat devices
T: Bus=01 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 3
B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0
D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0000 ProdID=0000 Rev= 0.00
S: Product=USB OHCI Root Hub
S: SerialNumber=ff020000
C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=255ms
armadillo9:/proc/bus/usb#

・しかし、file_operationsを持っているソースに hub.c は無い。

devices.c:struct file_operations usbdevfs_devices_fops = {
devio.c:struct file_operations usbdevfs_device_file_operations = {
drivers.c:struct file_operations usbdevfs_drivers_fops = {
hiddev.c:static struct file_operations hiddev_fops = {

・適当にDEBUG文を入れて呼び出しがどうなっているか見てみる。
が、clean しないとコンパイルされない事に気が付いた。(^^;;

・とりあえず、調査対象は見つけた( devices.c )
Jan 3 10:18:52 localhost kernel: devices.c:564 usb_driver_read()
Jan 3 10:18:52 localhost last message repeated 2 times

2005年8月4日(木)
libUSB
drivers/usb/ のread() エントリーモジュールを検索中

2005年8月4日(木)
Armadillo9
現在使用している linux-2.4.27-a9-3 ベースのカーネルでなく、最新版の
linux-2.4.27-a9-6 ベースのカーネルでテストしてみる事にする。

Windows(IE)でダウンロードするとダウンロードファイルが肥大化するので
wget で直接落とす。

BOOTは出来たが現象変わらず。

2005年8月3日(水)
libUSB
疑惑
・Arm はリトルエンディアンだが、libUSBはそう認識していない?
・16BitのSWAPのコードが悪くてオプティマイザで削除されている?


データDUMP(先頭8バイトのみ有効)
0xbfffdc34:19 00 01 01 00 40 00 09 2F 70 72 6F 63 2F 62 75
0xbfffdc44:73 2F 75 73 62 2F 30 30
u_int8_t desc->bLength = 25
u_int8_t desc->bDescriptorType = 0
u_int16_t desc->wTotalLength = 257
u_int8_t desc->bNumInterfaces = 0
u_int8_t desc->bConfigurationValue = 64
u_int8_t desc->iConfiguration = 0
u_int8_t desc->bmAttributes = 9
u_int8_t desc->MaxPower = 47
linux.c:512 desc->wTotalLength = 257(101)
linux.c:516 desc->wTotalLength = 257(101)
linux.c:523
linux.c:527 ret = 15(F) ret+8 = 23(17)
内容を見る限りにおいてそれは無い。

intel版のlibUSBを作って見る事にする

・intel版の結果
データDUMP
0xbfffd8e4:09 02 19 00 01 01 00 40 00 00 00 00 00 00 00 00
0xbfffd8f4:2F 70 72 6F 63 2F 62 75
u_int8_t desc->bLength = 9
u_int8_t desc->bDescriptorType = 2
u_int16_t desc->wTotalLength = 25
u_int8_t desc->bNumInterfaces = 1
u_int8_t desc->bConfigurationValue = 1
u_int8_t desc->iConfiguration = 0
u_int8_t desc->bmAttributes = 64
u_int8_t desc->MaxPower = 0
linux.c:512 desc->wTotalLength = 25(19)
linux.c:516 desc->wTotalLength = 25(19)
linux.c:523
linux.c:527 ret = 17(11) ret+8 = 25(19)
linux.c:539

明らかに内容が異なる。(Arm版が2バイト欠けているように見える)
そのため、異なったサイズを取得しているみたい。

となれば、
(1)カーネルの問題
(2)libUSB の受け取り仕様の問題
の2種類ありえるか?


2005年8月2日(火)
libUSB
usb_os_find_devices() の中身を確認中。


printf("%s:%d desc->wTotalLength = %d(%x)\n",__FILE__,__LINE__,desc->wTotalLength,desc->wTotalLength);
USB_LE16_TO_CPU(desc->wTotalLength);
printf("%s:%d desc->wTotalLength = %d(%x)\n",__FILE__,__LINE__,desc->wTotalLength,desc->wTotalLength);


linux.c:473 desc->wTotalLength = 257(101)
linux.c:477 desc->wTotalLength = 257(101)
linux.c:484
linux.c:488 ret = 15(F) ret+8 = 23(17)

desc の内容が矛盾しているみたいにみえる.


2005年8月1日(月)
libUSB
これまでの所、usb_device がもつ usb_config_descripter の interface が NULL なので
BUSエラーが発生する所までは判った。
この構文

>if ((dev->config->interface->altsetting->bInterfaceClass == USB_CLASS_PTP) || force)

じゃinterface が設定されるのはいつが正しいの?って事で調査してみる。

● testlibusb を動かした限りでは、configuration の bNumInterface は両方0
testlibusb.c:98 print_device()
usb.c:202 usb_open()
linux.c:32 device_open() FILENAME = |/proc/bus/usb/001/001|
testlibusb.c:102 udev = 0x114d0
testlibusb.c:105 print_device() Mani = 0
wTotalLength: 0
bNumInterfaces: 0
bConfigurationValue: 0
iConfiguration: 0
bmAttributes: 00h
MaxPower: 0
testlibusb.c:191 dev = 0x13970
testlibusb.c:98 print_device()
usb.c:202 usb_open()
linux.c:32 device_open() FILENAME = |/proc/bus/usb/001/002|
testlibusb.c:102 udev = 0x114d0
testlibusb.c:105 print_device() Mani = 1
wTotalLength: 0
bNumInterfaces: 0
bConfigurationValue: 0
iConfiguration: 0
bmAttributes: 00h
MaxPower: 0

・ではこれが n になるタイミングは?
descripters.c(254) の
int usb_parse_configuration(struct usb_config_descriptor *config, char *buffer)
しかし、ログを見る限りは呼ばれた形跡なし。

・呼び出すはずの場所は?
linux.c(355)の
int usb_os_find_devices(struct usb_bus *bus, struct usb_device **devices)

>こちらは呼び出されている。
linux.c:365 usb_os_find_devices()
linux.c:32 device_open() FILENAME = |/proc/bus/usb/001/001|

2005年7月31日(日)
・現象を整理してみる
usb_bus が指している usb_device の中身が参照できないか不正になっている。
本当か?
内部情報を調査中....

2005年7月31日(日)
USBの戻り値
・libUSBの戻り

0x128f0:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x12900:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x12910:00 00 00 00 00 00 00 00 00 00 00 00 30 29 01 00
0x12920:00 00 00 00 00 00 00 00
DirName |001|
Device |0x12930|
testlibusb.c:186 bus = 0x11910
testlibusb.c:196 dev = 0x12930
testlibusb.c:98 print_device()


・libPTPの戻り
0x15f68:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x15f78:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x15f88:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x15f98:00 00 00 00 00 00 00 00 00 00 00 00 B8 5F 01 00
0x15fa8:00 00 00 00 00 00 00 00
DirName |001|
Device |0x15fb8|
ptpcam.c:426 bus = 0x14f98
データDUMP
init_usb 0x14f98

戻りアドレスは異なるが、特に問題は無さそう

2005年7月24日(日)
・パーミッションの設定に失敗している。666じゃ駄目でした。

$ ls -l /proc/bus/usb/001
ls: /proc/bus/usb/001/001: 許可がありません
ls: /proc/bus/usb/001/002: 許可がありません
合計 0

armadillo9:~# ls -l /proc/bus/usb
total 0
drw-rw-rw- 1 root root 0 Jan 20 11:02 001
-r--r--r-- 1 root root 0 Jan 20 11:17 devices
-r--r--r-- 1 root root 0 Jan 20 11:17 drivers

・testlibusb がユーザーモードで正常に作動する事を確認
linux.c:32 device_open() FILENAME = |/proc/bus/usb/001/001|
linux.c:32 device_open() FILENAME = |/proc/bus/usb/001/003|
usb_busses = 0x117e8
testlibusb.c:154 bus = 0x117e8
testlibusb.c:164 dev = 0x12808
testlibusb.c:70 print_device()
usb.c:202 usb_open()
linux.c:32 device_open() FILENAME = |/proc/bus/usb/001/001|
testlibusb.c:74 udev = 0x113c0
testlibusb.c:78 print_device() Mani = (nil)
Dev #1: 0000 - USB OHCI Root Hub
testlibusb.c:70 print_device()
usb.c:202 usb_open()
linux.c:32 device_open() FILENAME = |/proc/bus/usb/001/003|
testlibusb.c:74 udev = 0x113c0
testlibusb.c:78 print_device() Mani = 0x1
Dev #3: NIKON - Nikon Digital Camera E5700_PTP
testlibusb.c:164 dev = 0x13860
testlibusb.c:70 print_device()
usb.c:202 usb_open()
linux.c:32 device_open() FILENAME = |/proc/bus/usb/001/003|
testlibusb.c:74 udev = 0x113c0
testlibusb.c:78 print_device() Mani = 0x1
Dev #3: NIKON - Nikon Digital Camera E5700_PTP


2005年7月24日(日)
Armadillo2号機
ターゲットシステム用にArmadillo2号機をセットアップしたが、
標準状態では、シリアルケーブル無しではBOOT出来ない事が判明

・BOOTローダーを書き換える事にする。
hermit-1.3-armadillo9-2.tar.gz を解凍
make target=armadillo9 でコンパイル
・ターゲットファイル
26229 Jul 24 15:21 loader-armadillo9-notty.bin

で書き換えたはいいが、コンソール無しで起動して telnetもftpも初期化せずに
起動すると手も足も出ない事に気がついた。

2005年7月23日(土)
2日程サボってちょっと復帰
/etc/hotplug/hotplug.functions の load_drivers()

# always run setup scripts after any matching kernel code has had
# a chance to do its thing, no matter whether it was dynamically
# or statically linked, or if there is only a user mode driver.
# the script might re-enumerate usb devices after firmware download,
# giving kernel code another chance.
if [ -x $HOTPLUG_DIR/$TYPE/$MODULE ]; then
debug_mesg Module setup $MODULE for $DESCRIPTION
$HOTPLUG_DIR/$TYPE/$MODULE
LOADED=true
fi

この部分でドライバーを読み込んでますね。
>Module setup libgphoto2 for USB product 4b0/10d/100

その下で USBだったら属性を変更するようにする。
# ADD USB BUS
if [ "$LOADED" = "true" ]; then
if [ "$TYPE" = "usb" ]; then
mesg "change usb bus permisson $TYPE "
chmod -R 666 /proc/bus/usb/0* > /dev/null 2>&1
fi
fi

・とりあえず目的達成
armadillo9:~# ls -l /proc/bus/usb/0*
合計 1
-rw-rw-rw- 1 root root 18 2005-07-22 09:16 001
-rw-rw-rw- 1 root camera 18 2005-07-22 20:28 009
armadillo9:~#

2005年7月19日(火)
/etc/hotplug/usb.agent
がユーザーモードのドライバーをロードしようとしているのまでは判った。

Jul 19 09:23:35 localhost usb.agent[923]: add Function In!!
Jul 19 09:23:38 localhost usb.agent[923]: LABEL USB product 4b0/10d/100
Jul 19 09:23:39 localhost usb.agent[923]: user Mode Driver Loading
Jul 19 09:23:39 localhost usb.agent[923]: MAP /etc/hotplug/usb/libgphoto2.usermap
Jul 19 09:23:39 localhost usb.agent[923]: LABEL USB product 4b0/10d/100
Jul 19 09:23:39 localhost usb.agent[923]: Setup libgphoto2 for USB product 4b0/10d/100
Jul 19 09:23:39 localhost usb.agent[923]: libgphoto2: loaded successfully
Jul 19 09:23:39 localhost usb.agent[923]: Module setup libgphoto2 for USB product 4b0/10d/100
Jul 19 09:23:39 localhost usb.agent[923]: user Mode Driver Loaded
Jul 19 09:23:39 localhost usb.agent[923]: ENDDED

・ここで出てくる load_drivers は関数で
/etc/hotplug/hotplug.functions
内で定義されている。


2005年7月18日(月)

・ libUSB の 関数 usb_get_busses()が返したアドレスを評価しようとすると、
バスエラーが発生するなぁ
ptpcam.c:373 bus = 0x14e48
※ GDB は実行形式を認識してくれない。

・libusb-0.1.10a のテストモジュールでは正常に動いているもよう。
armadillo9:# ./testlibusb
Dev #1: 0000 - USB OHCI Root Hub
Dev #3: NIKON - Nikon Digital Camera E5700_PTP
armadillo9:#

・一般ユーザー権限だと動いていない?
Dev #0: 0000 - 0000
$

・libUSB に usb_get_busses()を使用しているサンプルは無い
・testlibusb が返している usb_busses は 0x11710 で上記の値とは異なる。
・libUSBの持っている グローバル変数 usb_busses の内容は、関数
usb_get_busses() の戻り値と同じ

・現象から見るとパーミッションがらみ?
(1)rootで実行
Dev #1: 0000 - USB OHCI Root Hub
testlibusb.c:70 print_device()
testlibusb.c:74 udev = 0x113c0
testlibusb.c:78 print_device() Mani = 0x1
Dev #6: NIKON - Nikon Digital Camera E5700_PTP
testlibusb.c:164 dev = 0x13860
testlibusb.c:70 print_device()
testlibusb.c:74 udev = 0x113c0
testlibusb.c:78 print_device() Mani = 0x1
Dev #6: NIKON - Nikon Digital Camera E5700_PTP
armadillo9:#
(2)一般ユーザーで実行
usb_busses = 0x117e8
testlibusb.c:154 bus = 0x117e8
testlibusb.c:164 dev = 0x12808
testlibusb.c:70 print_device()
testlibusb.c:74 udev = 0x113b0
testlibusb.c:78 print_device() Mani = (nil)
Dev #0: 0000 - 0000
armadillo9:$

・バスのパーミッション
ls -l /proc/bus/usb/001
合計 1
-rw-r--r-- 1 root root 18 2005-07-18 06:33 001
-rw-rw---- 1 root camera 18 2005-07-18 06:33 006
で、このパーミッションが設置された事により camera group に属していないと
001/006 にアクセス出来ない。

・hotplug 関連は、/etc/hotplug に記載がある。
→ vine は murasaki

・バス関連の調査
/etc/hotplug/usb/libgphoto2.usermap で殆どのデバイスは libgphoto2 の配下に入る。
/etc/default/hotplug は全てコメント
/etc/hotplug/usb.handmap は該当の処理が無い
/etc/hotplug/usb.agent に設定がある?

・lsusb コマンドは正しく認識している。
$ lsusb
Bus 001 Device 001: ID 0000:0000
Bus 001 Device 007: ID 04b0:010d Nikon Corp. Coolpix 5700 (ptp)


2005年7月17日(日)
で、実際にカメラに繋ごうとすると、こんなメッセージが出る。
$ptpcam -l
セグメンテーション違反です

デバッグ開始。

2005年7月17日(日)
libptp2-1.0.2 をインストール

./configure したら
*** You need at least version 0.1.8 of the libusb library to build ptpcam.
*** Download and istall it from http://sourceforge.net/projects/libusb/ or
*** use --disable-ptpcam option to build without ptpcam tool.

libusb は 0.1.10a を入れているが...再投入してみる。

仕方が無いので、libusb-0.1.10a.tar.gz をコンパイルしてみるが...現象変わらず。

こうなったら、configure が一体何やっているか確かめる。
・ 問題の個所は、21774行目前後
・ libUSB のバージョンは正しく取得出来ている。(0.1.10a)
・ 0.1.8 より大きいかの判定をしようとしている。
この判定は外しても問題無いので解除して、./configure を実行。

あっさりコンパイルOK

$ ptpcam -h
USAGE: ptpcam [OPTION]

Options:
-B, --bus=BUS-NUMBER USB bus number
-D, --dev=DEV-NUMBER USB assigned device number
-r, --reset Reset the device
-l, --list-devices List all PTP devices
-i, --info Show device info
-o, --list-operations List supported operations
-p, --list-properties List all PTP device properties
(e.g. focus mode, focus distance, etc.)
-s, --show-property=NUMBER Display property details (or set its value,
if used in conjunction with --val)
--set-property=NUMBER Set property value (--val required)
--val=VALUE Property value
-L, --list-files List all files
-g, --get-file=HANDLE Get file by given handler
-G, --get-all-files Get all files
--overwrite Force file overwrite while savingto disk
-f, --force Talk to non PTP devices
-v, --verbose Be verbose (print more debug)
-h, --help Print this help message


ここまで出来た


2005年7月17日(日)
pure-ftpd だと、FFFTPでファイル一覧が出ない事に気がついた。

apt-get install ftpd で普通?のFTPに入れ替えて見る。
例によって、inetd.conf の編集に失敗しているので、修正して
kill -HUP で inetd を再起動して事なし。


2005年7月16日(土)
一応認識。

armadillo9:~# gphoto2 -a
カメラの性能 : Nikon Coolpix 5700 (PTP mode)
シリアルポートのサポート : いいえ
USB サポート : はい
キャプチャの選択 :
: Capture not supported by the driver
セッティングのサポート : はい
カメラ内のファイル削除のサポート : はい
プレビューのサポート : はい
File upload support : はい
armadillo9:~# usb.c: USB disconnect on device not_pci-1 address 2

今日はこれで打ち止め

2005年7月15日(金)
libusb をインストールしたら、
USB support: yes, from /usr/local
になった。

その間に、パッケージを検索してみたら、

armadillo9:~# apt-cache search gPhoto
dcraw - decode raw digital camera images
gphoto2 - The gphoto2 digital camera command-line client
gphotocoll - tool to manage your photo collection
gq - GTK-based LDAP client
gtkam - GTK+ application for digital still cameras
gtkam-gimp - gtkam gimp plugin
kamera - digital camera io_slave for Konquerer
kdegraphics - KDE Graphics metapackage
kipi-plugins - image manipulation/handling plugins for KIPI aware programs
libgphoto2-2 - gphoto2 digital camera library
libgphoto2-2-dev - gphoto2 digital camera library (development files)
libgphoto2-port0 - gphoto2 digital camera port library
armadillo9:~#

存在している。...とりあえずこちらからのインストールにチャレンジ

armadillo9:~# apt-get install libgphoto2-2-dev
パッケージリストを読みこんでいます... 完了
依存関係ツリーを作成しています... 完了
以下の特別パッケージがインストールされます:
libc6 libc6-dev libexif-dev libexif10 libgphoto2-2 libgphoto2-port0 libjpeg62
libusb-0.1-4 locales pkg-config
提案パッケージ:
glibc-doc gphoto2 gtkam libgnome-dev
以下のパッケージが新たにインストールされます:
libexif-dev libexif10 libgphoto2-2 libgphoto2-2-dev libgphoto2-port0
libjpeg62 pkg-config
以下のパッケージはアップグレードされます:
libc6 libc6-dev libusb-0.1-4 locales
アップグレード: 4 個、新規インストール: 7 個、削除: 0 個、保留: 105 個。
12.7MB のアーカイブを取得する必要があります。
展開後に追加で 6341kB のディスク容量が消費されます。
続行しますか? [Y/n]

大量にインストールとアップグレードがかかるもよう。

2005年7月15日(金)
libgphoto

アルマジロ環境(!クロス)で ./configure をかけてみた。延々と時間がかかったあげく
設定がのきなみNOに(^^;;
        Use resmgr:              no
        Use baudboy:             no
        Use ttylock:             no
        Use lockdev:             no

        USB support:             no (required for USB cameras, http://sourceforge.net/projects/libusb/)
仕方がないのでマニュアルを印刷する事にした。

2005年7月14日(木)
とりあえず、一般ユーザーを useradd で追加。
しかし、home ディレクトリとか作ってくれないのですね。 > debian

armadillo9:~# apt-get install pure-ftpd
で FTPをインストールする

よく見ると勝手に telnetd の設定を /etc/inetd.conf に行っている(--;;

#:STANDARD: These are standard services.
telnet stream tcp nowait root /usr/sbin/telnetd -a off
ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper

・TELNETの部分どうしてもうまく動かない。
"junk arguments in the command line"なんてメッセージが出る。

仕方がないので、デバッグしようと -D を付けると正常に動く。なんなんだぁ

telnet stream tcp nowait root /usr/sbin/telnetd -D -a off

このあたりのバージョンに何かあるのかね?
armadillo9:~# /usr/sbin/telnetd -V
telnetd - GNU inetutils 1.4.2
Copyright (C) 1998,2001,2002 Free Software Foundation, Inc.
GNU inetutils comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GNU inetutils
under the terms of the GNU General Public License.
For more information about these matters, see the files named COPYING.
armadillo9:~#

とりあえず夜も更けたし深い追求はしないようにする。

2005年7月14日(木)
正常に認識する事を確認。野望にまた1歩(笑)

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
armadillo9:~# hub.c: new USB device not_pci-1, assigned address 2
Manufacturer: NIKON
Product: Nikon Digital Camera E5700_PTP
SerialNumber: 000002041606
usb.c: USB device 2 (vend/prod 0x4b0/0x10d) is not claimed by any active driver.
Length = 18
DescriptorType = 01
USB version = 1.10
Vendor:Product = 04b0:010d
MaxPacketSize0 = 8
NumConfigurations = 1
Device version = 1.00
Device Class:SubClass:Protocol = 00:00:00
Per-interface classes
Configuration:
bLength = 9
bDescriptorType = 02
wTotalLength = 0027
bNumInterfaces = 01
bConfigurationValue = 01
iConfiguration = 00
bmAttributes = c0
MaxPower = 0mA

2005年7月12日(火)
昨日の続き。

・telnetd をinstall する

(1) パッケージ一覧を取得
armadillo9:~# apt-get update
取得:1 http://ftp2.jp.debian.org sarge/main Packages [3223kB]
取得:2 http://security.debian.org sarge/updates/main Packages [23.1kB] s
取得:3 http://security.debian.org sarge/updates/main Release [109B]

(2) パッケージを検索
armadillo9:~# apt-cache search telnetd
francine - an extremely configurable console login program
heimdal-servers - Servers for Heimdal Kerberos
inetutils-telnetd - Telnet server
krb5-telnetd - Secure telnet server supporting MIT Kerberos
pawserv - Cernlib's distributed PAW and file transfer servers
telnetd - The telnet server
telnetd-ssl - The telnet server with SSL encryption support
armadillo9:~#

(3)パッケージをインストール
armadillo9:~# apt-get install telnetd
パッケージリストを読みこんでいます... 完了
依存関係ツリーを作成しています... 完了
以下のパッケージが新たにインストールされます:
telnetd
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 109 個。
41.2kB のアーカイブを取得する必要があります。
展開後に追加で 143kB のディスク容量が消費されます。
取得:1 http://ftp2.jp.debian.org sarge/main telnetd 0.17-29 [41.2kB]

でうまく行くはずが、駄目(カイジ風になって来た)

2005年7月11日(月)
Debian BOOT成功(;_;)v

////////////////////////////////////////////////////////////////////
Starting NFS common utilities: statd.
Starting deferred execution scheduler: atd.
Starting periodic command scheduler: cron.

Debian GNU/Linux 3.1 armadillo9 ttyAM0

armadillo9 login: root
Password:
Linux armadillo9 2.4.27-a9-3 #1 2005年 7月 10日 日曜日 22:14:11 JST armv4l GNU/Linux

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
armadillo9:~#
////////////////////////////////////////////////////////////////////


2005年7月10日(日)
hearmit をLinux に インストールしようとしたら

[root@azathoth Armadillo]# rpm -i hermit-1.3_armadillo9-2.i386.rpm
エラー: 依存性の欠如:
libc.so.6(GLIBC_2.3) は hermit-1.3_armadillo9-2 に必要とされています
しくしく

・気を取り直して、固定IPにする。
telnet も ftp も正常に接続出来るが、肝心のftpコマンドが無いので /home/ftp/pub に書ききれない
ファイルがアクセス出来ない。どうしたもんだか....またRAM上のシステムだからリブートすると消えるし


・とりあえずクロス開発環境を作成してみる。... これはまったく問題無し。
[root@azathoth Cross]# arm-linux-gcc -v
Reading specs from /usr/lib/gcc/arm-linux/3.4.1/specs

・ftp の再挑戦

(1) ram を /home/ftp/pub にマウントしてファイル転送
[root@armadillo9 (ttyAM0) ~]# mount -t ramfs ramfs /home/ftp/pub
[root@armadillo9 (ttyAM0) ~]# chmod 777 /home/ftp/pub
[root@armadillo9 (ttyAM0) ~]# ls -la /home/ftp/pub
drwxrwxrwx 1 root root 0 Jan 12 22:23 ./
drwxr-sr-x 6 root root 1024 Mar 14 2005 ../
-rw-r----- 1 ftp ftp 918007 Jan 12 22:32 linux-2.4.27-a9-3.bin.gz
-rw-r----- 1 ftp ftp 2655762 Jan 12 22:32 romfs-20050311.img.gz

(2) 現在は、ネットワークを毎回書き換えないといけないのでメモっておこう
iface eth0 inet static
address 192.168.0.204
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1

・uClinux を展開してコンパイルする。

EXT2-fs warning: mounting unchecked fs, running e2fsck is recommended
VFS: Mounted root (ext2 filesystem).
Freeing init memory: 68K
Warning: unable to open an initial console.

う〜んこちらでコンパイルしたカーネルでも、添付されていたカーネルでも同じ現象が出る。
debian に切り替えてみようかしらん。

2005年7月10日(日)
Armadillo 通電
先日購入したアルマジロ君に電源を投入。
CF無し状態で無事システム起動終了。

/////////////////////////////////////////////////////////////////////////
Starting klogd: done
Starting basic firewall: done
Configuring network interfaces: done
Starting thttpd: done
Starting inetd: done

Armadillo Linux V2.0.1
Linux 2.4.27-a9-3 [armv4l arch]

armadillo9 login:
/////////////////////////////////////////////////////////////////////////
初代のOBSに比べると結構高速です。

● CF BOOT版のdebianシステムを作成する。(11.1)
とりあえず手元に転がっている トランセンドの512Mを接続してみる。

/////////////////////////////////////////////////////////////////////////
Trying to free nonexistent resource <c68b3000-c68b300f>
hdc: Transcend, CFA DISK drive
hdd: no response (status = 0xa1), resetting drive
hdd: no response (status = 0xa1)
ide1 at 0xc68b3000-0xc68b3007,0xc68b300e on irq 49
hdc: attached ide-disk driver.
hdc: 1006992 sectors (516 MB) w/0KiB Cache, CHS=999/16/63
Partition check:
/////////////////////////////////////////////////////////////////////////
※ 正常に認識

・パーテーションを作成する。

fdisk /dev/hdc
/////////////////////////////////////////////////////////////////////////
Command (m for help): d
Selected partition 1

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-999, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-999, default 999):
Using default value 999

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 83

Command (m for help): p

Disk /dev/hdc: 515 MB, 515579904 bytes
16 heads, 63 sectors/track, 999 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

Device Boot Start End Blocks Id System
/dev/hdc1 1 999 503464+ 83 Linux

Command (m for help):
/////////////////////////////////////////////////////////////////////////
・ファイルシステムを作成する
mke2fs -O none /dev/hdc1

ここから先は、先にクロス開発環境を作らないとどうにもならないねぇ(^^;;


2005年7月4日(月)
アルマジロ9を買って来た。
こちらはPTPのサーバーに使う予定。

2005年7月4日(月)
暫く使っていなかったらテンプレートの作り方をきっちり
忘れていた(^^;;

なんとか思い出して実装。
デバイスが複数あるときの対応はちと後回しかな。

2005年7月2日(土)
まぁデバイスリスト等の取得は正常に作動するようになった。
後は samplegraber 関係とか...

2005年6月28日(火)
こんなの
トランセンド TS512MDOM44V
これなら壊れる心配しなくていいかも...
何故か日本語版は 2.54mmピッチって事になっているのですが(まさかね)


2005年6月26日(日)
PTPモードを持つデジタルスチルカメラとUSB搭載のデジタルスチルカメラを
繋ぎ合わせれば動体検知と連動させて面白い事が出来るのになぁとか思っています。

2005年6月25日(土)
久々に古本屋に行って
はた万次郎 北海道青空日記
新田次郎 富士山頂、冬山の掟
宮嶋茂樹 ネェちゃん撮らせんかい!
と技術書を1冊買って来た。

こんな事をしているから開発が進まない(^^;;

2005年6月21日(火)
本格的に実験が開始出来る程度にはWindow管理を実装&動作確認終了。
さていよいよDirectShow に手を出す事に...

2005年6月19日(日)
一応ベースWindowとかその応答ハンドラーとかは実装終了。
今週末ぐらいにキャプチャ画面が出るといいなぁ(願望)

ちと忙しくてまとまった時間がとれていないので...

2005年6月13日(月)
一応メインWindow関連の実装はスケルトンレベルだがOK
SUB Window 関連のクラス設計をする予定。

2005年6月12日(日)
とりあえず、AMAZONで購入した DIRECTSHOW本に付いて来た DirectX9SDK
の方はwin2000でもインストール可能。(サンプルの全部が動くわけではないけど)

落ち着いたらWindowsXP にしなくちゃね。(.NET 2005 が出たら換えようかとは思っていましたが)

2005年6月11日(土)
DirectX9 SDK 最新版(2005 Jun)は Windows2000には対応していないのね。
ぷんぷん

2005年6月11日(土)
さて午前中にjpeglib のWindows版でもコンパイルしようかなと

2005年6月10日(金)
昨日は SSII05 に行って、色々見てきた。
愚痴こぼしながら酒飲んで前後不覚...

朝一で
Programming Microsoft Directshow for Digital Video and Television
(Pro-Developer (Paperback))
Mark Pesce; ペーパーバック; ¥ 4,803
なんてのを amazon で注文。

2005年6月8日(水)
結局OSから開発キットから全て入れ直してなんとか安定動作状態に
現在 DirectX9 SDKをDownload中

DVコンバータの初期化に失敗するのも気にはなりますが、電源再投入で
認識するのでとりあえずは見なかった事に...

2005年6月5日(日)
ビデオカード地獄
そもそもの発端は、予備のWindowsマシン ASUS-PanditHT にビデオキャプチャを
取り付けして、モーションセンサーWindows版を開発しようとした所から始まった..

手持ちモニタ(液晶17")を付けてもSIS のオンボードビデオでは1280*1024 にならない
ので、PCIなビデオカードを接続して....と考えて、土曜日秋葉で別件のバナナクリップ
を購入したついでに、冷やかしで入った店で PCIなビデオカードGFX5200-P128Cなんて
カードを購入してしまった。

家に帰ってから早速キャプチャーカード CX23416GYC-STVLP/R と一緒にカードを取り付
けてドライバーのセットアップをしてビデオカメラからの信号取り込み&表示も出来て、
完了〜。。。。しかし3時間後いきなり画面は真っ白&若干縦じわ。

翌日の朝から再テストしても同じ。多分熱暴走だろうなぁと言う事で、ビデオカードの冷却用の
ファンを買いに秋葉原へ。

ここで、Matrox G450/PCIのバルク品なんてものを見かけてしまって、やっぱり安定性だよなぁ
とか思って...これを購入。

で、家に帰って取り付けてみる。
しかし、Pandit はPCIが規格FULLの高さの場合、配線が邪魔になってライザーカードを
挿すのがとても困難。ケースを引っ張り気味にして何とか差し込んで電源投入。
....がピーピーピ音(VGAが無い時の音)

CX23416GYC-STVLP/Rを外してみたり、色々試行錯誤してみたがどうしても認識しない。
こりゃ初期不良だべ、って事で再度秋葉原の販売店のサポートセンターに....しかし
そこではちゃんと認識している。(VGAカードとしてだが)
行きがけの駄賃に、じゃんぱらでミレニウム4M/PCI を500円で購入

仕方なく、家に帰って、再度G450の接続確認。が現象変わらず。
今度は、ミレニウムに差し替えして見る。....カードがCPUファンに当たって
物理的に刺さらない。....みんな死んじゃえばいいんだ(C)zinnia

仕方が無いので、GFX5200-P128C + PCIスロットファンを取り付けて、現在稼動試験中
でふと気が付くと、CX23416GYC-STVLP/R を取り外して、ファンを付けても
ビデオ信号はどうやって取り込むんだか....激しく鬱

2005年6月4日(土)
OpenSOAPSeivie 経由の呼び出し...一応怪しい所は見つけたのだが...
修正する自信がなくて...とりあえず戦略的撤退をしようと

同じ名前のヘッダファイルが点在しているのはやだなぁ


2005年5月29日(日)
ちょっとビデオ信号関係で色々と調査&研究してて忙しかったです。

マトリックスが出来るんじゃないかというぐらいビデオカメラ買い込んだし(^^;;
大箱を大人買いとかしていたし...ちょっと数えてみたら20台...orz

2005年4月20日(水)
ハッシュ表の検索に失敗しているように見える...

Service.c:1059 OpenSOAPBlockGetName() ret = 0 block_name = 0x8059ad0
Service.c:1064 OpenSOAPStringHashGetValue() block_name = ||
StringHash.c:482 OpenSOAPStringHashGetValue IN
StringHash.c:489 OpenSOAPStringHashGetValue OPENSOAP_NOT_CATEGORIZE_ERROR
StringHash.c:496 OpenSOAPStringHashGetValue ret = -1
Service.c:1069 OpenSOAPStringHashGetValue() ret = -1

2005年4月19日(火)
Service.c:1059
Service.c:1064 OpenSOAPStringHashGetValue() block_name = ||
Service.c:1069 OpenSOAPStringHashGetValue() ret = -1
Service.c:1071

srv がさしているブロック名が空?

2005年4月19日(火)
ちと
DVカメラと遊んでいた。

soapInterface.cpp:395
soapInterface.cpp:402 OpenSOAPServiceRun() Call
AppLogger.cpp:217 CreateLog() 呼び出し logbase = |System| Type = 3
AppLogger.cpp:217 CreateLog() 呼び出し logbase = |soapInterface.cgi| Type = -1
AppLogger.cpp:387 AppLogger::CreateLog() type = -1

サービスを呼んだ所でエラーになる所まで確認

2005年4月6日(水)
● 2005/04/06
・ server/Logger.h と Logger.c に入れたデバッグ関数を APIの String.h と
String.c に移行して API内の調査を開始

大体はSSMLがらみでないかと想定していますが...

2005年4月3日(日)
う〜ん
APIの中で異常終了しているように見える。
Service.c を調査かな。

2005年4月3日(日)
Server Falt の原因調査中。
当面の手がかりはこれだけ。
/////////////////////////////////////////////////////////////////////
Apr 3 19:06:35 azathoth soapInterface.cgi[9722]: warn,,,,,false,,0,,0,0,0,,false,false,false,,,Logger create faild (unkown logtype)
Apr 3 19:06:35 azathoth soapInterface.cgi[9722]: err,-1,,,,false,,0,,0,0,0,,false,false,false,,,Network socket connect error !
Apr 3 19:06:35 azathoth soapInterface.cgi[9722]: err,,,,,false,,0,,0,0,0,,false,false,false,,,Logger write faild

・ server/Logger.h と Logger.c にデバッグ関数を入れて追跡した所、
ret = OpenSOAPServiceRun(service);
内でエラーが発生しているもよう

2005年4月2日(土)
OpenSOAP サーバー呼び出し版にチャレンジしたら
いきなり SOAP Fault 喰らった

さてどこから手を付けるべきか..

2005年3月29日(火)
原因
結局 OpenSOAPの初期化段階で LC_CTYPE を C にしている。
※ 正確には LC_ALL を "" にしている。
なので、初期化終了後 LC_CTYPE に jaJP.eucJPとかを設定すれば OK と言う事に...

2005年3月28日(月)
原因は
ほぼ特定。
wcstombs() は 現在locale(LC_CTYPE)を使ってデータを変換しようとするが
これはあくまで、現在LOCALEの WideChar (テスト環境だとEUCのWideChar)
からの変換を想定しています。
libXMLから渡された UTF-8 ベースの文字列は Unicode なのでwcstombs() の変換不可能
チェックに引っ掛かって -1 を返して来る。

じゃぁ対策は?と言えば、Windows APIであれば WideCharToMultiByte() 相当の処理、
Unixであれば、iconv_open(3) / iconv(3) / iconv_close(3) 相当の処理を呼び出す必要
があると思う。
WEBから質問投げてみるかな..

2005年3月27日(日)
OpenSOAPStringGetLengthMB( )
に渡っている文字列は、正しくUnicode になっているなぁ

6F22 5B57
<MyName>漢字</MyName>

と言う事は、iconvがらみかな...

2005年3月27日(日)
うんぬ。文字化けの原因調査中....
OpenSOAPBlockGetChildValueMB: 戻り = 0
OpenSOAPStringGetLengthMB: 戻り = 131074 長さ = -1


2005年3月25日(金)
OpenSoap
日本語(EUC-JP)を通すとリプライが帰ってこない。

コマンドラインから起動するとまともに返信が帰ってくるので、サーバーのどこかだろうなぁ....
本格調査しなくちゃ...

2005年3月21日(月)
・ OpenSOAPの configure オプションのメモ
installation directories:
● --prefix=PREFIX install architecture-independent files in PREFIX
[/usr/local/opensoap]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[PREFIX]

By default, `make install' will install all the files in
`/usr/local/opensoap/bin', `/usr/local/opensoap/lib' etc. You can specify
an installation prefix other than `/usr/local/opensoap' using `--prefix',
for instance `--prefix=$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
--bindir=DIR user executables [EPREFIX/bin]
--sbindir=DIR system admin executables [EPREFIX/sbin]
--libexecdir=DIR program executables [EPREFIX/libexec]
--datadir=DIR read-only architecture-independent data [PREFIX/share]
--sysconfdir=DIR read-only single-machine data [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
--localstatedir=DIR modifiable single-machine data [PREFIX/var]
--libdir=DIR object code libraries [EPREFIX/lib]
--includedir=DIR C header files [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc [/usr/include]
--infodir=DIR info documentation [PREFIX/info]
--mandir=DIR man documentation [PREFIX/man]

Program names:
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM run sed PROGRAM on installed program names

System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
--target=TARGET configure for building compilers for TARGET [HOST]

Optional Features:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--disable-dependency-tracking speeds up one-time build
--enable-dependency-tracking do not reject slow dependency extractors
--enable-shared[=PKGS] build shared libraries [default=yes]
--enable-static[=PKGS] build static libraries [default=yes]
--enable-fast-install[=PKGS] optimize for fast installation [default=yes]
--disable-libtool-lock avoid locking (might break parallel builds)
--enable-buildin-mbfuncs US-ASCII(ISO-8859-1) のみ使用可能になる
--enable-system-iconv iconv の実装に問題のあるシステムの場合は使用しない事(cf. NetBSD)

Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--with-gnu-ld assume the C compiler uses GNU ld [default=no]
--with-pic try to use only PIC/non-PIC objects [default=useboth]
--with-tags[=TAGS] include additional configurations [automatic]
● --with-cgi-bin=DIR cgi-bin directory default=/home/httpd/cgi-bin
--with-ssl=DIR ssl base directory default=/usr/local
--without-ssl disable SSL support
--with-ssl-include=DIR ssl include directory default=/usr/local/include
--with-ssl-lib=DIR ssl lib directory default=/usr/local/lib
● --with-servicesdir=DIR opensoap services directry default=PREFIX/services
--with-apxs=FILE Build shared Apache 2.x module. FILE is the optional
pathname to the Apache apxs tool; defaults to "apxs".


● 黒丸は、ターゲット環境で Build する時に必ず指定する事

2005年3月19日(土)
libXMLが扱うデータは、xmlCharで UTF-8 固定なのでその出力を使うときには
iconv でEUC に変換してやらないと表示出来ないと言う事にようやく気が付いた。

$ ./gjobread gjobsj.xml | iconv -f UTF-8 -t EUC-JP
parseJob
parsePerson
1 Jobs registered
======= Job
projectID: 3
application: GBackup
category: Development
------ Person
name: 日本語だよんNathan Clemons
email: nathan@windsofstorm.net
------
0 developers
=======
$

と言う事で、手持ち環境では EUCな XML も展開出来る事が確認できた。

2005年3月17日(木)
libXML2 と格闘中.
レンタルサーバーに入っているUTF-8サポート (つまりiconv未サポート)の
libXML2 で EUCなXMLを扱う方法はないのか...と

まぁ1台丸借りすれば済む話ではあるのだか...



2005年3月13日(日)
SOAP 関係で libXML2に手を出し中。

※MySQL関連の一連作業は終わった...

2005年1月28日(金)
MySQL と相変わらず格闘中。まぁ大体出来たんだが...
JPEGの規約違反をしているjpg ファイルが世の中に大量に流通していて頭くらくら.
「C++の設計と進化」を買って来た。

時間が欲しい〜


2004年12月9日(木)
・MySQL
mysql-4.0.22.tar.gz を Build
./configure --prefix=/usr/local/mysql --with-mysqld-user=mysql --with-charset=ujis --with-e
xtra-charsets=all --with-berkeley-db --with-innodb --without-readline

make && make install の後 /etc/my.cnf を作成

cd /usr/local/mysql/share/mysql/
cp my-huge.cnf /etc/my.cnf
してからちょこちょこ弄ってインストール終了

2004年12月5日(日)
dvgrab1.7 をコンパイルしてみたが、やっぱりこんなエラーが出る。

smiltime.cc: In method `class string SMIL::Time::toString(SMIL::Time::TimeFormat = TIME_FORMAT_CLO
CK)':
smiltime.cc:336: implicit declaration of function `int SMIL::round(...)'
smiltime.cc: In function `class string SMIL::framesToSmpte(int, int)':
smiltime.cc:577: implicit declaration of function `int SMIL::snprintf(...)'
make[1]: *** [smiltime.o] エラー 1

う〜む、Linuxのバージョンの問題か?

2004年11月30日(火)
dvgrav 1.7 が出たねぇ
smiltime.cc をどう修正したのか興味しんしん

2004年11月3日(水)
ちょいと別件で、画像の色分解をしていた....やりくさしにしていたのを
復活作業中...どこまでやったか忘れている。

CCIR601 の旧番だと、
Y=0.29R + 0.587G + 0.11B
Cb= 0.1687R - 0.313G + 0.5B
Cr=0.5R -0.4187G + 0.0813B
だったかな


2004年11月3日(水)
・ちょいとサボって 先週末からXOOPS & BLOG の実験を色々していたのですが、
システム的に気になったのは、あちこちで Script 関係のエラーが出る事。

機能が豊富な分、デザイン的には今一つってのも不評だった。
正直 Servlet/JSP でちゃんと設計しないと要求を満足させられないなぁ
という結論を出して一旦実験終了に。

2004年10月23日(土)
・dvgrab で取り込んだ映像(210M)を DIVX に変換してみる。

transcode -i offkai001.avi -o xvidoffkai.avi --accel sse2 -V -y xvid4
大体 12M ぐらいに

・同じデータを使って MPEG2 に変換してみる。
(1) 映像&音声ファイルを作成
transcode -i offkai001.avi -y mpeg -F d -b 224 -o mpegdoffkai.avi --accel sse2 -V

(2) MPEG に合成
tcmplex -o off.mpg -i mpegdoffkai.avi.m2v -p mpegdoffkai.avi.mpa -m 2
大体64M ぐらいになった。

MPEGで配布するならハードコーディング出来るものの方が良さそうだなぁ(^^;;


2004年10月18日(月)
土日に
やややんとつるんで、zinnia宅を強襲
焼肉食べながら DV 回したのでそのうちUPしますね(やめれ)

2004年10月2日(土)
KURO-BOX
一応 VineLinux 化したのだが...
bash-2.04$ uname -a
Linux KURO-BOX 2.4.17_kuro-box #2 2004年 3月 18日 木曜日 11:39:47 JST ppc unknown

bash-2.04$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda1 2.0G 234M 1.6G 13% /
/dev/hda3 149G 51M 148G 1% /mnt

03:22PM up 1 min, 1 user, load average: 0.08, 0.06, 0.02
18 processes: 17 sleeping, 1 running, 0 zombie, 0 stopped
CPU states: 4.5% user, 10.2% system, 0.0% nice, 85.1% idle
Mem: 62800K av, 17264K used, 45536K free, 0K shrd, 2276K buff
Swap: 257032K av, 0K used, 257032K free 10192K cached


このままでは、ちょっと扱いに困ってしまうなぁ...標準に戻して cron 動かすだけにしようかな...
後、2台目のKURO-BOX はコの字型のパネルに色が塗っていないです。...1台目は銀色

2004年9月30日(木)
うんぬ
まとまった時間がとれなくて進捗がよろしくないなぁ。

けっこういい所まで来ているのに....(;_;)v

2004年9月20日(月)
KUROBOX の組み立てをしていたら、2時間近くかかった。
(ぶきっちょなの)

一応画像の動体検出アルゴリズムを一つ作ってテストしてみた。
思った以上にフリッカーの影響が大きいので(Y値 で 3〜5ぐらい変動する)
このあたりも検討の余地ありかなぁ

2004年9月15日(水)
動体検出バッファの設計と実装をしていたのだが....
疲れたので寝ます。

2004年9月13日(月)
ようやく
DVから安定して画像が取得出来るようになった。
コーミング対策の原理上このサイズ以上というのはちょっと難しいです。
いよいよ、動体認識部の設計と実装開始かな。

TAG DVGETS_1 で CVS に暫定登録する。



2004年9月12日(日)
本格的に改造開始
画像入力用に、dvカメラの安いのを見つけて接続。NTSC -> DV のコンバータよりは綺麗(^^;;
Linux からは一発で認識。

とりあえず、filehandler.h に動体検出用のフォーマットを受け取るためのクラス
の実装を開始。

2004年9月8日(水)
出力部
Jpeg 出力を継承して作るのがよさそうだなぁとか..
とりあえず libJpeg の DOC を読み中。

日本には定価では販売しないのね。...しかし$1 が 200円Over って....orz

2004年9月7日(火)
・DFG1394 はあきらめ気味。
・とりあえず解析状況をメモ書き。

2004年9月6日(月)
・ DFG/1394-1 まだ返事が無い。自動応答メールはあったけど....
・ AMAZON でもらったクーポンで液晶モニタを注文したら、届いたらしい。しかし当日
配達はしないんだと...いい商売だ。

ieee1394io.cc を眺めているけど、RAWデバイスから直接 DIF を読み込みしているなぁ
AVC は使用しているけど...

2004年9月5日(日)
● 1394imaging に DFG/1394-1 の問い合わせをしてみた。
日本でも扱っている店はあるけど、値段が倍以上なので...
(定価 $330が 約77,000円)

これがそこそこの画質なら、DVにつきもののコーミングが回避出来る
のですが...


2004年9月4日(土)
いかん
● とりあえず、D1H と ATX-304 のクリーニングを実施
今気が付いたが、ATX-304 の前玉に傷が付いている orz

まぁ山に持っていって結構手荒な事しているからなぁ
充電中だった VAIO もしまって一応開発再開準備OK。

● 設置した WEBカメラもとりあえず順調に動いているみたいで一安心(^^;;

● 別件の調査依頼で...色々調べ物をしていたけどどうもMAPファイルと
実際に稼動させているDLLが違うみたいで調査が進まない。

とりあえず、頭を整理して再調査開始かな

2004年9月2日(木)
日常復帰作業中
● とりあえず溜まっていたメールを消化

AMAZONから、
///////////////////////////////////////////////////////////
5.「ギフト券」は、和書、洋書およびマーケットプレイスなど第三者に
よって売買、供給されるAmazon.co.jpまたはVirginmega.co.jpサイトの
商品の購入にはご利用いただけません。

6.Amazonグループ(Amazon.com、Amazon.co.uk、Amazon.de、Amazon.fr、
Amazon.ca)のWebサイト、関連会社、またはAmazon.co.jpサイトから
アクセスできる他会社のサイトではご利用いただけません。
///////////////////////////////////////////////////////////

で、一体何に使えるんだ?ギフト券(^^;;

● D1Hのバッテリーを4本充電。

後の宿題
(1) D1H のクリーニング
(2) レンズのクリーニング
(3) 解析作業の再開

2004年9月1日(水)
ようやく
日常に復帰しつつある状態。
汎用の動体検知では動物の検知は難しいというのも判ったし...

2004年8月24日(火)
ちとさぼり気味
・日曜日は、ちとサボって山に遊びに行ってきました。
・月曜日は、「グランブルー」見てました。
・今日は、Sビデオ入力端子から画像が入力できるか確認していました。

気が付くと解析がまったく進んでない orz

2004年8月20日(金)
dvgrab
フレームの取得方法の調査中...

・とあるサーバーのrename コマンドの動きがおかしいので調査してみたら、
#snoop -d eri0 tcp port 21

-------------------------------------------------------------------
192.168.0.202 -> goddess FTP C port=3200 RNFR video.tmp\r\n
goddess -> 192.168.0.202 FTP R port=3200 350 File exists, rea
192.168.0.202 -> goddess FTP C port=3200 DELE video.jpg\r\n
goddess -> 192.168.0.202 FTP R port=3200 250 DELE command suc
192.168.0.202 -> goddess FTP C port=3200 RNTO video.jpg\r\n
goddess -> 192.168.0.202 FTP R port=3200 503 Bad sequence of
-------------------------------------------------------------------
RNFR と RNTO の間にコマンドが入っているのが駄目らしい。orz

///////////////////////////////////////////////////////////////
で、安直に jumpgate でワープさせたら、
[root@azathoth jumpgate-0.7]# ./jumpgate -l 20 -r 20 -a goddess
[root@azathoth jumpgate-0.7]# ./jumpgate -l 21 -r 21 -a goddess
--------------------------------------------------------------------
192.168.0.194 -> goddess FTP C port=32849 TYPE I\r\n
goddess -> 192.168.0.194 FTP R port=32849 200 Type set to I.\r\n
192.168.0.194 -> goddess FTP C port=32849 PORT 192,168,0,202,1
goddess -> 192.168.0.194 FTP R port=32849 502 Illegal PORT Com
--------------------------------------------------------------------
PORT コマンドで引っ掛かった。そういえばそういうコマンドがあったなぁ orz

///////////////////////////////////////////////////////////////
ftp.proxy を改造して DELE コマンドが来たら、サーバーに送らず、[220 できたよ]を返す簡単なプログラム
を作成する事にして(Linux で動作確認)

///////////////////////////////////////////////////////////////
問題は OpenBlocksの方で、開発機がネットワークから認識されない。
仕方がないので 工場設定値にリセットして、HDDを繋ぎなおした。

fdisk /dev/hda を見てみると、パーテーションは特に死んでないみたい。

-----------------------------------------------------------------
Disk /dev/hda: 16 heads, 63 sectors, 38760 cylinders
Units = cylinders of 1008 * 512 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 8322 4194256+ 83 Linux
/dev/hda2 8323 8384 31248 82 Linux swap
-----------------------------------------------------------------

/ext1 にマウントされているみたいだし...

・フラッシュ内ネットワークパラメータもOK
[init.d]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
IPADDR=192.168.0.193
NETMASK=255.255.255.0
NETWORK=192.168.0.0
BROADCAST=192.168.0.255
ONBOOT=yes
・HDD内ネットワークパラメータがおかしい
[init.d]# cat /ext1/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
IPADDR=192.168.1.46
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
ONBOOT=yes

このあたりを フラッシュの内容からコピーしなおして復活終了。


2004年8月20日(金)
MAlib
返事来たーと思ったら、悪魔からだった。orz

>Your message was not delivered within 4 days and 0 hours.
>Host malib.net is not responding.
>
>The following recipients did not receive this message:
>
>     <malib-devel@malib.net>
という事のようで....


2004年8月19日(木)
ビデオサーバー
ビデオサーバーからのファイル転送に失敗するので調べていたら、
とあるレンタルサーバー屋さん。FTP の rename コマンドが動作しない...
今まで誰も気が付かなかったのか? それともそういうものなのか?


2004年8月18日(水)
dvgrab
フレームのキャプチャー部分の解析をしていたが...
pthread 使いまくりですね。

解析はとても大変かも。(raw1394 から直にデータを取って来ているみたいだけど,
まだそこまで行き着かない)



2004年8月17日(火)
もちろん
それだけですむわけはなくて
malib/dv1394.h にパッチあてが必要
//#include <libdv/dv1394.h>               // dv1394
#include <libdv/dv_types.h>               // dv1394
#include <libdv/dv.h>                   // libdv(for dv decode)

で、コンパイルしてみたが...
dv1394.h:51: field `dv_status' has incomplete type
dv1394.c: In function `malib_dv1394_new':
dv1394.c:38: `DV1394_PAL' undeclared (first use in this function)
dv1394.c:38: (Each undeclared identifier is reported only once
dv1394.c:38: for each function it appears in.)
dv1394.c: In function `malib_dv1394_new_with_config':
dv1394.c:63: `DV1394_PAL' undeclared (first use in this function)
dv1394.c:63: `DV1394_PAL_FRAME_SIZE' undeclared (first use in this function)
dv1394.c:63: `DV1394_NTSC_FRAME_SIZE' undeclared (first use in this function)
dv1394.c: In function `malib_dv1394_start_capture':

これはカーネルに取り込まれているほうの dv1394.h だなぁ
(この間BUGレポート送った Dan Dennedy 氏作成バージョン)

という事でこれを使うなら 現行の livdv に合わせて作り直しが必須ですね。

2004年8月17日(火)
bash
・bash の色設定
Xでみると目が痛くなるような配色がとっても嫌で ~/.bahrc 内の alias ls を
コメントアウトしたのだが、他にも定義されているようで解除されない。

調べまわると /etc/profile.d/colorls.sh なんて定義ファイルがある orz
とりあえず中身を空にして色がつかないようにした

・MAlib で想定している livdvと ダウンロードしている0.103の libdv は異なるみたい
で、configure のテストで失敗しているみたい。

* libdv の include の中身
$ ls /usr/local/include/libdv
dv.h dv_types.h
$

* configure 内に書かれているテスト内容
    #include <libdv/dv1394.h>
    #include <libdv/dv.h>
・ /usr/src/linux-2.4.22/drivers/ieee1394/に dv1394.h という名前のファイルが
あるので名前を変えたのかな。
という事で、dv1394.h を dv_types.h に変更すると configureで libdv を認識した。

2004年8月16日(月)
MAlib
・ デバイスのサーチ
libdv におまかせみたいに見えるなあ(dv1394.h から)

使っているデバイスは /dev/dv1394 で lsmod するとモジュールとしては
存在する。
Module Size Used by Tainted: P
dv1394 17120 0 (unused)
raw1394 18892 0 (unused)
autofs 10916 1 (autoclean)
... 省略 ...


がぁんデバイス作り忘れていた。orz
$ ls /dev/dv*
ls: /dev/dv*: そのようなファイルやディレクトリはありません

#ls -l /proc/bus/ieee1394/dv/host0/NTSC/in
-rw-rw-rw- 1 root root 0 Aug 16 21:54 /proc/bus/ieee1394/dv/host0/NTSC/in

は存在するので、とりあえず NTSC で作成する。
# mknod -m 666 /dev/dv1394 c 171 32
# ls -l /dev/dv1394
crw-rw-rw- 1 root root 171, 32 Aug 16 21:59 /dev/dv1394

----------------------------------------------------------------------------
dv1394 is a character device whose major number is 171. Name Minor Description
/dev/ieee1394/dv/host0/NTSC/in 32 for NTSC on the first adapter (port)
/dev/ieee1394/dv/host0/NTSC/out 33 for NTSC on the first adapter (port)
/dev/ieee1394/dv/host0/PAL/in 34 for PAL on the first adapter (port)
/dev/ieee1394/dv/host0/PAL/out 35 for PAL on the first adapter (port)
...
/dev/ieee1394/dv/host3/NTSC/in 44 for NTSC on the fourth adapter (port)
/dev/ieee1394/dv/host3/NTSC/out 45 for NTSC on the fourth adapter (port)
/dev/ieee1394/dv/host3/PAL/in 46 for PAL on the fourth adapter (port)
/dev/ieee1394/dv/host3/PAL/out 47 for PAL on the fourth adapter (port)
----------------------------------------------------------------------------


2004年8月16日(月)
・デバイスの探索部

dvgrab が探索している IEEE デバイスは、ビデオカメラ(AVC1394_SUBUNIT_TYPE_VIDEO_CAMERA) では無くて
VCR (AVC1394_SUBUNIT_TYPE_VCR) みたい。
※ raw1394util.cc から

このあたりに、dvgrab でしかキャプチャ出来ない理由がありそう。

ちなみに I/OデータのGV-MVP/IDVは カメラでは無くVCRらしい(笑)
raw1394util.c:139 NODE = 0 SUB UNIT TYPE(VCR) = 0
raw1394util.c:140 NODE = 0 SUB UNIT TYPE(CAMERA) = 0
raw1394util.c:138 NODE = 1 NODE TYPE = 2
raw1394util.c:139 NODE = 1 SUB UNIT TYPE(VCR) = 1
raw1394util.c:140 NODE = 1 SUB UNIT TYPE(CAMERA) = 0

・ MAlib の方も調べてみる必要ありですね。

2004年8月15日(日)
dvgrab
・ 全体のおおまかな動きを調査中

dvgrab.cc:182
dvgrab.cc:375 キャプチャ時間 = |00:00:05|
main.cc:114 キャプチャを開始します
dvgrab.cc:562 データ書き込みフォーマット = 3
filehandler.cc:551 AVIHandler::AVIHandler
Capture Started
dvgrab.cc:642 m_timeDuration が0なので確保します
dvgrab.cc:658 DVgrab::stopCapture()
"aaa004.avi": 18.09 MB 150 frames timecode 05:41:38.08 date 2065.25.45 45:85:85
Capture Stopped
main.cc:121 キャプチャを終了します
dvgrab.cc:658 DVgrab::stopCapture()
dvgrab.cc:658 DVgrab::stopCapture()

マルチスレッドで動作させているみたいだからね〜

とりあえず、カメラを検出方法を調査してみようかな。

2004年8月13日(金)
秋葉で
CX23416GYC-STVLP/R を見かけたのでとりあえずKEEP してきた。

・libxml2-2.6.9
libxml2-2.6.9.tar.gz をダウンロードして、./configure
make && make install であっさりインストール完了。

・kino 0.7.3
再び ./configure をかけると
checking for libglade-2.0 libgnomeui-2.0 >= 1.110.0... Package libglade-2.0 was not found in the p
kg-config search path.
Perhaps you should add the directory containing `libglade-2.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libglade-2.0' found

これを要求してくるという事は、GNOME2 を必要としているという事か....ちょっち保留して dvgrab の解析を
進めた方が良いみたいですね。