Kodak Digital Camera HOWTO

David M. Burley, khemicals@stampede.org

v0.0.7, 20 February 2000


Getting a Kodak digital camera working under GNU/Linux.

1. Introduction

2. Background

3. Communicating With the DC-Series Cameras

4. Software Support

5. Additional Online Resources

6. FAQ

7. TODO

8. Appendix


1. Introduction

1.1 History

This HOWTO was created in an attempt to document installation of a Kodak DC-265 Camera.

Revision History:

February 20, 2000--

February 17, 2000--

January 18, 2000--

January 9, 2000--

January 4, 2000--

January 3, 2000--

1.2 New Versions

New versions of this HOWTO will be available on http://mh.netpedia.net/HOWTO/kodak/. Copies of this HOWTO will be provided in a number of formats, including SGML, HTML and ASCII text. The authoritative master of this document will be the SGML-formatted copy.

February 20, 2000--

v0.0.7 released (public)

v0.0.6 released (non-public)

February 17, 2000--

v0.0.4 released and v0.0.5 released (non-public)

January 18, 2000--

v0.0.3 released (non-public)

January 9, 2000--

v0.0.2 released (non-public)

January 4, 2000--

v0.0.1 released (non-public)

1.3 Copyright and Trademarks

Copyright

Copyright (c) 2000 David M. Burley

This manual may be reproduced in whole or in part, without fee, subject to the following restrictions:

Exceptions to these rules may be granted for academic purposes: Write to the author and ask. These restrictions are here to protect us as authors, not to restrict you as learners and educators. All source code in this document is placed under the GNU General Public License, available via anonymous FTP from the GNU archive site. Please contact the author via email before distribution or inclusion of this HOWTO in any works. This is to make sure that the most recent and most accurate version is used.

Trademarks

Linux is a registered trademark of Linus Torvalds.

Kodak is a registered trademark of the Eastman Kodak Company.

Digita is a registered trademark of Flashpoint Technology, Inc.

Dell is a registered trademark of Dell Computer Corporation.

Windows is a registered trademark of Microsoft Corporation.

All other trademarks are the property of their respective owner.

1.4 Acknowledgments and Thanks

I would like to thank the Marble Horse Free Software Group for their support of my efforts, specifically Jacob Moorman for his direction and help with this and many of my other endeavors. I would also like to thank the rest of the Linux community, especially those working on USB and digital camera support. Know that there are people out there who are using your code and would like you to continue.

1.5 Author Contact Information

David Burley can be reached via email at the following address: khemicals@stampede.org

GPG Key ID: 60ACD148

FPR1: 76CE FFCA F637 DFD0 BAA5

FPR2: 1079 BCB1 3CDD 60AC D148


2. Background

2.1 Digital Camera Technology--How Things Work

Digital cameras work with the same basic concept as a traditional camera. They have a viewfinder or LCD screen to show the image prior to taking a photograph, a lens with a shudder behind it to allow the light from the subject to hit a light sensative material. However, this is where most of the similarities end.

Digital cameras use a CCD (Charged Coupled Device) to sense the colors of the light and their intensity. The CCD can be likened to a very find piece of graphing paper, with thousands of little squares (transistors) to which sense the differences between the colors. There are three types of transistors used in commonplace CCDs, red, green and blue. Each transistor then passes the color and intensity it sensed to and Analog-to-digital converter (ADC). The ADC then converts the information passed to it by the transistors into a digital format, or binary 1's and 0's. The digital output of the ADC is then passed to a Digital Signal Processor (DSP). The DSP adjusts the contrast and other image details to get the perfect look and then compresses the data into a file format like JPEG (Joint Photographics Expert Group).

Digital cameras may also have the ability to do an optical or a digital zoom on an image. An optical zoom is when a lens is used to get a closer look at the subject. A digital zoom is used to enhance the optical zoom for a larger image even though the maximum size has been attained via optical zoom. Even though an image can be resized later, it is suggested to use the built in digital zoom of the camera at this point before any compression has been done to the image. File formats like JPEG tend to degrade in quality when resized more so then when the image is resized by the camera's software. This is due to artifacts left behind due to the compression.

A good resource for definitions of the terms used above is Digital Photography Review. Please refer there for more information. Kodak also has a good site with much information on how things work, Kodak Digital Learning Center.

2.2 Kodak Digital Camera Product Line

Awaiting permission from Kodak to use their technical specifications from the Kodak web site for this information. It is copywritten.

DC290

DC280

DC265

DC260 (discontinued)

DC240 / DC240i

DC220 (discontinued)

DC215 / DC215 Metallics

DC210 (discontinued)

DC210 Plus

DC200 (discontinued)

DC200 Plus

DC120 (discontinued)

DC50 (discontinued)

DC40 (discontinued)

DC25 (discontinued)

DC20 (discontinued)

2.3 Communicating With Digital Cameras

RS232 Communications In a Nutshell

USB Communications In a Nutshell

IrDA Communications In a Nutshell


3. Communicating With the DC-Series Cameras

3.1 DC265

The DC265 provides mechanisms for data transfer via standard RS232 serial port, USB (Universal Serial Bus) and IrDA (infrared) interface. Additionally, images may be offloaded from the camera through the removal of the camera's Compact Flash Card and use of a Compact Flash PC Card Adapter in a PC Card reader or notebook PC Card slot. Currently this camera is supported by OpenDiS for USB and Serial data transfer.

Serial Camera Control

Additional notes regarding transfer of data from the DC265 camera using RS232 serial support will be added in a future version of this HOWTO. See the OpenDiS subsection of the Software section of the HOWTO for information regarding serial camera control.

2.2.14 Kernel USB Support

At the moment the USB implementation in the 2.2.x series is insufficient and substantially out of date. As such, most USB devices are unsupported natively with the included drivers. However there is a patch available for the 2.2.14 kernel.

What software is needed (if not already present):

  1. usb-2.3.44-for-2.2.14.diff.gz
  2. Linux Kernel 2.2.14
  3. OpenDiS 0.0.3

This document assumes a working knowledge of kernel and program compiling. If unfamiliar with the process please go and read the Kernel-HOWTO.

Applying the patch:

cp usb-2.3.44-for-2.2.14.diff.gz /usr/src
gunzip /usr/src/usb-2.3.44-for-2.2.14.diff.gz
cd /usr/src
patch -p0 < usb-2.3.44-for-2.2.14.diff
 

Select the following to be built as either modules or part of your kernel:

  1. Support for your USB controller (It is suggested that all of these be compiled as modules unless the controller type is known.).
  2. USB Kodak DC-2xx Camera Support.
  3. Preliminary USB Device Filesystem.

Reboot the system and then load the created modules if the support is not compiled into the kernel. To load the modules do the following:

/sbin/insmod /lib/modules/2.2.14/usb/usbcore.o
 

Use the following if the USB controller uses either an Intel or a VIA chipset. Some others may also be supported:

/sbin/insmod /lib/modules/2.2.14/usb/usb-uhci.o 
 

Use the following if the above did not work and this is the controller type:

/sbin/insmod /lib/modules/2.2.14/usb/uhci.o 
 

Use this if the USB controller uses an SiS chipset, is a Compaq, or because the above two didn't seem to work and this is the only option left to try.

/sbin/insmod /lib/modules/2.2.14/usb/usb-ohci-hcd.o
 

Load the module for Kodak Digital Camera support:

/sbin/insmod /lib/modules/2.2.14/usb/dc2xx.o
 

Mount the USB Device Filesystem:

mount -t usbdevfs ignored /proc/bus/usb
 

2.3.46 kernel USB Support

The 2.3.x kernel series is the developmental branch of the kernel. As such it is suggested not to run this kernel series unless the backport of the USB driver does not work.

What software is needed (if not already present.):

Linux Kernel 2.3.46

This document assumes a working knowledge of kernel and program compiling. If unfamiliar with the process please go and read the Kernel-HOWTO.

Select the following to be built as either modules or part of your kernel:

  1. Support for the USB controller (It is suggested to compile all of these as modules if the controller type is unknown.).
  2. USB Kodak DC-2xx Camera Support.
  3. Preliminary USB Device Filesystem.

Reboot your system and then load the created modules if not compiled into the kernel. To load the modules do the following:

/sbin/insmod /lib/modules/2.3.46/usb/usbcore.o
 

Use this if the USB controller uses either an Intel or a VIA chipset. Some others may also be supported.

/sbin/insmod /lib/modules/2.3.46/usb/usb-uhci.o 
 

Use the following if the above did not work and it is your controller type:

/sbin/insmod /lib/modules/2.3.46/usb/uhci.o 
 

Use this if the USB controller uses and SiS chipset, is a Compaq, or because the above two didn't seem to work and there is only one option left to try.

/sbin/insmod /lib/modules/2.3.46/usb/usb-ohci-hcd.o 
 

Load the module for Kodak Digital Camera support:

/sbin/insmod /lib/modules/2.3.46/usb/dc2xx.o
 

Mount the USB Device Filesystem:

mount -t usbdevfs ignored /proc/bus/usb
 

Kernel Devices

The following is a bash shell script designed to create all 16 Kodak devices for use with both the current 2.3.x kernel series and 2.2.14 with the current USB backport. Copy the text below into a file named MakeKodakDev, then make that file executable by typing 'chmod +x MakeKodakDev' and then run the script ./MakeKodakDev as root (or su'd to root) it will create the devices so they don't have to be made individually by hand.

It creates as per the dc2xx.txt file in the kernel documentation the following 16 devices:

/dev/kodak00 type=character major=180 minor=80

...

/dev/kodak15 type=character major=180 minor=95

# Filename: MakeKodakDev
# Last Modified February 16, 2000
# Please see the Kodak Digital Camera HOWTO for more information
# http://mh.netpedia.net/HOWTO/kodak/
#!/bin/sh
export scrapvar=0
while [ $scrapvar -lt 17 ];
do
    if [ $scrapvar -lt 10 ];
    then
        mknod -m 0666 /dev/kodak0$scrapvar c 180 $(( $scrapvar + 80))
    else
        mknod -m 0666 /dev/kodak$scrapvar c 180 $(( $scrapvar + 80 ))
    fi
scrapvar=$(( $scrapvar + 1 ))
done
# EOF
 

3.2 Compact Flash PC Card Adapter

This section is for those who wish to utilize maximum data transfer rate and save the battery power in the camera's batteries. This method of picture access only allows for storage, retrieval, and deletion of images on a Compact Flash Card. These instructions are tested with a Kodak 16 MB Picture Card and a SanDisk CompactFlash PC Card Adapter on a Dell Inspiron 7000 notebook computer.

What software is needed (if not already present):

  1. PCMCIA-CS-3.1.11

This document assumes a working knowledge of kernel and program compiling. If unfamiliar with the process it is strongly suggested to go and read the Kernel-HOWTO.

Select the following to be built as either modules or part of your kernel:

  1. DOS FAT fs support
  2. VFAT (Windows-95) fs support

Reboot the system and then load the created modules each time access to the compact flash card is desired if the support is not compiled into the kernel. To load the modules do the following:

/sbin/insmod /lib/modules/$(uname -r)/fat.o
/sbin/insmod /lib/modules/$(uname -r)/vfat.o
 

Compile and configure PCMCIA-CS. This part of the process is beyond the scope of this document, however there is a document with such information that can be found in the PCMCIA-HOWTO. There is also most likely a pre-packaged version for the distribution of GNU/Linux the computer running. This step can be greatly simplified if a pre-packaged version is used.

Using the Compact Flash PC Card Adapter:

Create a directory to mount the Compact Flash Card to.

mkdir /flashcard
 

Insert the Compact Flash Card into the Compact Flash PC Card Adapter (both should face the same direction).

Insert the Compact Flash PC Card Adapter into the PC-Card slot of the notebook computer.

Mount the Compact Flash Card PC Card Adapter to /flashcard (The Compact Flash Card PC Card Adapter is assigned its device by figuring out how many IDE controllers are on the system, and then assigning it the next device. For example, if a system were to have 2 IDE controllers, and would thus have /dev/hda /dev/hdb /dev/hdc and /dev/hdd assigned to the current controllers, the Compact Flash Card PC Card Adapter would be assigned /dev/hde1.).

mount -t vfat /dev/hde1 /flashcard
 

From this point the files can be copied, moved, deleted, and renamed as done on a normal filesystem. Information regarding file management commands may be found in the documentation included with the OS distribution used, such as man pages. The manual pages which list the commands to use to do the above procedures can be accesses by typing the following to get the command's respective manual page entry: 'man cp', 'man mv', 'man rm'. Before removing the Compact Flash Card PC Card Adapter remember to unmount it with the following command.

umount /flashcard
 

The Compact Flash Card PC Card Adapter can be removed from the PC Card Reader and the Compact Flash Card and be removed from the Compact Flash Card PC Card Adapter.


4. Software Support

4.1 OpenDiS (Open Digita Services)

What is needed: OpenDiS 0.0.3

Compiling, extracting and installing OpenDiS

Run the following commands to compile, extract and install OpenDiS

tar -zxvf opendis-0.0.3.tar.gz
cd opendis-0.0.3
./configure
make
make install
 

Usage

The following usage section is taken directly from the output of the ks command.

Usage: ks [OPTION]... [COMMAND]...
Connect to camera and perform COMMANDs.
Updated: 0.0.3
 
Development note: currently some COMMANDs are supported; default
action is to display this help.  However, all listed
OPTIONS are now supported.
 
  -d DEV, --device=DEV       Look for camera at device DEV.  Defaults
                             to /dev/ttyS0.
  -r RATE, --rate=RATE       Use bit-rate RATE for serial device.  Defaults
                             to 9600.  Not applicable to USB or IrDA.
  -t TYPE, --type=TYPE       Specifies device type, one of: "serial"
                             "usb", or "irda".  Normally, device type
                             can be deduced from DEV and need not be
                             specified
  -i, --irda                 Same as --type=irda
  -s, --serial               Same as --type=serial
  -u, --usb                  Same as --type=usb
 
  -v  --verbose              More output.
  -q  --quiet                Less output.
 
  -l, --list                 List supported commands
  -h, --help                 Display this help and exit.
Currently following commands are supported:
  delall        Delete all files in the camera
  download      Download pictures
  thumbs        Download thumbnails
  gettime       Get camera's date/time
  settime       Set camera clock according to computer's clock
  shoot         Take a picture
  status        Show pictures taken, available and raw count
  getpowermode  Checks if camera is on
  poweroff      Turn the camera off
 

Usage Examples

USB:

Special USB notes. The USB stack has been ever changing in the developmental kernels and as such works differently from time to time. In playing with the latest developmental kernel released the camera tends to show up on /dev/kodak00 or /dev/kodak01, independent of the fact that only one camera is connected. The support for these devices is all fairly new, so expect to have to play with it to get it working. The following should allow one to download all images from the camera to the working directory with a USB connection. Make sure that the camera is in connect mode.

ks -d /dev/kodak00 download
 

Serial:

Serial support does work and as such the following command should allow one to download all images from the camera into their current working directory. Modify the serial port device name as necessary.

ks -d /dev/ttyS0 download
 

IrDA:

Infrared support is not yet supported by OpenDiS. As such no example can be provided. The reason it is not supported yet is that the protocol differs from that of the USB/serial protocols. USB and Serial use very similar if not the same protocol for their functionality.

4.2 Digita Operating Environment- Command Device Protocol Python Script

This Python script written by Sai Lai Lo of AT&T Cambridge Laboratories allows for download of images from Kodak Digital Cameras running DigitaOS and using USB for transfer. Some have problems with this script and some don't. However it is nice to cover all bases.

Here a working copy of the Command Device Protocol Python Script can be attained. The original Command Device Protocol Python Script for which the one above is derived has to be edited to remove leading text to work.

The script depends on /dev/kodak existing due to the way older kernels accessed the Kodak Digital Camera USB Device. A symbolic link must be created between the actual device the camera is on and /dev/kodak. If the camera is on /dev/kodak00 the symbolic link needed can be created with the following command:

ln -s /dev/kodak00 /dev/kodak
 

Be sure to substitute in the proper device name instead of kodak00 if the camera was not assigned kodak00. To list all files on the camera run the following command:

python cdp.py
 

To download a single image from the camera run the following command:

python cdp.py 2:DC265_01/P0000748.JPG
 

That command will download the image P0000748.JPG to the directory DC265_01 in the current directory. A quick and easy command to download all the images from the camera would be:

for file in $(python cdp.py); do python cdp.py $file; done
 

This is just a few of the many ways such a script can work. It is possible to use the above command in a larger shell script to automate downloading the images from the camera, converting the images to another format, resizing the images, creating a web page automatically, and many many others. The options are endless when it comes to scripts like this.

4.3 gPhoto


5. Additional Online Resources

5.1 Kodak Digital Camera Mailing Lists

Kodak Digita Camera

Kodak Digita Camera Mailing List

This list contains information about DigitaOS enabled Kodak Digital Cameras. This includes the Kodak DC220, DC260, DC265 and DC290. This is the place to go for all of your questions regarding how to use your camera, Digita scripting questions and anything else that pertains to the DigitaOS enabled cameras. To subscribe to the mailing list send a blank email to kodak-digita-camera-subscribe@egroups.com. To unsubscribe from the list send a blank email to kodak-digita-camera-unsubscribe@egroups.com. Alternately, go to http://www.egroups.com/register?method=displayregistrationform&url=/www and sign up for an account there. Once the account is created one will have the ability to search through the archive and post messages.

Kodak DC240/DC280

Kodak DC240/DC280 Mailing list

Owners of the Kodak DC240 and DC280 camera models can use this as their forum to discuss issues with other users of the same cameras. This is an open list and its contents can be searched through and viewed at the above URL. To join the list send a blank email to kodak240-280-subscribe@egroups.com. To unsubscribe send a blank email to kodak240-280-unsubscribe@egroups.com.

Kodak DC215

Kodak DC215 Mailing List

Owners and people interesting in contacting other users of the Kodak DC215 digital camera can use this forum to ask and answer questions. This list is specifically oriented towards the Kodak DC215 camera.

5.2 Other Useful Mailing Lists

Linux-USB

Linux-USB

The Linux-USB mailing list is a very active mailing list pertaining to all aspects of USB and Linux. Here one will find the most recent patches for the USB code in the Linux kernel. There is also good discussion on support of digital cameras from time to time. Overall a great list to peek at every week or so.

To subscribe to this list send a blank email to linux-usb-subscribe@suse.com. A confirmation email that must be replied to will then be sent back. Either send a reply to the email address in the reply-to: section of the email, or the address listed in the confirmation message itself. To unsubscribe from the list send a blank email to linux-usb-unsubscribe@suse.com. This action will then have to be confirmed with the same method used for confirming subscription to the mailing list. For a list of other useful commands send an email to linux-usb-info@suse.com.

Linux-kernel

Linux-kernel

The linux-kernel mailing list is a very high traffic mailing list detailing all aspects of the Linux kernel. This list is only for those who wish to have more information than the Linux-USB list and the gPhoto-Kodak lists contain. However, it covers much more of a broad spectrum of topics than Kodak digital camera support under Linux.

Before posting or subscribing to the Linux-kernel mailing list is is highly suggested reading the Linux-kernel mailing list FAQ. It could save much time and embarrassment. It also contains useful information on who certain individuals are in the Linux community in relation to their standing on the list.

To subscribe to the list (remember, it is about 200 emails a day) send an email to majordomo@vger.rutgers.edu with "subscribe linux-kernel username@mailserver" in the body of the message where username is the email account to be used and mailserver is the name of the mail server. Remember to omit the quotation marks.

An alternative to joining the list would be to get the list in digest format. This is a better format to many as it is a few emails a day rather than several hundred. One drawback of this is that it is not as easy to discuss the issues with the mailing list as most mail clients don't know how to deal with the digest in its format besides dealing with it like plain text. To subscribe to the digest send an email to majordomo@vger.rutgers.edu with the line "subscribe linux-kernel-digest username@mailserver" in the body of the message. Where username is the email account username to be used and mailserver is the name of the mail server. Remember to omit the quotation marks.

Unsubscribing from the mail list is as easy as subscribing. Just send an email to majordomo@vger.rutgers.edu with the line "unsubscribe linux-kernel" in the body of the message, or alternately "unsubscribe linux-kernel-digest" if subscribed to the digest. And again, remember to omit the quotation marks.

Rather than subscribing to this list it would be highly suggested to search through the archive which is accessible via the URL listed above. Another alternative is the Kernel Trafficsite. It contains a good overview of the weeks kernel developmental works and discussions in a summary format.

gPhoto-Kodak

gPhoto-Kodak

This list contains much information regarding gPhoto and Kodak cameras. It also contains much discussion on the OpenDiS project and their releases. The latest version of OpenDiS is usually announced on this mailing list and allows one to try out the new functions. Instructions and the form to join the mailing list are at the following URL: http://lists.styx.net/mailman/listinfo/gphoto-kodak.

5.3 Useful Web Sites / Other Resources

Linux-USB Project

Linux USB Project

The Linux-USB Project's web page contains much information pertaining to Linux and USB in general. Although not all information is pertinent to this HOWTO, a large portion of it is. It contains links to the latest USB support, driver maintainers and device working status. Take a look here and in the Linux-USB mail archive if having a problem getting USB working. Chances are one of the later developmental kernels or the source on the CVS will solve the issue.

Linux USB for DC-2xx Cameras

Linux USB for DC-2xx Cameras

This website is maintained by David Brownell, author of the Kodak DC-2xx kernel support. It contains some information not included in this HOWTO as of yet and holds the latest information regarding configuring USB support. Look here for new developments in supporting the Kodak DC-2xx camera series.

OpenDiS (Open Digita Services)

OpenDiS (Open Digita Services)

The Open Digita Services web site is the main source of information on the support of cameras running Digita which include the Kodak DC-220, DC-260, DC-265, DC-290, the Minolta EX-1500 and the HP PhotoSmart C500.

gPhoto

gPhoto

gPhoto is free software for digital cameras licensed under the GNU GPL. It currently supports more than 90 camera models from various vendors. gPhoto has a command line and a GTK+ graphical interface. Many people swear by this program. Installation, configuration and usage information will be added.

Digital Photography Review

Digital Photography Review

Trying to decide which digital camera is best? Digital Photography Review is the most comprehensive website available for all anyone wants to know about digital cameras. This site is not limited to just the Kodak product line and offers great reviews of the newest and older digital cameras. Take a look through the online photo gallery with detailed information pertaining to the camera used and its setting for each and every photograph.


6. FAQ

Q: Why aren't there any entries but this one in the FAQ?

A: Because the HOWTO is currently is a non-public release state and thus there was no time for anyone to ask any questions! So email your questions off to David Burley <khemicals@stampede.org> and lets add to it.


7. TODO

The following TODO list is nowhere near complete. It is simply a list of things meant to added in the future that others have suggested. If anyone has any suggestions for new entries into the HOWTO please email them to David Burley.

  1. Differences between different camera models.
  2. Interesting digital camera uses (aerial/under water photography among others).
  3. Additional support of more Kodak digital cameras (gPhoto support with those).
  4. Support for non-Kodak digital cameras (most likely not anytime in the near future. this is out of the scope of the current document.).
  5. Additional camera interfacing methods.
  6. Updating Firmware (current format for firmware is an Install Shield file.... useless under GNU/Linux).

8. Appendix

This section is to provide valuable information which may not directly apply to the use of Kodak digital cameras under the GNU/Linux operating system. It is meant to help those who need information in a binge on their digital camera and find this document. The scope of this section may change as the HOWTO matures.

8.1 Drivers and other utilities for alternate Operating Systems

DC265

Drivers: Currently Kodak has not released any drivers online for the camera. To support the camera under Windows 95/98/NT use either the included CD-ROM that came with the camera, or call Kodak to order a new CD-ROM.