HP Photosmart 850 unter Linux



Das Problem


Das Problem beim Betrieb der HP Photosmart 850 unter Linux ist, dass für diese neue Digitalkamera IMHO bisher noch keine Linux-Treiber zur Verfügung stehen. Die Kamera wird bei Verbindung mit dem PC zwar als USB-Gerät erkannt und die Produktdaten werden auch korrekt ausgelesen, das war's dann aber auch.

Die Lösung


Die Lösung ist so schlicht wie effizient: bevor man die Digitalkamera direkt bzw. per Docking-Station mit dem USB-Port des PCs verbindet, muss man im Setup-Menü der Kamera eine Option ändern. Die Photosmart 850 hat nämlich den Vorteil, dass sie über die USB-Schnittstelle neben einer Digicam auch als stink normales Laufwerk (wie bei einem USB-Stick) behandelt werden kann. Um das einzustellen, geht man zunächst ins Setup-Menü und sucht dort den Eintrag "USB". Dort angelangt muss man nur noch den Eintrag von "Digitalkamera" auf "Laufwerk" abändern und dann die Kamera mit dem PC verbinden.
Nachfolgend nun die Erklärung, wie man einen Kernel der Serie 2.4.x so einrichtet, dass die Kamera als normaler "USB-Memory-Stick" geladen werden kann.

Zunächst einmal muss man schauen, ob das USB-Gerät richtig erkannt wurde:

usbview (in X) oder

cat /proc/bus/usb/devices

tun ihr Übriges (ggf. muss man die usbtools (Tools und der usbmgr) und usbview installieren). Bei mir bringt z.B. usbview folgende Ausgabe:

	HP  PhotoSmart 850
	Manufacturer: HEWLETT-PACKARD
	Serial Number: MCN2AH530C40
	Speed: 12Mb/s (full)
	USB Version:  2.00
	Device Class: 00(>ifc )
	Device Subclass: 00
	Device Protocol: 00
	Maximum Default Endpoint Size: 64
	Number of Configurations: 1
	Vendor Id: 03f0
	Product Id: 4002
	Revision Number:  0.01
	(...)
	

Man sieht also, dass die Kamera an einem USB-Port richtig erkannt wurde und nur noch konfiguriert werden muss.

Damit zum schwierigsten (trotzdem recht einfachen) Teil: der Kernel-Konfiguration. Wenn man wie ich debian hat und nicht SuSE etc., wo das Einbinden schon voll automatisch funktioniert, so muss man sich selber um das Kernel-Modul kümmern. Ziel ist es, ein Kernel-Modul namens usb-storage zu erhalten, welches das Einbinden von USB-Speichermedien erlaubt.
Unter /usr/src/linux (hat man hier die Sourcen eines 2.4er Kernels abgelegt) startet man die Kernel-Konfiguration mit

make menuconfig bzw. make xconfig.

Zunächst müssen wir den SCSI Support aktivieren, da USB-Sticks wie SCSI-Laufwerke eingebunden werden. Nachfolgend steht unter dem Menüpunkt USB support die neue Option USB Mass Storage zur Verfügung, die wir modular laden möchten.
Kernel-Konfiguration abspeichern, mit

make dep clean bzImage modules modules_install

den neuen Kernel kompilieren, anschließend kopieren und in lilo/grub eintragen - schon kann das System mit dem neuen Kernel gebootet werden (für detailliertere Anleitungen bitte das Linux-Kernel-HOWTO konsultieren).

Jetzt sollte mit modprobe usb-storage das nötige Modul geladen werden. Bei mir liefert das Kommando folgenden Output:

	Initializing USB Mass Storage driver...
	usb.c: registered new driver usb-storage
	scsi0 : SCSI emulation for USB Mass Storage devices
	Vendor:           Model:                   Rev:
	Type:   Direct-Access                      ANSI SCSI revision: 02
	USB Mass Storage support registered.
	

Wie oben schon einmal beschrieben, ermöglicht das Modul usb-storage den Zugriff auf den USB-Speicher über ein SCSI-Device.
Mit cdrecord -scanbus erhält man eine Übersicht über alle verfügbaren SCSI-Geräte, bei mir (da ich keine weiteren SCSI-Geräte angeschlossen habe):

	Cdrecord 1.10 (i686-pc-linux-gnu) Copyright (C) 1995-2001 Jörg Schilling
	Linux sg driver version: 3.1.22
	Using libscg version 'schily-0.5'
	scsibus0:
        	0,0,0     0) 'HP      ' 'PhotoSmart 850  ' 'A001' Removable Disk
        	0,1,0     1) *
  		0,2,0     2) *
        	0,3,0     3) *
        	0,4,0     4) *
        	0,5,0     5) *
        	0,6,0     6) *
        	0,7,0     7) *
	

Freude! Wir haben ein SCSI-Blockdevice ;o)

Der Rest ist Kinderkram. Mit fdisk -l /dev/sda findet man heraus, welchen Devicenamen die Kamera nun besitzt:

	Disk /dev/sda: 1 heads, 29 sectors, 993 cylinders
	Units = cylinders of 29 * 512 bytes

   	Device Boot    Start       End    Blocks   Id  System
	/dev/sda1   *         2       994     14379+   1  FAT12
	Partition 1 has different physical/logical beginnings (non-Linux?):
     	phys=(0, 1, 8) logical=(1, 0, 11)
	Partition 1 has different physical/logical endings:
     	phys=(449, 1, 30) logical=(993, 0, 1)
	Partition 1 does not end on cylinder boundary:
     	phys=(449, 1, 30) should be (449, 0, 29)
	

Und das war's! Mit mount /dev/sda1 <Mountpunkt> kann ich jetzt die Kamera in mein Dateisystem einbinden.
Dabei stehen nun auf dem Mountpunkt 2 Ordner zur Verfügung:
  • dcim
    Hier stehen die eigentlichen Multimedia-Daten (Fotos, Audio, Videos) zur Verfügung. Durch einfaches Kopieren kann man sie auf den Computer übertragen.
  • misc
  • Die beiden hier gelagerten Dateien "deviceid.xml" und "shareold.xml" dienen der kamerainternen Verwaltung und sollten nicht geändert werden.
Diese Einstellmöglichkeit der PS850 ist natürlich sehr praktisch. So wird nicht nur kein Digicam-Treiber benötigt, mit der "Laufwerk"-Option kann man auf der Kamera auch andere Daten speichern, die für Außenstehende dann unzugänglich sind bzw. wodurch ein einfacher Austausch von Daten ermöglicht wird.

Ich hoffe, dass ich Hilfesuchenden hiermit ein paar gute Tipps geben konnte, für weitere Fragen und Anregungen stehe ich natürlich zur Verfügung...

(c) 2003 by RTC, www.linux-related.de
Dieses Dokument unterliegt der GNU Free Documentation License