[Epic 4G Android Development] DrGit:
I got Ubuntu 13.04 to boot cleanly on my Epic! No chroot or VNC hacks involved!

This method loads a custom kernel using kexec and runs off a microSD card.

Check the end of the post for the kernel config and patches, xorg.conf, /etc/modules, the kexec zip, and a pre-built kernel.

I may eventually provide a pre-built root filesystem, but for now it's easy enough to build your own.

For the technically inclined, Debian, Arch Linux, MeeGo/Mer/Nemo/Tizen, Fedora, Gentoo, Slackware, and a few other distros should also work with this method.

Working as of March 30, 2013:

* Touchscreen, 10-point multitouch!

* Unaccelerated X11 with fbdev, framebuffer console disabled for cleaner boot.

* Charging, battery meter

* WiFi

* Sound! NB, the hack I used to get it working disables the codec shutdown sequence, which could affect battery life and prevent the phone from sleeping.

Partially working:

* Keyboard (incomplete layout; not sure what to do with Fn/3rd level key mapping)

* Cameras (recognized as V4L2 devices but VLC complains with "invalid pixel format" so the drivers probably need fixing)

* Sensors/autorotate (sensors recognized in kernel/X11/SDL, I'm working on auto rotation)

Not tested:

* Bluetooth

* GPS

* Calls/data: https://github.com/morphis/libsamsung-ipc

Step by step guide!

PREREQUISITES:

* An Epic 4G with a custom recovery and a microSD card. 2GB free space on the card recommended.

* A Linux computer. Sorry, Windows/Mac users, you're on your own.

Step 0: Get the files you need

Extract the contents of linux_epicmtd.zip to a new folder somewhere and change to that folder in your terminal.

Step 1: Partition your SD card

Please backup of the contents of your SD card before doing anything else.

You can do this by mounting USB storage, but I prefer to remove the card and put it in a USB card reader, that way it's harder to accidentally disconnect it and corrupt data.

What you want to do is shrink the FAT partition from a computer by 2GB and create a new ext2/4 partition out of that free space.

2GB should more than suffice for a minimal Ubuntu install, but if you intend to install Unity (ubuntu-desktop) or other big packages, you may need anywhere from 2GB to 4GB, or possibly more. Resize accordingly.

The following instructions assume the Linux partition you just created is labeled "Ubuntu" and the FAT partition you resized is labeled "microSD". If you don't label them, your mount points will be different.

Step 2: Install Ubuntu on the second partition

# Assumes your new Ubuntu partition is mounted at "/media/$USER/Ubuntu"
wget http://cdimage.ubuntu.com/ubuntu-core/daily/current/raring-core-armhf.tar.gz
tar xvf raring-core-armhf.tar.gz -C /media/$USER/Ubuntu

Step 3: Configure the filesystem

# to chroot into the ARM rootfs on a non-ARM computer:
sudo apt-get install qemu-user-static
sudo cp /usr/bin/qemu-arm-static /media/$USER/Ubuntu/usr/bin
sudo mount -o remount,dev /media/$USER/Ubuntu
sudo chroot /media/$USER/Ubuntu
# check /etc/apt/sources.list and make sure universe is enabled
apt-get update
apt-get dist-upgrade
# select your preferred desktop environment
apt-get install {k,x,l,}ubuntu-desktop e17 gnome-session-fallback plasma-active
adduser yournamehere
usermod -a -G audio yournamehere
passwd yournamehere
tzselect
# do anything else you want to do, exit the chroot, then run the following commands from your working folder:
sudo cp X11.txt to /media/$USER/Ubuntu/etc/X11/xorg.conf
sudo cp modules.txt /media/$USER/Ubuntu/etc/modules
adb pull /vendor/firmware/fw_bcmdhd.bin
adb pull /system/etc/wifi/nvram_net.txt
sudo cp fw_bcmdhd.bin nvram_net.txt /media/$USER/Ubuntu/lib/firmware

Step 4: Install the kernel, copy the kexec zip to your SD card, and boot!

Option 1: Use my pre-built kernel.

cp zImage /media/$USER/microSD
sudo tar xvf modules.tar.gz -C /media/$USER/Ubuntu
cp boot_zImage.zip /media/$USER/microSD

Option 2: Build the kernel from source.

sudo apt-get install build-essential git gcc-arm-linux-gnueabi libncurses5-dev
git clone git://github.com/CyanogenMod/android_kernel_samsung_epicmtd
cd android_kernel_samsung_epicmtd
git checkout cm-10.1
git apply ../linux_epicmtd.patch
export CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm
cp ../epicmtd_defconfig.txt .config
# make menuconfig if you want to enable the framebuffer console or customize anything
make -j8
sudo make modules_install INSTALL_MOD_PATH=/media/$USER/Ubuntu ARCH=arm
cp arch/arm/boot/zImage /media/$USER/microSD
cd ..
cp boot_zImage.zip /media/$USER/microSD

Reboot into recovery, install zip from sdcard, select boot_zImage.zip, and enjoy your new Ubuntu installation!