Не могу разобраться с новым firewire. Раньше, когда был raw1394, всё нормально работало, видео захватывалось, камера определялась.
В августе 2010 после перехода на новые драйвера всё дружно отвалилось - временно решил пересборкой ядра.
Сейчас ситуация повторяется, но хочется уже таки разобраться в чем дело.
Итак, карточка в принципе видна:
02:08.0 FireWire (IEEE 1394): VIA Technologies, Inc. VT6306/7/8 [Fire II(M)] IEEE 1394 OHCI Controller (rev 46)
Ядро 2.6.39-ARCH.
Насколько я понимаю, для корректной работы должны быть загружены firewire_core и firewire_ohci. Таковые в системе имеются:
sh-4.2$ lsmod | grep fire
firewire_ohci 25683 0
firewire_sbp2 11349 0
firewire_core 43390 2 firewire_ohci,firewire_sbp2
crc_itu_t 1077 1 firewire_core
scsi_mod 110702 5 sg,firewire_sbp2,sr_mod,sd_mod,libata
Далее, в /dev должен быть девайс fw0, символизирующий мою firewire-карту. Должны быть права на чтение и запись.
sh-4.2$ ls -l /dev/fw0
crw-rw---- 1 root video 252, 0 Jul 20 02:57 /dev/fw0
Есть. При включении камеры в /dev/ должен появляться fw1, символизирующий, собственно, камеру. Однако ничего такого не происходит, а в dmesg я вижу:
[ 1006.490556] firewire_ohci: isochronous cycle inconsistent
[ 1007.002054] firewire_core: created device fw1: GUID 00804580c18681a8, S100
[ 1007.002061] firewire_core: phy config: card 0, new root=ffc1, gap_count=5
[ 1007.003186] firewire_core: skipped bus generations, destroying all nodes
[ 1007.499940] firewire_core: rediscovered device fw0
Ладно. Выключаем камеру, включаем снова. Почему-то /dev/fw1 теперь появляется, в dmesg видно:
[ 1104.070749] firewire_ohci: isochronous cycle inconsistent
[ 1104.582202] firewire_core: created device fw1: GUID 00804580c18681a8, S100
[ 1104.582209] firewire_core: phy config: card 0, new root=ffc1, gap_count=5
Права на новый девайс вроде как есть:
sh-4.2$ ls -l /dev/fw1
crw-rw----+ 1 root video 252, 1 Jul 20 03:15 /dev/fw1
Однако при попытке доступа к девайсу приложение глухо подвисает, не выдавая даже никаких ошибок. Хотя нет, kino пишет, что «WARNING: raw1394 kernel module not loaded or falture to read/write /dev/raw1394». Забавно это читать, зная, что данный модуль больше не поддерживается.
dvgrab зависает молча, не оставляя ни строчки в консоли.
dmesg по этому поводу выдает следующее:
1270.446962] fuse init (API version 7.16)
[ 1320.269941] INFO: task hald-probe-ieee:7117 blocked for more than 120 seconds.
[ 1320.269945] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[ 1320.269948] hald-probe-ieee D 00000004 0 7117 675 0x00000004
[ 1320.269954] f1d39f1c 00000086 00000000 00000004 00000001 0000ffc1 000000cc 00000000
[ 1320.269961] f0000b00 0000ffff f10a9cd0 00000008 f897f840 f10a9c00 0000ffc1 c1527480
[ 1320.269966] 00000000 c1527480 f6406480 ed86b480 c1463fe0 00000000 fffffff2 f1d39f18
[ 1320.269972] Call Trace:
[ 1320.269991] [<f897f840>] ? release_iso_resource+0x40/0x40 [firewire_core]
[ 1320.269999] [<f8980c30>] ? fw_device_op_ioctl+0x90/0xf0 [firewire_core]
[ 1320.270005] [<c11b8a44>] ? idr_for_each+0x74/0xd0
[ 1320.270011] [<f897ed90>] ? ioctl_get_speed+0x10/0x10 [firewire_core]
[ 1320.270016] [<c1063e08>] ? prepare_to_wait+0x48/0x70
[ 1320.270022] [<f897f02d>] fw_device_op_release+0x10d/0x1b0 [firewire_core]
[ 1320.270026] [<c1063fa0>] ? abort_exclusive_wait+0x80/0x80
[ 1320.270031] [<c111602a>] fput+0xaa/0x1e0
[ 1320.270036] [<c1112c74>] filp_close+0x54/0x80
[ 1320.270039] [<c1112d14>] sys_close+0x74/0xc0
[ 1320.270044] [<c134b31f>] sysenter_do_call+0x12/0x28
[ 1440.269906] INFO: task hald-probe-ieee:7117 blocked for more than 120 seconds.
[ 1440.269910] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[ 1440.269913] hald-probe-ieee D 00000004 0 7117 675 0x00000004
[ 1440.269918] f1d39f1c 00000086 00000000 00000004 00000001 0000ffc1 000000cc 00000000
[ 1440.269925] f0000b00 0000ffff f10a9cd0 00000008 f897f840 f10a9c00 0000ffc1 c1527480
[ 1440.269931] 00000000 c1527480 f6406480 ed86b480 c1463fe0 00000000 fffffff2 f1d39f18
[ 1440.269936] Call Trace:
[ 1440.269956] [<f897f840>] ? release_iso_resource+0x40/0x40 [firewire_core]
[ 1440.269964] [<f8980c30>] ? fw_device_op_ioctl+0x90/0xf0 [firewire_core]
[ 1440.269970] [<c11b8a44>] ? idr_for_each+0x74/0xd0
[ 1440.269977] [<f897ed90>] ? ioctl_get_speed+0x10/0x10 [firewire_core]
[ 1440.269981] [<c1063e08>] ? prepare_to_wait+0x48/0x70
[ 1440.269988] [<f897f02d>] fw_device_op_release+0x10d/0x1b0 [firewire_core]
[ 1440.269992] [<c1063fa0>] ? abort_exclusive_wait+0x80/0x80
[ 1440.269996] [<c111602a>] fput+0xaa/0x1e0
[ 1440.270001] [<c1112c74>] filp_close+0x54/0x80
[ 1440.270005] [<c1112d14>] sys_close+0x74/0xc0
[ 1440.270009] [<c134b31f>] sysenter_do_call+0x12/0x28
Вот. на таком вот неюзабельном состоянии всё и останавливается. Вроде бы и сделано всё как нужно, а не работает. Есть варианты, где может быть запрятана ошибка?