[HOW-TO] Boot Debian with X11 and wifi from SD card. (Not chroot!)

Search This thread

jairuncaloth

Senior Member
Dec 27, 2008
147
5
Atlanta
irregular-expression.com
Booting Debian with X11 on the Google NexusOne
This howto can also be found on my blog.
http://www.irregular-expression.com/?p=30
Screenshots here
http://picasaweb.google.com/JairunCaloth/Debian?feat=directlink

This is a method to boot into Debian via fastboot on the nexus one from
your SD-card. This is NOT a chroot Debian image, it is honest to goodness
Debian running directly on the hardware. This is completely non destructive to
the android OS. Connectivity to the device can be provided by adbd, ssh, or
serial console. Wifi works perfectly. I have not tested bluetooth. Touchscreen
works, but needs tweaking. X11 works in framebuffer using the Debian
testing branch (squeeze). In order to get a full fledged X driver with
3D acceleration we'll need the driver from
https://www.codeaurora.org/index.php?xwinp which I haven't been able to get
to build. This doesn't mean it's broken. It just means I suck
at cross compiling ;).

Todo:
-Tweak settings to make X more usable.
-Find out how to use the soft keys.
-Get the CodeAurora MSM/QSD X driver working.
-Find decent method to input text.
-Test bluetooth
-Look into using the GSM radio.
-Audio
-Figure out how to configure adbd.
-Get someone who knows C and wants to hack on the recovery image to enable booting debian from there.

This how-to pulls heavily from the debian-arm install guide.
http://www.debian.org/releases/stable/arm/index.html.en

Requirements:
adb (android-sdk)
fastboot
chroot (on your phone)
sdcard with room for Debian - 2gigs seems to be sufficient for Debian + xfce.
I Had about a gig leftover. For this guide, I'm starting fresh with a 4GB sdcard
that I'm devoting completely to Debian. According to the Debian install guide,
you need at least 32MB of memory and 500MB of hard disk space. The guide
recommends at least 5GB of storage for a comfortable install. But since I'm
using the lighter XFCE4 desktop I haven't had any space issues.
http://www.debian.org/releases/stable/arm/ch03s04.html.en


1. Re size the SD card
(don't forget to backup your data before you go messing with partition tables!!)
(optional) Instead of using a partition on your main SD card, you could
simply use another sdcard and dedicate the entire thing to Debian.
Note: android didn't like me very much when I did this. I put in a
tiny (30MB) vfat partition right at the beginning of the blank sdcard
I mounted the sdcard on my Ubuntu system and used gparted to break
off 2 gigs to use for Debian. Make sure you keep the normal android
sdcard partition as the first partition otherwise android
will not be able to find it.
If you're using apps to SD or anything else like that. Debian should
probably have the last partition. I'm not 100% sure on this since I
don't use my sdcard for anything else.

2. Format the new partition.
ext2 is probably best. (least abusive on the sdcard. ext3 & 4 have
journaling which may be bad for the life of your sdcard)
I used Gparted for this part as well.

3. If you are installing from an Ubuntu or Debian desktop, install debootstrap
Code:
$ sudo apt-get install debootstrap
Users of other distros may be able to get debootstrap but I'm not sure.

4. Mount the sdcard on your desktop.
anywhere will do just remember where you put it :p
ex.
Code:
$ mount /dev/sde2 /mnt/android

5. debootstrap
run debootstrap
you can change to a mirror closer to you if you don't want to use the
US mirror - http://www.debian.org/misc/README.mirrors
I'm using the Debian testing release (squeeze). I had issues getting
X11 running in lenny, and have not tested sid.
(lenny is stable, squeeze is testing, and sid is unstable)
http://www.debian.org/releases/

debootstrap --arch armel --foreign <release> </path/to/debian> <mirror>
ex:
Code:
# debootstrap --arch armel --foreign squeeze /mnt/android http://ftp.us.debian.org/debian

6. debootstrap(part2)
Unmount the sdcard from your desktop.
Reboot the phone here since you've been mucking with the sdcard
file system. Android didn't like my sdcard until I did.

Code:
$ adb shell

mount the sdcard somewhere on the android file system.
look in /dev/block for the sdcard.
Typically mmcblk0p# where # is the partition number.
*note* the directory I use to mount mine does not exist under normal android.
If this is your first time you will need to create the directory.
Code:
mkdir -p /data/local/mnt
ex.
Code:
# mount -t ext2 /dev/block/mmcblk0p2 /data/local/mnt

chroot/debootstrap

Code:
# export PATH=/usr/bin:/usr/sbin:/bin:$PATH
# chroot /data/local/mnt/ /debootstrap/debootstrap --second-stage
this will take a while especially if you have a slower sdcard.

6. While that's working, now is a good time to get to work on your kernel
I used the open source android kernel 2.6.29
http://android.git.kernel.org/
Started with mahimahi_defconfig and starting customizing from there.
Things to note.
- file systems - don't forget to add support for whatever file systems
you need. Your root file system support cannot be built as a module.
- wireless driver config - You may want to change the location the
kernel looks for your wifi firmware (this is different from the
kernel module).
I stuck mine in /etc/firmware, default is /system/etc/firmware.
If you don't change this, you will have to put the firmware
in /system/etc/firmware
- wireless - Add in support for standard wifi extensions.
- networking - standard tcp/ip stuff... iptables if you want ect...
- I wasn't able to get the kernel to boot into Debian until I turned
off initramfs support.
(note. this was before I discovered the 'noinitrd' kernel
kernel cmdline option. So disabling initrd may not be required)
- If for some reason you are using ext4, it will fail to mount unless
you add in large devices and files support
- Default kernel command string - has no effect.
This gets overwritten when you boot with fastboot or make a boot.img
- Drivers - I left all the normal android drivers in.
-Changed the firmware path for wifi.
-Added in support for virtual terminal under character devices
-Enabled MSM serial support (if you don't have a serial cable
this is useless to you)
-You can build the wifi driver into the kernel if you want.

Link to the kernel config I used. Use at your own risk.
It works for me but I can't promise it's perfect or even good.
http://irregular-expression.com/tmp/config
I would love input on building a better kernel config.
If you don't want to build your own kernel, feel free to use mine http://irregular-expression.com/tmp/zImage


7. Chroot and configure Debian.
There are still some things that need configuring before we reboot into
Debian. Since fbconsole does not appear to be working, if you don't
have a serial cable you will be flying blind until Debian is fully
booted and you can connect with ssh. Since there are still things to do
before we reboot, we're going to chroot into Debian just like if we are
using a Debian chroot image.

For more information and examples of config files.
http://www.debian.org/releases/stable/arm/apds03.html.en

It's probably best to use wifi for your data on the phone for this.
If you're on Linux and connected to the same router as the phone, copy
over your resolv.conf

Code:
$ adb push /etc/resolv.conf /data/local/mnt/etc/resolv.conf

If you are not in Linux or are not connected to wifi you will need to
set up resolv.conf with something sane.

ex. from jay freeman's original Debian chroot.
Code:
$ echo 'nameserver 4.2.2.2' > /data/local/mnt/etc/resolv.conf

push wifi driver to the device
First we need to create a couple directories. Log into the phone with adb shell
Code:
$ adb shell
# mkdir -p /data/local/mnt/etc/firmware
# mkdir -p /data/local/mnt/lib/modules/2.6.29-droid-debian/kernel/drivers/bcm4329
# exit

Upload wifi kernel module and firmware. If you're using my prebuilt kernel, grab this one. http://irregular-expression.com/tmp/bcm4329.ko
Code:
$ adb push <kernelroot>/drivers/net/wireless/bcm4329/bcm4329.ko /data/local/mnt/lib/modules/2.6.29-droid-debian/kernel/drivers/bcm4329/

copy /system/etc/firmware/fw_bcm4329.bin to wherever you
specified in the kernel config.

Code:
# cp /system/etc/firmware/fw_bcm4329.bin /data/local/mnt/etc/firmware/

Setup environment variables, copy over adbd, and other stuff needed to
make things work. This should all be run from within an adb shell

Code:
# cp /sbin/adbd /data/local/mnt/sbin/adbd
# sysctl -w net.ipv4.ip_forward=1
# export PATH=/usr/bin:/usr/sbin:/bin:$PATH
# export TERM=linux
# export HOME=/root

Next chroot and setup mount points

Code:
# chroot /data/local/mnt /bin/bash
# mount -t devpts devpts /dev/pts
# mount -t proc proc /proc
# mount -t sysfs sysfs /sys

Welcome to Debian chroot that we all know and love.
Lets finish configuring this thing.

Configure adbd to run on boot and create a symlink so adbd can find bash.

Edit /etc/rc.local. Add adbd before exit 0

#add this to /etc/rc.local
Code:
/sbin/adbd &

Code:
# mkdir -p /system/bin/
# ln -s /bin/bash /system/bin/sh

Now we need to be able to install packages
don't forget if you are not using squeeze to change it here

Code:
# echo 'deb [url]http://ftp.us.debian.org/debian[/url] squeeze main' >> /etc/apt/sources.list
# apt-get update

You should see aptitude updating it's package list.

Install some needed packages

Code:
# apt-get install wpasupplicant wireless-tools udev ssh

Other packages
All up to your choice. Things like text editors, X, ect...
some suggested packages

Code:
# apt-get install locales vi

Wifi driver
When you try to load the wifi module, Linux will complain about not
being able to parse modprobe.d. To fix this run depmod. If it complains
a directory doesn't exist then create it.

Code:
# depmod -a

Edit /etc/modules and add the bcm4329 module

Code:
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.
bcm4329

Setup fstab - critical: don't forget to configure the root file system
or your system won't boot. If you like, mount your vfat sdcard partition
here too. Don't forget to mkdir for the mount point.
*note* after boot the memory card is located at /dev/mmcblk0p#.

Here is my /etc/fstab

Code:
# /etc/fstab: static file system information.
#
# file system    mount point   type    options     dump pass

/dev/mmcblk0p2 / ext2 defaults 1 1
proc /proc proc defaults 0 0
/dev/mmcblk0p1 /media/sdcard vfat defaults 0 0

configure network
These two files will be tuned to what you need.
Here are a couple examples.

/etc/network/interfaces

Code:
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
wpa-driver wext
wpa-conf /etc/wpa_supplicant.conf

/etc/wpa_supplicant.conf

Code:
ctrl_interface=/var/run/wpa_supplicant

network={
ssid="myOpenNetwork"
scan_ssid=1
key_mgmt=NONE
}
network={
ssid="MyHomeNetwork"
scan_ssid=1
key_mgmt=WPA-PSK
psk="MyWifiPassword"
}
network={
ssid="MyFriendsWifi"
scan_ssid=1
key_mgmt=WPA-PSK
psk="MyFriendsWifiPassword"
}

SSH
If you want ssh to start on boot run this command.
*note* You will probably want to set a static IP address if you plan on accessing debian through ssh.
Code:
# update-rc.d ssh defaults

inittab
no need for getty so comment it out in /etc/inittab
if you have a serial cable, configure it here. something like this.
Code:
T0:23:respawn:/sbin/getty -L ttyMSM0 115200 linux

hostname
configure your system's hostname - you can set this to whatever you like
Code:
# echo DebianHostName > /etc/hostname

Set root password
Code:
# passwd
# useradd -m -G audio,dialout,floppy,video,staff username
Add user account
Code:
# useradd -m -G audio,dialout,floppy,video,staff yourusername -s /bin/bash
# passwd yourusername

8. Almost there!
Double check your configs and have your kernel handy.
The next step is to boot into Debian.

9. Boot Debian
put the device into fastboot mode
Code:
$ adb reboot bootloader
the '-c' flag specifies arguments to pass to the kernel for boot.
This is probably the bare minimum.

Format is "fastboot -c 'kernelcmdline' boot zImage"

Code:
$ fastboot -c 'root=/dev/mmcblk0p2 rw rootfs=ext2 init=/sbin/init rootwait noinitrd' boot zImage
Wait just a few minutes. DHCP is probably the longest part of this.

10. Connect via ADB.
If everything went well you should be able to log into the
phone via adb. adb push and pull work as well.

Code:
$ adb shell

11. Install X11
For a basic X11 install. This is probably not what you want.
Code:
# apt-get install xserver-xorg

You can install whatever window manager/desktop environment you like,
I used XFCE. Most window managers likely depend on xserver-xorg so it
will get pulled in when you install.

Code:
# apt-get install xfce4

After I installed xfce4 I was able to get X on the main display by
simply running startxfce4

Code:
# startxfce4

By default Debian is configured to only allow root to startx.
If you want to be able to run X as a user edit /etc/X11/Xwrapper.config
*note* even with this I haven't been able to run X as a normal user.
Only root.

Change
Code:
        allowed_users=console
to
Code:
        allowed_users=anybody
Currently touchscreen is a little weird. It feels almost like using a
laptop touchpad. The mouse moves much faster then your finger and tapping for
click isn't enabled by default but two finger tap will right click. You can
also move the mouse with the trackball. Clicking the trackball registers a
click. But you have to wiggle the trackball just a tiny bit after you click to
make it register. I am going to work on tweaking the fdi policy files to
make things a little more usable.

Text entry is a bit of a pain point currently. There are several on screen
keyboards out there. One interesting one I found is called cellwriter.
The touchscreen will need to be tweaked before it will work well with
onscreen keyboards.

For other ideas on window managers and other software check out this link
http://wiki.openmoko.org/wiki/Debian
 
Last edited:

jjkwasnik

Member
Dec 4, 2009
22
0
Providence
@jairuncaloth

I was just reading about how you got debian + x11 working on your nexus. I think thats awsome how you got a fully oprerational linux OS on your phone. I just had a few questions on how everything worked.

You were saying it doesn't mess with the default android OS, is there like a duel boot option to chose what OS i want to boot into. I was reading on how you have to start an ssh session to get into debian, and was just currious on some more info. I would be intrested in trying this out some time after i did a little more reading to get a better understanding of how everything was working.

If this wasn't working out after i installed, is it a pain to remove.

Thanks,
Justin
 

enomther

Senior Member
Jun 12, 2009
3,437
146
Nice post, appreciate the thoroughness.

I'm going to pour through this when I get some free time. :) Whenever that is :D

Thanks!

~enom~
 

jairuncaloth

Senior Member
Dec 27, 2008
147
5
Atlanta
irregular-expression.com
@jairuncaloth

I was just reading about how you got debian + x11 working on your nexus. I think thats awsome how you got a fully oprerational linux OS on your phone. I just had a few questions on how everything worked.

You were saying it doesn't mess with the default android OS, is there like a duel boot option to chose what OS i want to boot into. I was reading on how you have to start an ssh session to get into debian, and was just currious on some more info. I would be intrested in trying this out some time after i did a little more reading to get a better understanding of how everything was working.

If this wasn't working out after i installed, is it a pain to remove.

Thanks,
Justin

Hey Justin. The reason it doesn't mess with the default android OS is when you boot, you're booting with a kernel image living on your desktop/laptop's hard disk. fastboot allows you to boot images without acctually flashing them to your phone. Debian lives on the SDcard so no flashing required.

You can also use adb to connect to debian now. It's as simple as copying over the binary from android.

Removing is as simple as rebooting. When you reboot it will be like debian was never there.
 

dahui9

Senior Member
Jun 14, 2007
309
5
Cocoa/Tressure Coast
now my question is can those devs good with the linux kernel use this to hack into the android OS and unlock the security on the device without bricking the phone? ;)

-Charlie
 

jjkwasnik

Member
Dec 4, 2009
22
0
Providence
@jairuncaloth

I understand what you mean, i have used fast boot a few times. I know how to use it, just haven't used it a lot. So with using fast boot, once Debian is booted can you disconnect the usb cable. Is the kernel copied in RAM, or does it still need to talk to the kernel that resides on the PC?

I like where you are going with this, i am experienced with Linux. Not super advanced, but i know more then i think i do sometimes. I would like to try this out sometime to, but i'm very busy with work and the little free time i have gets spent before i know it. So knowing a little about it before i get my feet wet, always helps.

Thanks!!
 

iamwhoamnot

Senior Member
Feb 8, 2010
68
0
this is so cool, i was trying to get the chroot version to run on my nexus one the other day like i had it on my g1 but it was giving me trouble so i gave up. if proper support for the radio and the touchscreen/keyboard is created this would truly be monumental.

kudos for you man awesome job!
 

jairuncaloth

Senior Member
Dec 27, 2008
147
5
Atlanta
irregular-expression.com
@jairuncaloth

I understand what you mean, i have used fast boot a few times. I know how to use it, just haven't used it a lot. So with using fast boot, once Debian is booted can you disconnect the usb cable. Is the kernel copied in RAM, or does it still need to talk to the kernel that resides on the PC?

I like where you are going with this, i am experienced with Linux. Not super advanced, but i know more then i think i do sometimes. I would like to try this out sometime to, but i'm very busy with work and the little free time i have gets spent before i know it. So knowing a little about it before i get my feet wet, always helps.

Thanks!!

Should look something like this after you run the fastboot boot command

creating boot image...
creating boot image - 2240512 bytes
downloading 'boot.img'... OKAY
booting... OKAY

At this point it's safe to pull the usb cable. If you are using adb to connect, you'll still want it though :p
 

jairuncaloth

Senior Member
Dec 27, 2008
147
5
Atlanta
irregular-expression.com
I got the code aurora X driver to build last night. I ended up building it in debian on the phone. I couldn't get it to build against AOSP kernel headers, but it does build with the code aurora kernel headers. X won't start when you tell it to use the driver. I suspect this is because I built the driver against a different kernel then the one the system is booting on. I have not been able to get the code aurora kernel to boot yet, but I'm working on it to see if X will start with this driver and the CA kernel.

Also, I've uploaded the kernel I've been using to my blog. In case someone wants to play with this, but doesn't want to build a kernel.

http://irregular-expression.com/tmp/zImage
 

babijoee

Retired Forum Moderator
Dec 7, 2008
1,548
163
Melbourne
Can anyone post any vids for this?
Would love to have a look at this and then maybe i'll have a try at it afterwards :)
 

tizzl10

Senior Member
Feb 11, 2010
73
0
looks interesting, but scary to a new guy like me..im sure i will try it though..continue the work on streamlining the process !
 

swetland

Senior Member
Jan 7, 2010
103
44
Mountain View, CA
android.com
One thing you could do, if you don't mind nuking the recovery partition, is flash your debian boot image to recovery -- then you can reboot into debian with "reboot recovery" from an android root shell, or by entering the bootloader and selecting recovery.
 

jjkwasnik

Member
Dec 4, 2009
22
0
Providence
@jairuncaloth

I love the pics man!!!

I just came up with another question with running Debian, is there any software to still make phone calls through your cell provider? Or do you just have to reboot back into android?
 

Top Liked Posts

  • There are no posts matching your filters.
  • 2
    Booting Debian with X11 on the Google NexusOne
    This howto can also be found on my blog.
    http://www.irregular-expression.com/?p=30
    Screenshots here
    http://picasaweb.google.com/JairunCaloth/Debian?feat=directlink

    This is a method to boot into Debian via fastboot on the nexus one from
    your SD-card. This is NOT a chroot Debian image, it is honest to goodness
    Debian running directly on the hardware. This is completely non destructive to
    the android OS. Connectivity to the device can be provided by adbd, ssh, or
    serial console. Wifi works perfectly. I have not tested bluetooth. Touchscreen
    works, but needs tweaking. X11 works in framebuffer using the Debian
    testing branch (squeeze). In order to get a full fledged X driver with
    3D acceleration we'll need the driver from
    https://www.codeaurora.org/index.php?xwinp which I haven't been able to get
    to build. This doesn't mean it's broken. It just means I suck
    at cross compiling ;).

    Todo:
    -Tweak settings to make X more usable.
    -Find out how to use the soft keys.
    -Get the CodeAurora MSM/QSD X driver working.
    -Find decent method to input text.
    -Test bluetooth
    -Look into using the GSM radio.
    -Audio
    -Figure out how to configure adbd.
    -Get someone who knows C and wants to hack on the recovery image to enable booting debian from there.

    This how-to pulls heavily from the debian-arm install guide.
    http://www.debian.org/releases/stable/arm/index.html.en

    Requirements:
    adb (android-sdk)
    fastboot
    chroot (on your phone)
    sdcard with room for Debian - 2gigs seems to be sufficient for Debian + xfce.
    I Had about a gig leftover. For this guide, I'm starting fresh with a 4GB sdcard
    that I'm devoting completely to Debian. According to the Debian install guide,
    you need at least 32MB of memory and 500MB of hard disk space. The guide
    recommends at least 5GB of storage for a comfortable install. But since I'm
    using the lighter XFCE4 desktop I haven't had any space issues.
    http://www.debian.org/releases/stable/arm/ch03s04.html.en


    1. Re size the SD card
    (don't forget to backup your data before you go messing with partition tables!!)
    (optional) Instead of using a partition on your main SD card, you could
    simply use another sdcard and dedicate the entire thing to Debian.
    Note: android didn't like me very much when I did this. I put in a
    tiny (30MB) vfat partition right at the beginning of the blank sdcard
    I mounted the sdcard on my Ubuntu system and used gparted to break
    off 2 gigs to use for Debian. Make sure you keep the normal android
    sdcard partition as the first partition otherwise android
    will not be able to find it.
    If you're using apps to SD or anything else like that. Debian should
    probably have the last partition. I'm not 100% sure on this since I
    don't use my sdcard for anything else.

    2. Format the new partition.
    ext2 is probably best. (least abusive on the sdcard. ext3 & 4 have
    journaling which may be bad for the life of your sdcard)
    I used Gparted for this part as well.

    3. If you are installing from an Ubuntu or Debian desktop, install debootstrap
    Code:
    $ sudo apt-get install debootstrap
    Users of other distros may be able to get debootstrap but I'm not sure.

    4. Mount the sdcard on your desktop.
    anywhere will do just remember where you put it :p
    ex.
    Code:
    $ mount /dev/sde2 /mnt/android

    5. debootstrap
    run debootstrap
    you can change to a mirror closer to you if you don't want to use the
    US mirror - http://www.debian.org/misc/README.mirrors
    I'm using the Debian testing release (squeeze). I had issues getting
    X11 running in lenny, and have not tested sid.
    (lenny is stable, squeeze is testing, and sid is unstable)
    http://www.debian.org/releases/

    debootstrap --arch armel --foreign <release> </path/to/debian> <mirror>
    ex:
    Code:
    # debootstrap --arch armel --foreign squeeze /mnt/android http://ftp.us.debian.org/debian

    6. debootstrap(part2)
    Unmount the sdcard from your desktop.
    Reboot the phone here since you've been mucking with the sdcard
    file system. Android didn't like my sdcard until I did.

    Code:
    $ adb shell

    mount the sdcard somewhere on the android file system.
    look in /dev/block for the sdcard.
    Typically mmcblk0p# where # is the partition number.
    *note* the directory I use to mount mine does not exist under normal android.
    If this is your first time you will need to create the directory.
    Code:
    mkdir -p /data/local/mnt
    ex.
    Code:
    # mount -t ext2 /dev/block/mmcblk0p2 /data/local/mnt

    chroot/debootstrap

    Code:
    # export PATH=/usr/bin:/usr/sbin:/bin:$PATH
    # chroot /data/local/mnt/ /debootstrap/debootstrap --second-stage
    this will take a while especially if you have a slower sdcard.

    6. While that's working, now is a good time to get to work on your kernel
    I used the open source android kernel 2.6.29
    http://android.git.kernel.org/
    Started with mahimahi_defconfig and starting customizing from there.
    Things to note.
    - file systems - don't forget to add support for whatever file systems
    you need. Your root file system support cannot be built as a module.
    - wireless driver config - You may want to change the location the
    kernel looks for your wifi firmware (this is different from the
    kernel module).
    I stuck mine in /etc/firmware, default is /system/etc/firmware.
    If you don't change this, you will have to put the firmware
    in /system/etc/firmware
    - wireless - Add in support for standard wifi extensions.
    - networking - standard tcp/ip stuff... iptables if you want ect...
    - I wasn't able to get the kernel to boot into Debian until I turned
    off initramfs support.
    (note. this was before I discovered the 'noinitrd' kernel
    kernel cmdline option. So disabling initrd may not be required)
    - If for some reason you are using ext4, it will fail to mount unless
    you add in large devices and files support
    - Default kernel command string - has no effect.
    This gets overwritten when you boot with fastboot or make a boot.img
    - Drivers - I left all the normal android drivers in.
    -Changed the firmware path for wifi.
    -Added in support for virtual terminal under character devices
    -Enabled MSM serial support (if you don't have a serial cable
    this is useless to you)
    -You can build the wifi driver into the kernel if you want.

    Link to the kernel config I used. Use at your own risk.
    It works for me but I can't promise it's perfect or even good.
    http://irregular-expression.com/tmp/config
    I would love input on building a better kernel config.
    If you don't want to build your own kernel, feel free to use mine http://irregular-expression.com/tmp/zImage


    7. Chroot and configure Debian.
    There are still some things that need configuring before we reboot into
    Debian. Since fbconsole does not appear to be working, if you don't
    have a serial cable you will be flying blind until Debian is fully
    booted and you can connect with ssh. Since there are still things to do
    before we reboot, we're going to chroot into Debian just like if we are
    using a Debian chroot image.

    For more information and examples of config files.
    http://www.debian.org/releases/stable/arm/apds03.html.en

    It's probably best to use wifi for your data on the phone for this.
    If you're on Linux and connected to the same router as the phone, copy
    over your resolv.conf

    Code:
    $ adb push /etc/resolv.conf /data/local/mnt/etc/resolv.conf

    If you are not in Linux or are not connected to wifi you will need to
    set up resolv.conf with something sane.

    ex. from jay freeman's original Debian chroot.
    Code:
    $ echo 'nameserver 4.2.2.2' > /data/local/mnt/etc/resolv.conf

    push wifi driver to the device
    First we need to create a couple directories. Log into the phone with adb shell
    Code:
    $ adb shell
    # mkdir -p /data/local/mnt/etc/firmware
    # mkdir -p /data/local/mnt/lib/modules/2.6.29-droid-debian/kernel/drivers/bcm4329
    # exit

    Upload wifi kernel module and firmware. If you're using my prebuilt kernel, grab this one. http://irregular-expression.com/tmp/bcm4329.ko
    Code:
    $ adb push <kernelroot>/drivers/net/wireless/bcm4329/bcm4329.ko /data/local/mnt/lib/modules/2.6.29-droid-debian/kernel/drivers/bcm4329/

    copy /system/etc/firmware/fw_bcm4329.bin to wherever you
    specified in the kernel config.

    Code:
    # cp /system/etc/firmware/fw_bcm4329.bin /data/local/mnt/etc/firmware/

    Setup environment variables, copy over adbd, and other stuff needed to
    make things work. This should all be run from within an adb shell

    Code:
    # cp /sbin/adbd /data/local/mnt/sbin/adbd
    # sysctl -w net.ipv4.ip_forward=1
    # export PATH=/usr/bin:/usr/sbin:/bin:$PATH
    # export TERM=linux
    # export HOME=/root

    Next chroot and setup mount points

    Code:
    # chroot /data/local/mnt /bin/bash
    # mount -t devpts devpts /dev/pts
    # mount -t proc proc /proc
    # mount -t sysfs sysfs /sys

    Welcome to Debian chroot that we all know and love.
    Lets finish configuring this thing.

    Configure adbd to run on boot and create a symlink so adbd can find bash.

    Edit /etc/rc.local. Add adbd before exit 0

    #add this to /etc/rc.local
    Code:
    /sbin/adbd &

    Code:
    # mkdir -p /system/bin/
    # ln -s /bin/bash /system/bin/sh

    Now we need to be able to install packages
    don't forget if you are not using squeeze to change it here

    Code:
    # echo 'deb [url]http://ftp.us.debian.org/debian[/url] squeeze main' >> /etc/apt/sources.list
    # apt-get update

    You should see aptitude updating it's package list.

    Install some needed packages

    Code:
    # apt-get install wpasupplicant wireless-tools udev ssh

    Other packages
    All up to your choice. Things like text editors, X, ect...
    some suggested packages

    Code:
    # apt-get install locales vi

    Wifi driver
    When you try to load the wifi module, Linux will complain about not
    being able to parse modprobe.d. To fix this run depmod. If it complains
    a directory doesn't exist then create it.

    Code:
    # depmod -a

    Edit /etc/modules and add the bcm4329 module

    Code:
    # /etc/modules: kernel modules to load at boot time.
    #
    # This file contains the names of kernel modules that should be loaded
    # at boot time, one per line. Lines beginning with "#" are ignored.
    # Parameters can be specified after the module name.
    bcm4329

    Setup fstab - critical: don't forget to configure the root file system
    or your system won't boot. If you like, mount your vfat sdcard partition
    here too. Don't forget to mkdir for the mount point.
    *note* after boot the memory card is located at /dev/mmcblk0p#.

    Here is my /etc/fstab

    Code:
    # /etc/fstab: static file system information.
    #
    # file system    mount point   type    options     dump pass
    
    /dev/mmcblk0p2 / ext2 defaults 1 1
    proc /proc proc defaults 0 0
    /dev/mmcblk0p1 /media/sdcard vfat defaults 0 0

    configure network
    These two files will be tuned to what you need.
    Here are a couple examples.

    /etc/network/interfaces

    Code:
    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet dhcp
    wpa-driver wext
    wpa-conf /etc/wpa_supplicant.conf

    /etc/wpa_supplicant.conf

    Code:
    ctrl_interface=/var/run/wpa_supplicant
    
    network={
    ssid="myOpenNetwork"
    scan_ssid=1
    key_mgmt=NONE
    }
    network={
    ssid="MyHomeNetwork"
    scan_ssid=1
    key_mgmt=WPA-PSK
    psk="MyWifiPassword"
    }
    network={
    ssid="MyFriendsWifi"
    scan_ssid=1
    key_mgmt=WPA-PSK
    psk="MyFriendsWifiPassword"
    }

    SSH
    If you want ssh to start on boot run this command.
    *note* You will probably want to set a static IP address if you plan on accessing debian through ssh.
    Code:
    # update-rc.d ssh defaults

    inittab
    no need for getty so comment it out in /etc/inittab
    if you have a serial cable, configure it here. something like this.
    Code:
    T0:23:respawn:/sbin/getty -L ttyMSM0 115200 linux

    hostname
    configure your system's hostname - you can set this to whatever you like
    Code:
    # echo DebianHostName > /etc/hostname

    Set root password
    Code:
    # passwd
    # useradd -m -G audio,dialout,floppy,video,staff username
    Add user account
    Code:
    # useradd -m -G audio,dialout,floppy,video,staff yourusername -s /bin/bash
    # passwd yourusername

    8. Almost there!
    Double check your configs and have your kernel handy.
    The next step is to boot into Debian.

    9. Boot Debian
    put the device into fastboot mode
    Code:
    $ adb reboot bootloader
    the '-c' flag specifies arguments to pass to the kernel for boot.
    This is probably the bare minimum.

    Format is "fastboot -c 'kernelcmdline' boot zImage"

    Code:
    $ fastboot -c 'root=/dev/mmcblk0p2 rw rootfs=ext2 init=/sbin/init rootwait noinitrd' boot zImage
    Wait just a few minutes. DHCP is probably the longest part of this.

    10. Connect via ADB.
    If everything went well you should be able to log into the
    phone via adb. adb push and pull work as well.

    Code:
    $ adb shell

    11. Install X11
    For a basic X11 install. This is probably not what you want.
    Code:
    # apt-get install xserver-xorg

    You can install whatever window manager/desktop environment you like,
    I used XFCE. Most window managers likely depend on xserver-xorg so it
    will get pulled in when you install.

    Code:
    # apt-get install xfce4

    After I installed xfce4 I was able to get X on the main display by
    simply running startxfce4

    Code:
    # startxfce4

    By default Debian is configured to only allow root to startx.
    If you want to be able to run X as a user edit /etc/X11/Xwrapper.config
    *note* even with this I haven't been able to run X as a normal user.
    Only root.

    Change
    Code:
            allowed_users=console
    to
    Code:
            allowed_users=anybody
    Currently touchscreen is a little weird. It feels almost like using a
    laptop touchpad. The mouse moves much faster then your finger and tapping for
    click isn't enabled by default but two finger tap will right click. You can
    also move the mouse with the trackball. Clicking the trackball registers a
    click. But you have to wiggle the trackball just a tiny bit after you click to
    make it register. I am going to work on tweaking the fdi policy files to
    make things a little more usable.

    Text entry is a bit of a pain point currently. There are several on screen
    keyboards out there. One interesting one I found is called cellwriter.
    The touchscreen will need to be tweaked before it will work well with
    onscreen keyboards.

    For other ideas on window managers and other software check out this link
    http://wiki.openmoko.org/wiki/Debian