Got My Xoom running Debain native (without chroot)

37 posts
Thanks Meter: 62
By LIV2, Member on 24th June 2011, 08:26 AM
Post Reply Email Thread
Hey all,

I've installed Debian on my Xoom with the help of a few kernel patches applied to the Tiamat Sources and thought I'd share.

I can't post in the development section because I don't have enough posts. (Admin edit: Now in Development!)

I've got a full writeup of the process of installation from the ground up below
I'll be uploading the rootfs and boot.img for it when I get a chance, but i just thought some people would be interested to know that it is indeed possible (without VNC or Chroot...)

WiFi works under linux when you manually run wpasupplicant, the modem is detected by network-manager automatically and I've gotten the touchscreen working so it's actually pretty usable. no sound or graphics acceleration though as they rely on binary blobs from Nvidia.

The Following 31 Users Say Thank You to LIV2 For This Useful Post: [ View ] Gift LIV2 Ad-Free
24th June 2011, 10:20 AM |#2  
OP Member
Flag Sydney
Thanks Meter: 62
Hey all,

I've seen a lot of people running linux on their android devices but chrooted under android and using a VNC client to make use of the chrooted install. quite messy and less than efficient IMHO, so I set out to install it natively on my Xoom

I've managed to get Debian installed on my Xoom with the only issues being no sound and no Bluetooth, this is due to the proprietary nature of the sound drivers for the Tegra, and the lack of documentation for the BCM4329 Bluetooth under linux. if anyone has any tips with these I'd love to hear them.

Anyway, since the Xoom is an android device with an unlockable bootloader from the factory this wasn't too difficult. the only issues were with the TegraFB and Touchscreen drivers. Thankfully Lilstevie from GalaxyLinux helped me out with the touchscreen driver and Robert Morell from NVidia provided a patch to Chromium for the FB which is here

(Todo: Add guide for using WIFI, upload prebuilt images)
(Update: Fixed the links)

Basically all you need to do is build a root fs and a kernel for your Debian install. this is actually quite easy. here's how..


Building the RootFS
Building the Kernel
Preparing the SDCard
Putting it all together
Rolling back to Android



  1. A Rooted Xoom with ClockWorkRecovery Installed
  2. Make sure you have a nandroid backup. you will need this to boot back into Android!
  3. A running install of Debian, Ubuntu might work too
  4. An SDCard with at least 4GB for the install, preferably separate from your main SDCard and an SDCard reader for your PC
  5. Android–SDK
  6. An Arm–linux toolchain to compile the kernel, if you're lazy like me you can just use the one that comes with the Android NDK
  7. This Xorg Config
  8. Kernel sources
  9. Fastboot tool
  10. mkbootimg

Building the RootFS

Before we do anything we'll need to get the Wifi Firmware off the default install of Android

To do this run the following commands
    # adb pull /system/vendor/firmware/fw_bcm4329.bin
    # adb pull /system/etc/firmware/bcm4329.hcd

Now lets install the tools you'll need to create the rootfs

    # apt–get install binfmt–support qemu qemu–user–static debootstrap
Once that's done, make a directory for the rootfs to sit in until it's ready for the SDCard and start installing the debian base

  # cd ~
    # mkdir deb_arm
    # mkdir deb_arm/boot
    # sudo /usr/sbin/debootstrap ––foreign ––arch armel squeeze deb_arm/
Once that's done you'll need to copy across some qemu files so you can chroot into the deb_arm folder and finish the installation of the base system

    # sudo cp /usr/bin/qemu–arm–static deb_arm/usr/bin
    # sudo chroot deb_arm
    # export LC_ALL=C
    # export LANGUAGE=C
    # export LANG=C
    # cd /debootstrap
    # ./debootstrap ––second–stage
once that's done you'll need to edit your apt sources, to do so run the following

    # echo debandroid > /etc/hostname
    # echo "deb squeeze main contrib non–free" > /etc/apt/sources.list
    # apt–get update
And then install any of the apps you'll want to run on your xoom, I'd recommend at least xorg, gdm3 and gnome, so

    # apt–get install xserver–xorg–video–fbdev xserver–xorg–input–evdev gdm3 gnome initramfs–tools wpa-supplicant
You may find that you get an error like the following

Errors were encountered while processing: bluez gnome–bluetooth gnome–user–share gnome–desktop–environment

If you do, it's safe to ignore this for now. you can always complete the installation of any non–critical packages on the device. it seems to be something weird with the chroot or the qemu emulation of ARM (if anyone knows a way to fix this I'd be glad to hear it!)

Once that's done, you'll not only want to set your root password but you'll want to add a standard user account too
    # passwd root
    # adduser liv2
    # addgroup ––gid 3003 inet
    # usermod –aG 3003 liv2
The addgroup and usermod are especially important, the android kernel doesn't normally allow network access to non–root accounts. so we have to add the special group then give the user access to that group (or you could compile the kernel to not use the android paranoid network settings)

Once that's done, exit out of the chroot by hitting CTRL+D and copy the xorg config to deb_arm/etc/X11/ and copy in the wireless firmware you copied at the start

# mkdir ~/deb_arm/lib/firmware
# cp ~/fw_bcm4329.bin ~/deb_arm/lib/firmware
# cp ~/ ~/deb_arm/lib/firmware

Building the Kernel

For this part, make sure you've extracted the kernel sources, and the android–ndk to somewhere, in my case they've been extracted in ~/Downloads
    # cd ~/Downloads/Tiamat–AOSP–Tiamat–Xoom–798572c/
    # export CROSS_COMPILE=~/Downloads/android–ndk–r5b/toolchains/arm–eabi–4.4.0/prebuilt/linux–x86/bin/arm–eabi–

    # export ARCH=arm
    # export INSTALL_PATH=~/deb_arm/boot
    # export INSTALL_MOD_PATH=~/deb_arm
    # make tiamat_defconfig
    # make menuconfig
Once you've got the menuconfig screen up, go to Device Drivers > Character Devices > and enable "Virtual Terminal"
go to Device Drivers > Graphics Support > Console Display Driver support > enable "Framebuffer Console Support"

once you've enabled that, exit out and save the changes

Build the kernel and prepare it for use

    # make –j2
    # sudo make modules_install
    # sudo cp arch/arm/boot/zImage ~/deb_arm/boot
    # cp ~/deb_arm/boot/
    # chroot ~/deb_arm
    # mkinitramfs –o /boot/initrd.img.gz `ls /lib/modules`
mkinitramfs may show some warnings like "warning: can't open /etc/mtab:" and "pkg: version '–v1.4.4–Full_Throttle' has bad syntax: invalid character in version number" but it doesn't seem to have caused any issues for me.
Preparing the SDCard

Plug your SDCard reader into your computer and insert the card, you'll then need to partition and format it so make sure you've backed up the content of the card.

Partition it so you have two partitions, the first one being a FAT32 Partition for CWR and for anything you might want to use it for under Android.

Your second partition will need to be EXT3 and big enough to fit your debian install with some room to breathe (about 4GB in my case), you can check how much space you'll need for this by running du -sh ~/deb_arm

Once you've partitioned it, format the first partition as FAT32 and the second partition as EXT3. once you've done that you should put the SDCard back in your Xoom and make a new nandroid backup just to be sure
    # sudo mkfs.ext3 /dev/sdb2
    # sudo mkfs.msdos /dev/sdb1
Putting it all together

First we'll mount the SDCard on your PC and copy across the Root FS


# sudo mkdir /mnt/sdcard
# sudo mount /dev/sdb2 /mnt/sdcard
# sudo cp -arv ~/deb_arm/* /mnt/sdcard/
# umount /mnt/sdcard

Go to the folder you unpacked mkbootimg to and copy in the boot.img from your CWR backup.

Once you've done that, follow the below steps to create the new boot.img for Debian to use

    # cd ~/Downloads/mkbootimg
    # cp ~/deb_arm/boot/zImage .
    # cp ~/deb_arm/boot/initrd.img.gz .
    # mkdir out
    # ./unpackbootimg –i boot.img –o out/
    # ./mkbootimg ––kernel zImage ––ramdisk initrd.img.gz ––base "`cat out/boot.img–base`" \
    ––cmdline "root=/dev/mmcblk0p2 console=tty0" –o newimg.img
Now reboot your Xoom into Fastboot mode and insert the SDCard, this can be done by holding power + volume up until the screen goes black, then power it back on and hold down the volume down key
    # cp ~/Downloads/fastboot .
    # ./fastboot flash boot newimg.img
    # ./fastboot reboot
Your Xoom should now boot up into Debian, on the login screen select the accessibility options and enable on-screen keyboard to log in.
Alternatively, if you happen to have a USB-OTG adapter you can just use a keyboard and mouse to interact with the system.
Going Back to Android

To Roll back to Android, simply boot into Clockwork Recovery, go to Backup/Restore > Advanced Restore and restore boot.img only, reboot and you'll be back in Android


Lopi from the IX Project was a great help, and so was everyone from #IX
Lilstevie from @GalaxyLinux provided the Touchscreen patches
Framebuffer Patch was originally provided by Robert Morell for the Chromium Project
RootFS instructions are based on info at the Debian Wiki
The Following 20 Users Say Thank You to LIV2 For This Useful Post: [ View ] Gift LIV2 Ad-Free
24th June 2011, 01:08 PM |#3  
Junior Member
Thanks Meter: 3
Wow fantastic work, soon as I have some time to dedicate to this, I"m going to have a crack at it.
The Following User Says Thank You to allyourbasekris For This Useful Post: [ View ] Gift allyourbasekris Ad-Free
24th June 2011, 01:36 PM |#4  
Thanks Meter: 0
Reserved. Awesome. Hey OP just bump this thread to get your post count up so you can post this in developement. I was looking for an alternative that didn't require vnc.

Sent from my PC36100 using XDA App
24th June 2011, 04:24 PM |#5  
OP Member
Flag Sydney
Thanks Meter: 62
I've asked a mod to move it now, I think I have the required postcount now anyway.

Just to note, you should be able to install Ubuntu, Gentoo, Fedora etc as long as you can build the root and the initrd for it.

If you do go through with this, be sure to post here! I'd love to see some ubuntu or gentoo or anything running on people's xooms really.

Also, I'm currently uploading a video I made showing how usable it really is
The Following User Says Thank You to LIV2 For This Useful Post: [ View ] Gift LIV2 Ad-Free
24th June 2011, 11:20 PM |#6  
Senior Member
Flag Vista
Thanks Meter: 93
maybe one day we can have a dual boot....<insert e-gasm>
24th June 2011, 11:54 PM |#7  
Senior Member
Thanks Meter: 37
Another reason xoom is a great tablet. I'm not linux savvy so I hope this becomes much easier in the future.
25th June 2011, 02:17 AM |#8  
OP Member
Flag Sydney
Thanks Meter: 62
Originally Posted by bilago

maybe one day we can have a dual boot....<insert e-gasm>

Actually, you kinda can!

If you don't need 3G support under Linux, you can flash the boot.img to the recovery partition and boot it that way.

If you need to use CWR later you can just restore the partition from a backup
25th June 2011, 04:45 AM |#9  
Senior Member
Thanks Meter: 37
Originally Posted by LIV2

Actually, you kinda can!

If you don't need 3G support under Linux, you can flash the boot.img to the recovery partition and boot it that way.

If you need to use CWR later you can just restore the partition from a backup

Can you post a pre configured build for users that dont know much about linux can use once you get sound working?
25th June 2011, 10:31 AM |#10  
OP Member
Flag Sydney
Thanks Meter: 62
Unfortunately it's not likely I'll get the sound working due to the proprietary nature of the sound drivers. I should be able to upload the prebuilt packages soon though.
26th June 2011, 09:16 PM |#11  
Thanks Meter: 28
Isn't sound support typically built into the kernel or at least built as a kernel module? Is there something i'm missing?
The Following User Says Thank You to kuroguy For This Useful Post: [ View ] Gift kuroguy Ad-Free
Post Reply Subscribe to Thread

debian, gnu, linux, motorola, xoom

Guest Quick Reply (no urls or BBcode)
Previous Thread Next Thread
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes