Свързване на камери за предаване на данни към компютри с операционни системи от семейство POSIX

Съвсем не - ще отговорим със сигурност. Тъй като един от принципите на общността „Отворени източници“ е „Работата по спасяването на давещите се е работата на самите давещи се хора“. И ако производителите на хардуер не проявяват склонност да се грижат за свободолюбивите потребители, те ще се погрижат за себе си. И как го правят - ще се опитаме да демонстрираме в тази статия.

Като обект за упражненията избрахме доста рядка операционна система от семейство POSIX - DragonFlyBSD (информация за нея на английски може да бъде намерена на уебсайта на проекта, а на руски - тук). Защо е толкова екзотично? Първо, както би казал другарят Сталин, нямахме друга операционна система под ръка. И второ, ние се опитахме да покажем, че дори в такава млада и малко широко разпространена ОС, ако я погледнете, не възниква и най-малка трудност при работа с цифрови фотографски материали. Така че не бива да ги очаквате на FreeBSD, още по-малко на която и да е ориентирана към потребителите Linux дистрибуция. По принцип характеристиките, специфични за всяка операционна система, при необходимост ще бъдат отбелязани отделно по пътя.

Едва ли ще сгрешим, ако приемем, че почти всеки цифров фотоапарат, току-що закупен в магазин, осигурява връзка с компютър чрез USB интерфейс. Така че първата задача, пред която е изправен фотопотребителят на безплатна POSIX система, е достъпът до кадрите. И за да го разрешите, трябва да знаете няколко прости неща.

Първият е мястото, където се записват заснетите кадри, е вградено или (което се случва по-често напоследък) сменяемо SSD устройство от типа Compact Flash и т.н. - сега името им е legion. Подробностите за тяхното изпълнение не ни притесняват - достатъчно е, че те по същество не се различават по никакъв начин от флашка с USB конектор. Така че в следващото ще ги наречем просто "камерни" задвижвания.

Устройството за "камера", независимо от неговия тип, носи файлова система - и това ще бъде някакъв вид FAT (VFAT за до 2 GB и FAT32 за по-просторен носител). Така че проблемът с достъпа до носителя за съхранение "камера" се свежда просто до монтиране на неговата файлова система в общата файлова йерархия на нашата операционна система - независимо дали е Linux или някой представител на семейството BSD.

Разбира се, има камери с устройства без файлова система, но това е относително рядко явление. А впечатлението за липсата на файлова система е само привидно. В крайна сметка, докато заснетите кадри в крайна сметка се представят под формата на файлове със съответните графични формати, файловата система ще се проведе във всеки случай. Просто изпълнението на USB интерфейса на определен модел камера може да бъде такова, че да не дава на потребителя директен достъп до файловата система на неговия носител. Това обаче не е причина за отчаяние и по-долу ще разгледаме методите за справяне с подобно възмущение.

Междувременно влиза в сила втората точка: по исторически причини в системите POSIX всички устройства за съхранение, които не са IDE/ATA интерфейс, се показват като SCSI твърди дискове - включително всички USB устройства. Съответно те трябва да бъдат монтирани като обикновени SCSI дискове - тоест блокират устройства, които съответстват на файлове като/dev/sda # (в Linux) или/dev/da # (в BSD).

Да предположим, че успешно сме решили проблема с идентифицирането на името на файла на устройството, съответстващо на устройството "камера" и да бъде монтирано (повярвайте ми, на практика е много по-лесно, отколкото с думи). И сега пристъпваме към действителното монтиране. В Linux ще изглежда така: $ mount -t vfat/dev/sda/mnt_point

където стойността на опцията -t указва типа на файловата система,/dev/sda е името на файла на неговото хост устройство (в примера, не е отбелязано като дисков дял), и/mnt_point е съществуващ (и за предпочитане празна) директория - така наречената точка на монтиране (например/mnt/dc - именно в поддиректориите на директорията/mnt е обичайно да се монтират всякакви сменяеми устройства).

BSD системите нямат една команда за монтиране на различни типове файлови системи - всяка има своя собствена програма. И следователно процедурата за монтиране ще бъде малко по-различна: $ mount_msdos/dev/da0/mnt_point

където mount_msdos е командата за монтиране на файлови системи от семейство FAT, а/dev/da0 е името на файла на SCSI устройството (от Direct Access). Възможна е и друга форма: $ mount -t msdos/dev/da0/mnt_point

Тук опцията -t на общата команда за монтиране извиква програмата за монтиране на съответната файлова система.

И в двата примера устройство, което не е картографирано като дисков дял (сурово устройство), се появява като носител на файловата система. Ако на него е създаден дял, тогава името на съответния файл ще бъде като/dev/sda1 в Linux и/dev/da0s1 в BSD. Числото 1 като идентификатор не е задължително - вграденото устройство може да бъде маркирано като 4-то, например основния дял (защо - това е голяма загадка).

Ако цифровият фотоапарат е свързан редовно, можете да опростите въвеждането на съответните команди за монтиране - за това трябва да въведете ред като/dev/sda1/mnt/dc vfat noauto, потребител 0 0 във файла/etc/fstab

на Linux или/dev/da0s1/mnt/dc msdos rw, noauto 0 0

на FreeBSD (и DragonFlyBSD). И сега, за да монтираме нашето устройство "камера", е достатъчно да посочим точката на монтиране като аргумент на командата за монтиране и изобщо няма да има нужда от опции: $ mount/mnt/dc

Обърнете внимание на думата потребител в примера за Linux - тази опция ще позволи на обикновен потребител, който няма права на администратор, да монтира устройството "камера". На BSD системи подобен резултат може да се постигне с командата $ sysctl vfs.usermount = 1

Да, още нещо: монтирането на USB носител като SCSI устройства изисква системното ядро ​​да бъде изградено с поддръжка („твърда“ или модулна) от подходящите опции, а именно: обща поддръжка на SCSI, поддръжка на SCSI диск, USB като цяло и USB - по-специално "хранилища" (usb mass storage), да не говорим за файловата система FAT и нейната модификация VFAT. Този потребител обаче наистина няма нужда да се притеснява: предварително компилираните ядра на съвременните дистрибуции на Linux, ориентирани към потребителя, са изградени по този начин. А във FreeBSD и DragonFlyBSD ядрото по подразбиране GENERIC поддържа всичко необходимо като модули, които дори не изискват ръчно зареждане - това се случва автоматично при достъп до съответните устройства и файлови системи.

Можете да действате с файловата система на монтирания носител "камера" по същия начин, както с която и да е директория на нашата споделена файлова система, тоест да я видите с команда като $ ls/mnt/dc

копирайте файлове от него в домашната си директория или навсякъде другаде и дори пишете файлове в нея. Трябва само да запомните, че действително заснетите рамкови файлове могат да бъдат погребани достатъчно дълбоко в вложени поддиректории в/mnt/dc.

Описаната процедура беше извършена от нас в DragonFlyBSD за камерите под ръка: Casio QV4000 и Minox Leica M3. В първия Compact Flash 512 е използван като носител за съхранение (броят е размерът в мегабайта), вторият няма подвижен носител (само вградено устройство). Не е забелязан и най-малък проблем ...

Сега нека разгледаме ситуацията, когато след свързване на камерата не беше възможно да се монтира устройството й като дисково устройство, а командата за монтиране дава съобщение за грешка като mount:/dev/da0s1: Устройството не е конфигурирано

Точно такава е ситуацията, която възникна, когато се опитахме да осъществим достъп до същия CompactFlash в камерата на Canon EOS D60. Освен това в DragonFlyBSD (и FreeBSD също) е напълно възможно да се предвиди в момента на свързване - в тези операционни системи информацията за всяко устройство с горещо включване се показва на първия виртуален терминал, който действа като системна конзола. И ако за камери, които не маскират файловата система на устройството си, това съобщение ще изглежда нещо като umass0: OnSpec USB 2.0 Storage Device, rev 2.00/1.00, addr 2 da0 на umass-sim0 bus 0 target 0 lun 0 da0: Fixed Устройство с директен достъп SCSI -0 da0: 1.000MB/s трансфери da0: 38154MB (78140160 512 байтови сектори: 255H 63S/T 4864C)

тогава в случай на камера като Canon EOS D60, отговорът ще бъде радостно съобщение за връзката на някакво абстрактно устройство ugen # (USB генеричен номер такъв и такъв), което е символично устройство и съответно не може да бъде монтирано.

Има два начина за подход към този проблем. Първият е просто да извадите устройството "камера" и да го вмъкнете в четец на карти - в последно време има много от последните, всички те са ориентирани към различни формати и обикновено имат USB интерфейс. По-специално използвахме устройството All-in-Black 12 in 1 USB2, което, както подсказва името му, приема карти от 12 формата. В резултат на това предишното устройство "камера" беше безопасно монтирано като SCSI диск, приблизително както е описано по-горе: $ mount -t msdos/dev/da0s1/mnt/dc

Между другото, този метод е подходящ и за достъп до всякакви "камерни" устройства, ако те могат да бъдат физически отстранени от камерата. Неговото предимство пред директната връзка на камерата с компютър е, че отчитането става чрез интерфейса USB2: по неразбираема причина самите камери, дори не евтини, все още са оборудвани само с конектор USB1.

Какво обаче да се прави, ако а) носителят „камера“ не може да се премахне (въпреки че това не е много често в наши дни), б) няма под ръка четец на карти с подходящ формат или в) просто мързеливо извадете картата на камерата и я поставете някъде?

В тези случаи на помощ ще дойде програма, специално създадена за „вземане“ на кадри от цифрови фотоапарати - gphoto2. Можете да го получите в изходния код от уебсайта на проекта (http://www.gphoto.org/). Той също така е включен в портовете и пакетите на FreeBSD, както и в разпространението на общи дистрибуции на Linux. Това е помощна програма за команден ред, която при стартиране с подходящите опции сканира портовете, към които може да бъде свързан цифров фотоапарат (USB или, за любителите на архаиката, сериен), автоматично открива поддържаните устройства и свързва съответния драйвер (и списък с камери, с които работи тази програма, е доста обширен) и ги изтегля на локалната машина - точно както обикновените ftp клиенти правят за файлове от отдалечени сървъри.

Опциите за командата gphoto2 са многобройни и могат да бъдат намерени подробно в страницата man (1) gphoto2 man. Затова ще се спрем само на някои от тях.

За автоматично свързване на камерата командата gphoto2 се дава по следния начин: $ gphoto2 --auto-detect

Ще работи обаче само ако камерата е включена в списъка с устройства, поддържани от програмата. Какво може да се разбере с команда като тази: $ gphoto2 --list-camera

който ще покаже списък с около 500 артикула - от много древни модели до съвсем модерни.

И накрая, най-интересният начин за стартиране на програмата е: $ gphoto2 --shell

Снимките обикновено се правят, за да ги гледате:-) - независимо дали в печатен вид или директно от екрана. Всъщност цветното, особено фотореалистично, печатане от другари на Linux е тема за отделен разговор и тук няма да го засягаме. Като отбелязваме само, за да избегнем илюзията, че за истински фотореалистичен печат сега е по-добре да се намери друга платформа ...

И накрая, Gimp може да се използва и като зрител (въпреки че това донякъде напомня стрелбата на самотна чайка от основната батарея на боен кораб). Когато става въпрос за сериозна обработка на изображения, Gimp е незаменим.