Friday, May 9, 2008

Why VirtualBox is better

I'd tried to load up QEMU or Xen with no success on my OpenSUSE 64-bit ver 10.3 (I am running kernel version 2.6.25).  I then tried VirtualBox OSE (Open Source Edition) downloadable from www.virtualbox.de.  After installing all the needed libraries as instructed and compiled this VB, it worked as charm!

With QEMU or Xen, there were problems I couldn't fix (this because my Linux is heavily customized and not running kernel from openSuSE anymore).  I also tried the pre-compiled (proprietary/non-OSE) version, and this actually even better.  As mentioned on the website, the proprietary version supports USB and file sharing between host and guest O/S.

So far, I am able to run my Windows XP Pro SP3 under this Linux 64-bit with no problem.  I could print, browse internet and even play games (eventhough it is slower than running in native/standalon XP).  With file sharing, I could install Microsoft Office in the guest O/S and share the doc/xls/ppt files.

For the networking, the VB provides a firewall and NAT.  The subnet it gives is in 10.x.x.x subnet, but work with no issues. 

I still have small issue though as the screen resolution under XP is limited to 1024x968, eventhough the host O/S (Linux) has nvidia driver and was running resolution 1680x1050.  But interestingly, on my MacBook running OSX 10.4 Tiger, I could set the screen resolution as much as 1680x1050 (which is even beyond my laptop resolution).  Why?

With Windows XP as host O/S, I initially tried Microsoft Virtual PC.  The interface is good, but when I installed Linux OpenSUSE 10.3 (32-bit), the network worked sporadically and took almost a week to download necessary modules from opensuse.org!   I tried installed offline, the same issue happened.

After this painful waiting, finally I managed to install it, but everytime I rebooted the guest O/S it never came up correctly (the screen stayed blank after the initial OpenSUSE login screen).  I eventually dumped this stupid Virtualization tool completely and install VirtualBox.  Yes, as you might guess, it works like a charm on Windows XP too.  

I still need to try on Windows Vista though.  Will report it later.


What a tool!

Wednesday, April 23, 2008

VirtualBox 1.5.6 with Linux Kernel 2.6.25

While compiling VirtualBox was successful, the loading failed with kernel message (seen using dmesg | tail -f):

release/bin/src ; USER=root ; COMMAND=/sbin/modprobe vboxdrv
Apr 23 22:20:16 linux-hp kernel: vboxdrv: Unknown symbol change_page_attr


With the introduction of the new API, no driver nor non-archcore code needs to use change_page_attr anymore. What I did was to grep for "change_page_attr" in VirtualBox source directory:

grep -R --include=*.? "change_page_attr"

And comment out all calls to this procedure. Loading the module then succeeded:

release/bin/src ; USER=root ; COMMAND=/sbin/modprobe vboxdrv
Apr 23 22:27:53 linux-hp kernel: vboxdrv: Trying to deactivate the NMI watchdog permanently...
Apr 23 22:27:53 linux-hp kernel: vboxdrv: Successfully done.
Apr 23 22:27:53 linux-hp kernel: vboxdrv: TSC mode is 'synchronous', kernel timer mode is 'normal'.
Apr 23 22:27:53 linux-hp kernel: vboxdrv: Successfully loaded version 1.5.6_OSE (interface 0x00050002).

Monday, April 21, 2008

Canon 4200F is still unsupported on Linux

lsusb -d 04a9:221b -vvv


lsusb -d 04a9:221b -vvv

Bus 007 Device 002: ID 04a9:221b Canon, Inc.
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 255 Vendor Specific Subclass
bDeviceProtocol 255 Vendor Specific Protocol
bMaxPacketSize0 64
idVendor 0x04a9 Canon, Inc.
idProduct 0x221b
bcdDevice 2.00
iManufacturer 3 Canon
iProduct 4 CanoScan
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 39
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0xc0
Self Powered
MaxPower 10mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 3
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 255 Vendor Specific Subclass
bInterfaceProtocol 255 Vendor Specific Protocol
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x83 EP 3 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 8
Device Qualifier (for other device speed):
bLength 10
bDescriptorType 6
bcdUSB 2.00
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 255 Vendor Specific Subclass
bDeviceProtocol 255 Vendor Specific Protocol
bMaxPacketSize0 64
bNumConfigurations 1
Device Status: 0x0001
Self Powered

Creative XFi driver on Linux 2.6.25

There is still a problem with beta2 version of Creative Sound Blaster XFi driver on Linux kernel 2.6.25. If we do what is said by the driver installation instruction, it ends up with some errors. Here's a trick how to manually compile and install it:



  1. Download the driver from http://us.creative.com/support/downloads/download.asp?searchString=XFiDrv_Linux. or directly from shell: wget http://ccftp.creative.com/manualdn/Drivers/AVP/10530/0xE84AB36F/XFiDrv_Linux_US-1.18.tar.gz
    The latest is version 1.18

  2. Extract the tar.gz file from your build folder:

    tar zxvf XFiDrv_Linux_US-1.18.tar.gz

    This will extract all files to XFiDrv_Linux_US-1.18
  3. cd to the XFiDrv_Linux_US-1.18/drivers
  4. Try to do make (gotta be a root). It will cause some errors (the errors don't appear on the screen. They are logged in /var/log/creative-installer.log and need root access to see it). We can open another window/shell and just type: sudo tail -f /var/log/creative-installer.log to see what's going on.
  5. OK, now we're about to fix these problems. First, just typ: ./configure
  6. Don't do make yet. We need to modify some files.
  7. edit file LinuxSys.c: vi src/ossrv/LinuxSys.c
  8. Goto line 648 and replace SA_SHIRQ with IRQF_SHARED (Kernel 2.6.22 has told us that it was going to deprecate it although still defines it, but in kernel 2.6.25 this SA_SHIRQ is now gone!)
  9. Add the following line after line 33:


  10. #include <linux/fs.h> // for definitions of filp_*
  11. Add the following lines after line 37:

    #include <asm-generic/fcntl.h> // otherwise, some MACROS are undefined


  12. Compile with the following command: sudo make KBUILD_NOPEDANTIC=1 or modify (temporarily!) file /usr/src/linux/scripts/Makefile.build and comment out statements around line 46 as below:

  13.  #ifeq ($(KBUILD_NOPEDANTIC),)
    #ifneq ("$(save-cflags)","$(CFLAGS)")
    #$(error CFLAGS was changed in "$(kbuild-file)". Fix it to use EXTRA_CFLAGS)
    #endif

  14. Edit file in drivers/ctsound and change the order to:

    drivers="ctossrv emupia ctsfman haxfi ctalsa ct20xut ctexfifx cthwiut"

    #endif
  15. Install it: sudo make install

Saturday, April 19, 2008

Distributed Compile and Caching

This trick has boosted my compilation several times faster now. Here is the steps:

  1. First, you need to install both ccache and icecream (search on the Internet!). The default place for icecream files are under /opt/icecream.
  2. Create a folder /opt/ccache and /opt/ccache/bin
  3. Create file named "gcc" and type:
  4. #! /bin/sh
    export CCACHE_PATH=/opt/icecream/bin
    export PATH=/opt/icecream/bin:/usr/bin:$PATH
    ccache gcc "$@"
  5. Repeat step 3 and 4, but change line "ccache gcc" to "ccache c++" and name the file c++.
  6. Do the same thing (step 5) for cc abd g++
  7. Modify path (I put this in my ~/.profile): export PATH=/opt/ccache/bin:$PATH


To start icecream, as root do this: /etc/init.d/icecream restart
This will start the icecc daemon (iceccd). Here is my processes:

> ps -ef | grep ice
icecream 3944 1 0 19:33 ? 00:00:03 /usr/sbin/scheduler -d -l /var/log/icecc_scheduler -n icecream -vv
root 3957 1 0 19:33 ? 00:00:06 /usr/sbin/iceccd -d -l /var/log/iceccd --nice 5 -s linux-hp -n icecream -u icecream -b /var/cache/icecream -vv


(Modify file /etc/sysconfig/icecream as you needed (especially the scheduler and netname). I still not able to make my other computer to participate in the parallel compile (it is separated by a wireless router but in the same IP subnet). I don't know the root cause yet (the log said it was not able to find the scheduler, although I explicitly specify it [not thru broadcast]).