TuxMobil: Linux with Laptops, PDAs, Mobile Phones and Portable Computers
PRINT version of "Linux USB-CD Writer HOWTO"
    <= Back to SCREEN version <=



Report: How to use the HP CD-Writer Plus 8210e (USB-Interface) with Linux
Author: Thomas Jaeger
Email: <hunter_at_whopper.de>
Version: V1.1

Intro

This is a short report with all the details how I managed to get my HP CD-Writer Plus 8210e (USB-interface) running with Linux. You will find all neccessary steps I used to connect my HP8210e via USB to Linux. I am afraid for some of you I have bad news: There are at least one or more other HP CD-Writers available (e.g. HP8230e) which have a slightly different interface (only God knows why!) and at the moment there is no support for them. But there is still hope: Someone told me that there is already code in the kernel tree (>=V2.4.0-test8) which deals with these different interfaces but for some mysterious reason this code is not compiled in during kernel config. If the situation improves I will adapt my little report.

The risk is yours...

I cannot promise that the information in this report will be of any help to you. Neither can there be any guarantee that all this will work with your system. Following anything in this document means that you do this completly at your on risk.

Prerequisites

Linux kernel tree >= V2.4.0-test8
cdrecord(http://cdrecord.berlios.de/old/private/cdrecord.html) V1.10a4
usbmgr(http://www.wonder.ne.jp/~shuu/usbmgr/) V0.3.5
modutils-2.3.15 or better (very important!)
PC with USB-Interface
HP CD-Writer Plus 8210e

First steps

Please check your PC BIOS-Setup whether your USB-Interface is enabled. If you are using MS Win... on the same PC and your USB-CD-Writer is running fine, there should be no need to check the BIOS-Setup.

1.3 Preparing Linux

You should be 100% familar how to configure a new Linux kernel, compile and install it. Don't do this if you are new to this. You might loose your existing Linux kernel configuration, might not be able to boot again and then you are trapped.....

I am using a complete modular Linux kernel configuration. Therefore you should also be familar with the programs "insmod", "lsmod", "modprobe", "depmod" from the modutils-package.

menuconfig

These are the options I selected during the kernel configuration process:

Code maturity level options  -->-
        [*] Prompt for development and/or incomplete code/drivers
Loadable module support  --->
        [*] Enable loadable module support
        [*]   Set version information on all module symbols
        [*]   Kernel module loader
Block devices  --->
        <M> Loopback device support
SCSI support  --->
        <M> SCSI support
        <M>   SCSI disk support
        <M>   SCSI CD-ROM support
        [*]     Enable vendor-specific extensions (for SCSI CDROM)
        (2) Maximum number of CDROM devices that can be loaded as modules
        <M>   SCSI generic support 
        [*]   Enable extra checks in new queueing code
        [*]   Verbose SCSI error reporting (kernel size +=12K)
        [*]   SCSI logging facility
        SCSI low-level drivers  --->
                deactivate any SCSI-Device you don't have!
File systems  --->
         <M> ISO 9660 CDROM file system support
        [*]   Microsoft Joliet CDROM extensions
        [*] /proc file system support
         <M> UDF file system support (read only)
USB support  --->
         <M> Support for USB
        [*]   USB verbose debug messages
        [*]   Preliminary USB device filesystem
        [*]   Enforce USB bandwidth allocation (EXPERIMENTAL)
         --- USB Controllers
        <M>   UHCI (Intel PIIX4, VIA, ...) support
        < >   OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support
                Select the correct USB Controller for your System!!!!!!
        <M>   USB Mass Storage support

That are all kernel options relevant for running my HP CD-Writer Plus 8210e with Linux kernel V2.4.0-test8. Some of the options for verbose debug/error messages are not really neccessary but they help finding problems. So if everything is running fine these options can be switched off.

Warning: You have to be familar with the process to compile and install a new kernel and new modules. If anything goes wrong or you did skip any neccessary step (e.g. setting up LILO) you might not be able to boot anymore. I mentioned it before: You are doing this completely at your own risk!!!

Installation

After compiling the kernel and the modules install everything. You should check the modules directory for the following modules:

cd /lib/modules/2.4.0-test8
cd kernel
ls fs/isofs
        isofs.o 
ls drivers/cdrom
        cdrom.o 
ls drivers/scsi
        scsi_mod.o  sd.o  sg.o  sr_mod.o
ls drivers/usb
        storage  usb-uhci.o  usbcore.o
ls drivers/usb/storage
        usb-storage.o

Reboot!

Next Steps

Get the usbmgr-package. Untar it and read the README file. Do "make" in the source directory. Then do "make install". Now we have to configure the usbmgr config file cd /etc/usbmgr Edit the file usbmgr.conf

a) remove the "#" in the section HOST CONTROLLER in front of one of the "host" choices. For my PC with Intel-chipset the correct line is: host usb-uhci

b) Add the following 3 lines at the end of the section STORAGE vendor 0x3f0 product 0x107 module scsi_mod, sr_mod, usb-storage

Now you have to run the "update_usbdb" program: update_usbdb usbmgr.conf

Now you can start "usbmgr". The program will go into the background so there is no output at all. You can check the "messages"-file with: tail -n50 /var/log/messages

The output to look should look like:

Sep 15 12:55:28 usbmgr[326]: start 0.3.5
Sep 15 12:55:28 usbmgr[328]: open error "/etc/usbmgr/preload.conf"
Sep 15 12:55:28 kernel: usb.c: registered new driver usbdevfs
Sep 15 12:55:28 kernel: usb.c: registered new driver hub
Sep 15 12:55:28 kernel: usb-uhci.c: $Revision: 1.237 $ time 11:07:02 Sep 10 2000
Sep 15 12:55:28 kernel: usb-uhci.c: High bandwidth mode enabled
Sep 15 12:55:28 kernel: usb-uhci.c: USB UHCI at I/O 0xfce0, IRQ 10
Sep 15 12:55:28 kernel: usb-uhci.c: Detected 2 ports
Sep 15 12:55:28 kernel: usb.c: new USB bus registered, assigned bus number 1
Sep 15 12:55:28 kernel: usb.c: USB new device connect, assigned device number 1
Sep 15 12:55:28 kernel: usb.c: kmalloc IF c2e1f760, numif 1
Sep 15 12:55:28 kernel: usb.c: new device strings: Mfr=0, Product=2, SerialNumber=1
Sep 15 12:55:28 kernel: usb.c: USB device number 1 default language ID 0x0
Sep 15 12:55:28 kernel: Product: USB UHCI Root Hub
Sep 15 12:55:28 kernel: SerialNumber: fce0
Sep 15 12:55:28 kernel: hub.c: USB hub found
Sep 15 12:55:28 kernel: hub.c: 2 ports detected
Sep 15 12:55:28 kernel: hub.c: ganged power switching
Sep 15 12:55:28 kernel: hub.c: standalone hub
Sep 15 12:55:28 kernel: hub.c: global over-current protection
Sep 15 12:55:28 kernel: hub.c: power on to power good time: 2ms
Sep 15 12:55:28 kernel: hub.c: hub controller current requirement: 0mA
Sep 15 12:55:28 kernel: hub.c: port 1 is removable
Sep 15 12:55:28 kernel: hub.c: port 2 is removable
Sep 15 12:55:28 kernel: hub.c: local power source is good
Sep 15 12:55:28 kernel: hub.c: no over-current condition exists
Sep 15 12:55:28 kernel: hub.c: enabling power on all ports
Sep 15 12:55:28 kernel: usb.c: hub driver claimed interface c2e1f760
Sep 15 12:55:28 kernel: usb.c: kusbd: /sbin/hotplug add 1
Sep 15 12:55:28 kernel: usb.c: kusbd policy returned 0x0
Sep 15 12:55:28 usbmgr[328]: "usb-uhci" was loaded
Sep 15 12:55:28 usbmgr[332]: mount /proc/bus/usb
Sep 15 12:55:28 usbmgr[328]: USB device is matched the configuration
Sep 15 12:55:28 usbmgr[328]: "none" isn't loaded

There are two other checks to do:

a) cat /proc/interrupts

           CPU0
  0:     991954          XT-PIC  timer
  1:      19880          XT-PIC  keyboard
  2:          0          XT-PIC  cascade
  8:          2          XT-PIC  rtc
  9:         14          XT-PIC  Cirrus Logic PD 6832, Cirrus Logic PD 6832 (#2)
 10:         42          XT-PIC  usb-uhci
 12:     243881          XT-PIC  PS/2 Mouse
 13:          0          XT-PIC  fpu
 14:      16314          XT-PIC  ide0
NMI:          0
ERR:          0

Result: usb-uhci has to show up connected to an interrupt: Here it is: int10

b) lsmod

usb-uhci               21708   0  (unused)
usbcore                49856   1  [usb-uhci]
nfsd                   69928   4  (autoclean)
lockd                  49340   1  (autoclean) [nfsd]
sunrpc                 58244   1  (autoclean) [nfsd lockd]
unix                   14372  37  (autoclean) 

Result: The modules "usb-uhci" and "usbcore" should be there...

It's time to hotplug...

Power up your HP CD-Writer Plus 8210e and plug the USB-cable into your PC USB interface. This should trigger the usbmgr to load the nessesary modules for the CD-Writer. For a first check: tail -n50 /var/log/messages The new output generated by the hotplug event should look like:

Sep 15 13:13:07 kernel: hub.c: port 1 connection change
Sep 15 13:13:07 kernel: hub.c: portstatus 101, change 1, 12 Mb/s
Sep 15 13:13:08 kernel: hub.c: portstatus 103, change 0, 12 Mb/s
Sep 15 13:13:08 kernel: usb.c: USB new device connect, assigned device number 2
Sep 15 13:13:08 kernel: usb.c: kmalloc IF c2e1f660, numif 1
Sep 15 13:13:08 kernel: usb.c: new device strings: Mfr=1, Product=2, SerialNumber=0
Sep 15 13:13:08 kernel: usb.c: USB device number 2 default language ID 0x409
Sep 15 13:13:08 kernel: Manufacturer: Shuttle Technology Inc.
Sep 15 13:13:08 kernel: Product: HP USB CD-Writer Plus
Sep 15 13:13:08 kernel: usb.c: unhandled interfaces on device
Sep 15 13:13:08 kernel: usb.c: USB device 2 (prod/vend 0x3f0/0x107) is not claimed [..] 
Sep 15 13:13:08 kernel:   Length              = 18
Sep 15 13:13:08 kernel:   DescriptorType      = 01
Sep 15 13:13:08 kernel:   USB version         = 1.00
Sep 15 13:13:08 kernel:   Vendor:Product      = 03f0:0107
Sep 15 13:13:08 kernel:   MaxPacketSize0      = 64
Sep 15 13:13:08 kernel:   NumConfigurations   = 1
Sep 15 13:13:08 kernel:   Device version      = 2.00
Sep 15 13:13:08 kernel:   Device Class:SubClass:Protocol = 00:00:00
Sep 15 13:13:08 kernel:     Per-interface classes
Sep 15 13:13:08 kernel: Configuration:
Sep 15 13:13:08 kernel:   bLength             =    9
Sep 15 13:13:08 kernel:   bDescriptorType     =   02
Sep 15 13:13:08 kernel:   wTotalLength        = 0027
Sep 15 13:13:08 kernel:   bNumInterfaces      =   01
Sep 15 13:13:08 kernel:   bConfigurationValue =   01
Sep 15 13:13:08 kernel:   iConfiguration      =   03
Sep 15 13:13:08 kernel:   bmAttributes        =   40
Sep 15 13:13:08 kernel:   MaxPower            =    0mA
Sep 15 13:13:08 kernel:
Sep 15 13:13:08 kernel:   Interface: 0
Sep 15 13:13:08 kernel:   Alternate Setting:  0
Sep 15 13:13:08 kernel:     bLength             =    9
Sep 15 13:13:08 kernel:     bDescriptorType     =   04
Sep 15 13:13:08 kernel:     bInterfaceNumber    =   00
Sep 15 13:13:08 kernel:     bAlternateSetting   =   00
Sep 15 13:13:08 kernel:     bNumEndpoints       =   03
Sep 15 13:13:08 kernel:     bInterface Class:SubClass:Protocol =   ff:00:00
Sep 15 13:13:08 kernel:     iInterface          =   04
Sep 15 13:13:08 kernel:     Endpoint:
Sep 15 13:13:08 kernel:       bLength             =    7
Sep 15 13:13:08 kernel:       bDescriptorType     =   05
Sep 15 13:13:08 kernel:       bEndpointAddress    =   01 (out)
Sep 15 13:13:08 kernel:       bmAttributes        =   02 (Bulk)
Sep 15 13:13:08 kernel:       wMaxPacketSize      = 0040
Sep 15 13:13:08 kernel:       bInterval           =   00
Sep 15 13:13:08 kernel:     Endpoint:
Sep 15 13:13:08 kernel:       bLength             =    7
Sep 15 13:13:08 kernel:       bDescriptorType     =   05
Sep 15 13:13:08 kernel:       bEndpointAddress    =   82 (in)
Sep 15 13:13:08 kernel:       bmAttributes        =   02 (Bulk)
Sep 15 13:13:08 kernel:       wMaxPacketSize      = 0040
Sep 15 13:13:08 kernel:       bInterval           =   00
Sep 15 13:13:08 kernel:     Endpoint:
Sep 15 13:13:08 kernel:       bLength             =    7
Sep 15 13:13:08 kernel:       bDescriptorType     =   05
Sep 15 13:13:08 kernel:       bEndpointAddress    =   83 (in)
Sep 15 13:13:08 kernel:       bmAttributes        =   03 (Interrupt)
Sep 15 13:13:08 kernel:       wMaxPacketSize      = 0002
Sep 15 13:13:08 kernel:       bInterval           =   20
Sep 15 13:13:08 kernel: usb.c: kusbd: /sbin/hotplug add 2
Sep 15 13:13:08 kernel: usb.c: kusbd policy returned 0x0
Sep 15 13:13:08 usbmgr[328]: USB device is matched the configuration
Sep 15 13:13:08 kernel: usb.c: registered new driver usb-storage
Sep 15 13:13:08 kernel: scsi0 : SCSI emulation for USB Mass Storage devices
Sep 15 13:13:08 kernel: scsi : 1 host.
Sep 15 13:15:55 kernel:   Vendor: HP        Model: CD-Writer+ 8200   Rev: 1.0f
Sep 15 13:15:55 kernel:   Type:   CD-ROM            ANSI SCSI revision:  02 
Sep 15 13:15:55 kernel: Detected scsi CD-ROM sr0 at scsi0, channel 0, id 0, lun 0 
Sep 15 13:15:55 kernel: sr0: scsi3-mmc drive: 8x/24x writer cd/rw xa/form2 cdda tray  
Sep 15 13:15:55 kernel: Uniform CD-ROM driver Revision: 3.11 
Sep 15 13:13:08 kernel: WARNING: USB Mass Storage data integrity not assured
Sep 15 13:13:08 kernel: USB Mass Storage device found at 2
Sep 15 13:13:08 kernel: usb.c: usb-storage driver claimed interface c2e1f660
Sep 15 13:13:08 kernel: USB Mass Storage support registered.
Sep 15 13:13:08 usbmgr[328]: "scsi_mod" was loaded
Sep 15 13:13:08 usbmgr[328]: "sr_mod" was loaded
Sep 15 13:13:08 usbmgr[328]: "usb-storage" was loaded

Please check the line: USB device 2 (prod/vend 0x3f0/0x107)... first. Only if you have the same ID (0x3f0/0x107) you have got the HP8210e. If you get the ID 0x3f0/0x207 then you have the HP8230e which is not supported at the moment. I told you about this at the beginning of this report...

The last 12 lines are the important ones. After the line: "scsi: 1 host:" there has to be the information about the HP CD-Writer (see above). The line "Detected scsi CD-ROM sr0 at scsi0, channel 0, id 0, lun 0" tells you that the CD-Writer has been found via the scsi/usb interface and the device can be accessed via /dev/sr0. On other Linux distributions it might be /dev/scd0 as well. On my SuSE system V6.3 I have /dev/sr? and /dev/scd? both using the same major and minor device numbers. I don't know were the decison is made to use either /dev/sr? or /dev/scd?. Just watch the output in the messages file (see above).

With my PC (maybe too old or too slow), I noticed that the identification process does not work perfectly every time. So if there is no Vendor info it might be necessary to unplug the CD-Writer and replug it again. Normally after the 2nd or 3rd try it works just fine.

Testing

A first real test is to put a normal CD-ROM into the drive and to mount it: mount -r -t iso9660 /dev/sr0 /mnt ls -l /mnt Result: The ls command should show the contents of the CD-ROM

Next test should be with cdrecord: (The cdrtools-1.10a04 package has to be installed first) cdrecord -scanbus The result is:

Cdrecord 1.10a04 (i586-pc-linux-gnu) Copyright (C) 1995-2000 Jörg Schilling
Linux sg driver version: 3.1.16
Using libscg version 'schily-0.4'
scsibus0:
        0,0,0     0) 'HP      ' 'CD-Writer+ 8200 ' '1.0f' Removable CD-ROM
        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) * 

More detailed information can be obtained with: cdrecord -prcap -inq dev=0,0,0 The result is:

Cdrecord 1.10a04 (i586-pc-linux-gnu) Copyright (C) 1995-2000 Jörg Schilling
scsidev: '0,0,0'
scsibus: 0 target: 0 lun: 0
Linux sg driver version: 3.1.16
Using libscg version 'schily-0.4'
Device type    : Removable CD-ROM
Version        : 2
Response Format: 1
Vendor_info    : 'HP      '
Identifikation : 'CD-Writer+ 8200 '
Revision       : '1.0f'
Device seems to be: Generic mmc CD-RW.

Drive capabilities, per page 2A:

  Does read CD-R media
  Does write CD-R media
  Does read CD-RW media
  Does write CD-RW media
  Does not read DVD-ROM media
  Does not read DVD-R media
  Does not write DVD-R media
  Does not read DVD-RAM media
  Does not write DVD-RAM media
  Does support test writing

  Does read Mode 2 Form 1 blocks
  Does read Mode 2 Form 2 blocks
  Does read digital audio blocks
  Does restart non-streamed digital audio reads accurately
  Does not support BURN-Proof (Sanyo)
  Does read multi-session CDs
  Does read fixed-packet CD media using Method 2
  Does not read CD bar code
  Does not read R-W subcode information
  Does read raw P-W subcode data from lead in
  Does return CD media catalog number
  Does return CD ISRC information
  Does not support C2 error pointers
  Does not deliver composite A/V data

  Does play audio CDs
  Number of volume control levels: 256
  Does support individual volume control setting for each channel
  Does support independent mute setting for each channel
  Does not support digital output on port 1
  Does not support digital output on port 2
 
  Loading mechanism type: tray
  Does support ejection of CD via START/STOP command
  Does not lock media on power up via prevent jumper
  Does allow media to be locked in the drive via PREVENT/ALLOW command
  Is not currently in a media-locked state
  Does not support changing side of disk
  Does not have load-empty-slot-in-changer feature
  Does not support Individual Disk Present feature
 
  Maximum read  speed in kB/s: 4234
  Current read  speed in kB/s: 4234
  Maximum write speed in kB/s: 706
  Current write speed in kB/s: 706
  Buffer size in KB: 2048

Mr Kirk: "Mr Zulu, please power up the laser gun..."

Now it's time to use the laser gun. I use the current cdrtools-1.10a04 package. Take a look in the README file first. For a first test you could do: (Insert a new CD-R first) mkisofs -L -l -J -r file1 file2 dir1 dir2 | cdrecord -v -pad -eject -dummy -nofix fs=4m speed=4 dev=0,0,0 -

This command will create an iso9660 image with the files/directories "file1", "file2", "dir1" and "dir2" with joliet and rockridge extensions and will pipe the output directly to the "cdrecord" program. Cdrecord will be verbose (-v), will fill up the last sector (-pad ), will eject the written CD, will do a test write (i.e. the laser is off), will not fi nalize the CD (-nofix), will use 4MByte of RAM as buffer, will use speed = 4x and will use the scsi-device 0,0,0. Please note the important dash "-" at the end. It tells cdrecord to accept data via the pipe. Check whether the dummy write runs without any problems, especially that the fifo buffer does not run out of data. Keep in mind: The max capacity of an CD-ROM is about 650MB. Check first the amount of data you want to write on the CD-R.

A real write command would be: mkisofs -L -l -J -r file1 file2 dir1 dir2 | cdrecord -v -pad -eject fs=4m speed=4 dev=0,0,0 -

The options you have to remove are: -dummy -nofix

You can also use a new CD-RW: mkisofs -L -l -J -r file1 file2 dir1 dir2 | cdrecord -v -pad -eject blank=fast fs=4m speed=4 dev=0,0,0 -

This will also create an iso9660 image. To my knowledge there is at the moment no UDF-write support for CD-RWs with linux. The option blank=fast will erase all data on the CD-RW first!!!!!

All other details how to use mkisofs and cdrecord can be found in the man pages.

Never play around with the USB hotplug (better: hot unplug feature) of the CD-Writer. You will loose data, damage the CD and even lock up your linux system. Remove any CD before unplugging.

The End

So far I had no problems at all burning CDs with the HP CD-Writer Plus 8210e connected to Linux. Performance and stability is good. I started to play with kisocd (V0.6.3) but there is one important option: You have to start kisocd with the option -c109 otherwise it will not generate the neccessary options for mkisofs which is part of cdrecord (V1.10a4). Ohterwise you will get error messages. With kisocd burning CDs is as easy as drag&drop...

Have fun...

Links


        /* Adv.    Xtops.DE - Laptops and PDAs with pre-installed Linux   Adv. */        

http://tuxmobil.org/linux_usb_cd.html, copyright © Werner Heuser, 1997-2008