Linux on the C1VE

Please note that I do not recommend buying Sony laptop hardware. This page is provided as an aid to people who already own C1 machines. If you would like me to provide technical support for your laptop, or to advise on buying new hardware, please send me an email to ask about my availability and charges.

The PCG-C1VE is a tiny Sony laptop. Points of interest include its Crusoe CPU and the built-in camera. This page is based on my experiences in running Debian GNU/Linux on my machine, but if you want to use any free operating system on a Sony C1 you're likely to find at least some parts helpful. You may also find it useful to have a look at Steve Barr's C1VN pages.

Contents

[C1VE computer]


Screenshots

(The screenshots below have been scaled to half their original width and height.)

[gnome-gv screenshot]

[gqview screenshot]

[gqview screenshot]


Summary of working hardware

[view of right-hand side of computer]

[view of left-hand side of computer]


A note on installation

The C1VE model which I bought came with no external drives, and Windows ME installed. Since I didn't have access to an appropriate USB floppy or CD-ROM drive, and wouldn't need either for day-to-day use (I make my backups, and install new software, across the network), I had to start the Linux installation from the hard disk, but Windows ME doesn't allow you to run Real Mode DOS programs, such as the Linux bootloaders that worked under, for example, Windows 98. After a lot of stressed fighting with Windows, I succeeded along the following lines:

CPU

The C1VE uses the Transmeta Crusoe CPU; part of the main memory is used as a cache for translated instructions. There is 128 MB RAM in total; free shows 110812 bytes (108 MB) available to Linux.

The Crusoe is x86-compatible, but if you compile your own kernel you should choose the specific Crusoe CPU option for best results.

A tool is available to control the LongRun performance level settings of the Crusoe. (This tool is provided in the longrun Debian package.)

longrun 0.9 (2001-02-14)
usage: longrun [-c device] [-m device] [-hlpv] [-f flag] [-s low high]
 -c device     set CPUID device
 -m device     set MSR device
 -h            print this help
 -l            list LongRun information about available performance levels
 -p            print current LongRun settings and status
 -v            be more verbose
 -f [flag]     set a LongRun mode flag
 -s low high   set current LongRun performance window (0 to 100)

supported flags:
 economy       set economy mode (turn off performance mode)
 performance   set performance mode (turn off economy mode)

dmesg reports:

BIOS-provided physical RAM map:
 BIOS-e820: 0000000000000000 - 000000000009b800 (usable)
 BIOS-e820: 000000000009b800 - 00000000000a0000 (reserved)
 BIOS-e820: 00000000000e6400 - 0000000000100000 (reserved)
 BIOS-e820: 0000000000100000 - 0000000006ff0000 (usable)
 BIOS-e820: 0000000006ff0000 - 0000000006fff800 (ACPI data)
 BIOS-e820: 0000000006fff800 - 0000000007000000 (ACPI NVS)
 BIOS-e820: 00000000fff80000 - 0000000100000000 (reserved)
Scan SMP from c0000000 for 1024 bytes.
Scan SMP from c009fc00 for 1024 bytes.
Scan SMP from c00f0000 for 65536 bytes.
Scan SMP from c009b800 for 4096 bytes.
On node 0 totalpages: 28656
zone(0): 4096 pages.
zone(1): 24560 pages.
zone(2): 0 pages.
mapped APIC to ffffe000 (011dd000)
Initializing CPU#0
Detected 595.517 MHz processor.
Console: colour VGA+ 80x25
Calibrating delay loop... 1163.26 BogoMIPS
Memory: 110632k/114624k available (937k kernel code, 3604k reserved, 354k data, 180k init, 0k highmem)
Dentry-cache hash table entries: 16384 (order: 5, 131072 bytes)
Inode-cache hash table entries: 8192 (order: 4, 65536 bytes)
Buffer-cache hash table entries: 4096 (order: 2, 16384 bytes)
Page-cache hash table entries: 32768 (order: 5, 131072 bytes)
CPU: Before vendor init, caps: 0084803f 0081813f 00000006, vendor = 7
CPU: L1 I Cache: 64K (64 bytes/line), D cache 64K (32 bytes/line)
CPU: L2 Cache: 512K (128 bytes/line)
CPU: Processor revision 1.3.1.2, 600 MHz
CPU: Code Morphing Software revision 4.1.4-7-51
CPU: 20000805 23:30 official release 4.1.4#2
CPU: After vendor init, caps: 0084813f 0081813f 00000006 00000000
CPU serial number disabled.
CPU:     After generic, caps: 0080813f 0081813f 00000006 00000000
CPU:             Common caps: 0080813f 0081813f 00000006 00000000
CPU: Transmeta(tm) Crusoe(tm) Processor TM5600 stepping 03
Checking 'hlt' instruction... OK.

(Entire dmesg output)


LCD, graphics card

The graphics card is reported as an "ATI Technologies Inc 3D Rage P/M Mobility".

A patch is available against kernel 2.4.26 to make the Linux console use the full width of the screen:

For proper X support, use the following modeline in the Monitor section of your configuration file:

ModeLine "1024x480" 65.00 1024 1032 1176 1344 480 488 494 563 -hsync -vsync

(I previously found and used a different version of this modeline, which gave a blue line down one side of screen. This modeline makes the whole screen visible.)

(My /etc/X11/XF86Config-4)

A tool is available among Andrew Tridgell's picturebook software to control the LCD brightness setting. (This software is in the picturebook Debian package.)

Use setbrightness [0-254] to control the brightness setting - e.g. setbrightness 254 to set maximum brightness.

[view of TV-out socket]

It is now possible to activate the TV-out socket (S-Video) under Linux, though the internal LCD cannot yet be used at the same time. Lennart Poettering's atitvout program allows switching between the LCD, TV-out and monitor-out.

Download the latest version, unpack it ('tar zxvf atitvout-0.2.tar.gz') and compile (change into the 'atitvout' directory and 'make'). You may also want to 'make install' (as root) to put a copy of the atitvout executable in /usr/local/sbin/.

Before using TV-out, I added this modeline to my X configuration:

ModeLine "640x480" 50.00 640 656 752 832 480 481 484 509 -hsync -vsync

To allow this modeline to be used I also had to change my Display configuration to read, for example:

        SubSection "Display"
                Depth           24
                Modes           "1024x480" "640x480"
        EndSubSection

I could now change between 1024x480 and 640x480 while X was running. (I use a GNOME applet to do this, available in the gvid Debian package. Assuming you leave your normal display mode configured, when you switch down into the smaller resolution you'll still have a 'virtual desktop' of the larger size - move the mouse to the edge of the visible screen to scroll around.)

After connecting the computer to a television screen with an S-Video cable, you can use these commands, as root, to redirect the display:

atitvout pal [or, if appropriate, 'atitvout ntsc']
atitvout t

Use 'atitvout l' to put the display back on the LCD.

[view of monitor-out socket]

Similarly, 'atitvout c' should let you use an external computer monitor. (I've only tried with a television so far; to use an external monitor you'll first need to configure a display mode appropriate for that device in the same way as for the television.)

Apparently the TV-out function can also be started up by the kernel's ATI framebuffer driver if an appropriate video mode is chosen. Better ATI support is being developed by the GATOS project. (Some GATOS software is available in the gatos Debian package.)

Aino de Vries reports that it's now possible to get OpenGL acceleration working: see http://www.retinalburn.net/linux/index.html for more information. (I haven't yet had time to test this myself.)

XFree86 reports:

(--) ATI(0): ATI 3D Rage Mobility graphics controller detected.
(--) ATI(0): Chip type 4C52 "LR", version 4, foundry TSMC, class 0, revision 0x01.
(--) ATI(0): PCI bus interface detected;  block I/O base is 0x1400.
(--) ATI(0): ATI Mach64 adapter detected.
(--) ATI(0): Internal RAMDAC (subtype 1) detected.
(==) ATI(0): RGB weight 888
(==) ATI(0): Default visual is TrueColor
(==) ATI(0): Using gamma correction (1.0, 1.0, 1.0)
(II) ATI(0): Using Mach64 accelerator CRTC.
(--) ATI(0): 1024x480 panel (ID 1) detected.
(--) ATI(0): Panel model Sharp.
(--) ATI(0): Panel clock is 42.406 MHz.
(II) ATI(0): Using digital flat panel interface.
(II) ATI(0): Using 8 MB linear aperture at 0xFD000000.
(II) ATI(0): Using Block 0 MMIO aperture at 0xFC105400.
(II) ATI(0): Using Block 1 MMIO aperture at 0xFC105000.
(II) ATI(0): MMIO write caching enabled.
(--) ATI(0): 8192 kB of SDRAM (1:1) detected.
(WW) ATI(0): Cannot shadow an accelerated frame buffer.
(--) ATI(0): Internal programmable clock generator detected.
(--) ATI(0): Reference clock 29.500 MHz.
(II) ATI(0): Maximum clock: 230.00 MHz
(--) ATI(0): Virtual size is 1024x480 (pitch 1024)
(**) ATI(0): Mode "1024x480": 42.4 MHz, 31.6 kHz, 60.8 Hz
(==) ATI(0): DPI set to (75, 75)
(entire XFree86.0.log)

Capture button, jogdial

[view of jogdial]

Patches are available for 2.4.5 kernels to support the Sony Programmable I/O Control Device. As of 9 July 2001, these drivers are not in the main kernel, but are in the -ac series.

(See, for example, this page for instructions about how to apply kernel patches.)

The driver provided in the patch may be compiled as a module, sonypi.

Compile the sonypid daemon, and set it to run in the background when you log into X (e.g. add 'sonypid &' to your .xsession, or use the GNOME or KDE session-management utilities).

To make the jogdial act as a mousewheel (with sonypid), you will need to configure XFree86 to support five-button mice.

Before compilation I made this change to the version I had downloaded:

128c128
< 					execlp("xterm", "xterm", 0);
---
> 					execlp("capture-button", "capture-button", 0);

This makes the capture button run the executable capture-button from your path.

[view of capture button]

dmesg reports:

sonypi: Sony Programmable I/O Controller Driver v1.1.
sonypi: enabled at irq=11, port1=0x10c0, port2=0x10c4
sonypi: device allocated minor is 63

MotionEye camera

[view of Motion Eye camera]

(See also the section on using the capture button and jogdial.)

Patches are available for 2.4.5 kernels to support the Motion Eye camera. As of 9 July 2001, these drivers are not in the main kernel, but are in the -ac series.

The driver provided in this patch may be compiled as a module, meye.

Once the driver is loaded, you can use xawtv or any other Video4Linux-compatible viewer/capture program.

[xawtv screenshot]

The motioneye program is available from the same site - it gives support for certain camera features not accessible through the standard Video4Linux interfaces.

Motion Eye Camera Utility version 1.0, June 6, 2001

Usage: ./motioneye [COMMAND] [OPTION]...

Commands:
	-d, --display		Display camera capture
	-p, --ppm=FILE		Get camera snapshot (ppm format)
	-j, --jpg=FILE		Get camera snapshot (jpg format)
	-m, --mjpeg=FILE	Get mjpeg video

Options:
	-a, --agc=NUM		Camera AGC (0-63) (default 48)
	-b, --brightness=NUM	Camera brightness (0-63) (default 32)
	-c, --colour=NUM	Camera colour (0-63) (default 32)
	-C, --contrast=NUM	Camera contrast (0-63) (default 32)
	-D, --device=FILE	Video device to use (default /dev/video0)
	-f, --framerate=NUM	Framerate (0=every frame, 2=every 2 frames) (0-31) (default 0)
	-h, --hue=NUM		Camera hue (0-63) (default 32)
	-P, --picture=NUM	Camera picture (0-63) (default 0)
	-q, --quality=NUM	JPEG quality (1-10) (default 7)
	-s, --subsample		Subsample the image
	-S, --sharpness=NUM	Camera sharpness (0-63) (default 32)
	-t, --time=NUM		Number of seconds to capture (default 10)

To make the capture button automatically take a snapshot/launch the image capture program if not already running, set up sonypid as above, and create an executable capture-button like this:

#!/bin/sh

set -e

TEMP=`ps aux | grep "xawtv -geom" | grep -v grep`

if [ "$TEMP" = "" ]; then
	exec xawtv -geometry 320x240 -o ~/snapshot
else
	exec xawtv-remote snap jpeg 640x480
fi

A (full) press of the button will launch xawtv; while xawtv is running, subsequent presses will save snapshots to your home directory, with names beginning snapshot-. (A more complex script could make holding the button save out an MPEG video.)

dmesg reports:

Linux video capture interface: v1.00
meye: using 2 buffers with 600k (1200k total) for capture
PCI: Enabling device 00:0b.0 (0010 -> 0012)
PCI: Found IRQ 9 for device 00:0b.0
PCI: The same IRQ used for device 00:0c.0
meye: Motion Eye Camera Driver v1.0.
meye: mchip KL5A72002 rev. 1, base fc104800, irq 9

Memory stick slot

The internal memory slot functions by SCSI commands sent over a USB interface.

A very approximate measurement gave a transfer rate of about 0.25 MB/s.

Compile in SCSI disk support (available as the sd_mod module), USB mass storage support (available as the usb-storage module).

An inserted memory stick should appear as a DOS-formatted SCSI disk - it can then be mounted - e.g. mount /dev/scd0 /mnt/memorystick

I added this line to my autofs /etc/auto.misc configuration file, so that on my system looking at /var/autofs/misc/memorystick automatically mounts in the disk, and it is automatically unmounted after a period of inactivity.

memorystick     -fstype=auto            :/dev/scsi/host0/bus0/target0/lun0/part1

[view of Memory Stick slot]

[view of Memory Stick slot]

dmesg reports:

SCSI subsystem driver Revision: 1.00
Initializing USB Mass Storage driver...
usb.c: registered new driver usb-storage
scsi0 : SCSI emulation for USB Mass Storage devices
  Vendor: Sony      Model: MSC-U01N          Rev: 1.00
  Type:   Direct-Access                      ANSI SCSI revision: 02
WARNING: USB Mass Storage data integrity not assured
USB Mass Storage device found at 2
USB Mass Storage support registered.
Detected scsi removable disk sda at scsi0, channel 0, id 0, lun 0
SCSI device sda: 126848 512-byte hdwr sectors (65 MB)
sda: Write Protect is off
 /dev/scsi/host0/bus0/target0/lun0: p1

Audio

[view of audio in/out ports]

The sound card is reported as a "Yamaha Corporation YMF-754".

Use the kernel's YMFPCI driver.

(I had problems at first with a loud screech when the sound system was enabled - compiling the driver directly into the kernel made the problem much rarer. I have not now experienced the problem for a while, and it may have been properly solved.)

gmix screenshot

/var/log/messages reports:

Jul  6 11:47:47 moray kernel: PCI: Enabling device 00:09.0 (0006 -> 0007)
Jul  6 11:47:47 moray kernel: PCI: Assigned IRQ 9 for device 00:09.0
Jul  6 11:47:47 moray kernel: ymfpci: YMF754 at 0xfc108000 IRQ 9
Jul  6 11:47:47 moray kernel: ac97_codec: AC97 Audio codec, id: 0x414b:0x4d02 (Asahi Kasei AK4543)
Jul  6 11:47:47 moray kernel: YM3812 and OPL-3 driver Copyright (C) by Hannu Savolainen, Rob Hooft 1993-1996

USB

The USB controller is reported as "USB Controller: Intel Corporation 82371AB PIIX4 USB (rev 01)".

I have successfully used a USB (OV511-based) webcam.

[view of USB port]

dmesg reports:

usb.c: registered new driver usbdevfs
usb.c: registered new driver hub
PCI: Found IRQ 9 for device 00:07.2
PCI: The same IRQ used for device 00:08.0
uhci.c: USB UHCI at I/O 0x1020, IRQ 9
usb.c: new USB bus registered, assigned bus number 1
hub.c: USB hub found
hub.c: 2 ports detected
uhci.c:  Linus Torvalds, Johannes Erdfelt, Randy Dunlap, Georg Acher, Deti Fliegl, Thomas Sailer, Roman Weissgaerber
uhci.c: USB Universal Host Controller Interface driver

i.Link (IEEE1394)

The IEEE1394 controller is reported as "FireWire (IEEE 1394): Texas Instruments: Unknown device 8021 (rev 02)".

(untested by author)

You can compile the ieee1394, ohci1394, pcilynx, raw1394, video1394 kernel modules.

You might want to look at the dvgrab program. (Available in the dvgrab Debian package.)

[view of i.Link port]

dmesg reports:

raw1394: /dev/raw1394 device initialized
ieee1394: registered ohci1394 driver, initializing now
ohci1394: looking for Ohci1394 cards
PCI: Enabling device 00:08.0 (0010 -> 0012)
PCI: Found IRQ 9 for device 00:08.0
PCI: The same IRQ used for device 00:07.2
ohci1394_0: remapped memory spaces reg 0xc7db2000
ohci1394_0: allocated interrupt 9
ohci1394_0: soft reset finished
ohci1394_0: max packet size = 2048 bytes
ohci1394_0: 4 iso receive contexts available
ohci1394_0: 8 iso transmit contexts available
ohci1394_0: Receive DMA ctx=0 initialized
ohci1394_0: Receive DMA ctx=1 initialized
ohci1394_0: AT dma ctx=0 initialized
ohci1394_0: AT dma ctx=1 initialized
ohci1394_0: Receive DMA ctx=2 initialized
ohci1394_0: resetting bus on request
ohci1394_0: SelfID process finished (phyid 0, root)
ohci1394_0: selfid packet 0x807f8052 rcvd
ieee1394: including selfid 0x52807f80
ohci1394_0: This node self-id is 0x807f8052
ohci1394_0: calling self-id complete
ohci1394_0: Got phy packet ctx=0 ... discarded
ieee1394: detected 1 ohci1394 adapter 
ieee1394: registered pcilynx driver, initializing now
video1394: initialized with 1 ohci cards

PCMCIA

I use a PCMCIA WaveLan (Orinoco) wireless networking card, and a modem card when I'm away from home.

Apparently the Cardbus modem card supplied with the machine in the UK is a Lucent software modem (sometimes known as a 'winmodem'). Lucent have written a Linux driver, but haven't released the source code. The LTModem project has developed a driver that allows some telephony functionality (but not, for example, PPP).

[view of PCMCIA port]

dmesg reports:

Linux PCMCIA Card Services 3.1.25
  kernel build: 2.4.5 #6 Mon Jun 25 20:55:57 BST 2001
  options:  [pci] [cardbus] [apm]
Intel PCIC probe: <6>PCI: Assigned IRQ 9 for device 00:0c.0
PCI: The same IRQ used for device 00:0b.0

  Ricoh RL5C475 rev 80 PCI-to-CardBus at slot 00:0c, mem 0x10000000
    host opts [0]: [serial irq] [io 3/6/1] [mem 3/6/1] [pci irq 9] [lat 168/176] [bus 1/4]
    ISA irqs (default) = 3,4,5,7,10,12,15 PCI status changes

Features not yet working under Linux

Moray Allan

(Home)