2013-03-20 4 views
1

Почему я не могу прочитать этот файл. Я попробовал чтение этого файла с кошкой, как:/dev/video0: недопустимый аргумент

cat /dev/video0 

Но это говорит

cat: /dev/video0 : invalid arguments 

Точно так же, если я пытаюсь использовать дд как:

dd if=/dev/video0 ~/vid 

Он еще не умеет читать Это.

Обратите внимание, что video0 является файлом устройства для моей веб-камеры.

+0

Возможно, результат работы * dmesg * может быть полезен – Federico

+0

@Federico dmesg не дает результата при выполнении cat/dev/video0 – pranavk

+0

Недостаточно привилегий? Оболочки IME не всегда дают сообщения об ошибках, которые можно ожидать. Попробуйте 'strace' и посмотрите, что произойдет, когда сбой' sys '(sys-call). – marko

ответ

1

Я думаю, что функция show для узла устройства «video0», который вы создали в своем драйвере, может быть неправильной.

Приведите пример ниже.

static DEVICE_ATTR(video0, S_IRUGO|S_IWUSR|S_IWGRP|S_IWOTH, video0_show, video0_store); 

static ssize_t video0_show(struct device *dev, struct device_attribute *attr, char *buf); 

static ssize_t video0_store(struct device *dev, struct device_attribute *attr, char *buf, size_t count); 

Когда кошка узловое устройство «video0» во время выполнения, он вызывает функцию «video0_show», чтобы напечатать что-нибудь. Сообщение об ошибке «cat:/dev/video0: недопустимые аргументы» означает, что аргументы функции video0_show неверны. Вы должны отладить драйвер.

1

Я использую:

dd if=/dev/video0 of=~/movie.mpg

Тогда

vlc movie.mpg

Но я использую PVRUSB2 миль на галлон кодер/декодер в качестве источника.

В вашем вызове dd вы можете рассмотреть перенаправление «>», используя конструкцию «из».

0

В таких случаях один способ узнать больше, чтобы выполнить команду в трассированием

strace cat /dev/video0 

, который будет показывать более подробную информацию о точке сбоя:

.... 
open("/dev/video0", O_RDONLY)   = 3 
fstat(3, {st_mode=S_IFCHR|0660, st_rdev=makedev(81, 0), ...}) = 0 
fadvise64(3, 0, 0, POSIX_FADV_SEQUENTIAL) = 0 
read(3, 0x2379000, 65536)    = -1 EINVAL (Invalid argument) 
.... 

, который в в моем случае, похоже, говорится, что устройство my/dev/video0 не поддерживает требуемую операцию: так что в этом случае «cat» пытается прочитать 64k байт с устройства.

Однако, я обнаружил, что с помощью NC (Netcat) вместо того, чтобы кошка сделал работу для этой цели:

nc -l 1234 </dev/video0 

с соответствующим:

nc 127.0.0.1 1234 | mplayer tv://device=/dev/stdin 

для отображения на местном уровне; здесь также будет работать порт туннеля SSH.

Смежные вопросы