[Galaxy Note 10.1 General] X-Stranger:
How To install Linux to N80XX

Okay, below is my successfull story, which is still going on.

So, as the prerequisite you need to have Samsung Galaxy Note 10.1 rooted. You can do this anyhow described on the forum, I've used "Exynos Abuse" utility for that purpose.

The first step that I've done - got chrooted Linux distribution. The easyest wat is to install "Linux Deploy" program from Google Play, then select options you like. I've choosen the next:

distribution: ArchLinux (there are also Ubuntu, Debian, and a few more in the latest version)

version: latest

architecture: armv7h

mirror address: http://de.mirror.archlinuxarm.org

installation type: image file (this is important, because I wanted to later boot Linux using loopback device)

destination path: /sdcard/arch.img (internal emmc "sdcard")

image size: 4096 (in Mb, e.g. 4Gb - better this size, because later you might want to move it to your real sdcard)

filesystem: ext4

username: stranger

DNS-server: automatic detection

locale: en_US.UTF-8

desktop environment: LXDE (works fast when you don't have 3D acceleration or work via VNC)

install GUI: yes

SSH: yes

VNC: yes (no, if you don't want to work with your chrooted environment via VNC client)

other options: you might select as you like. Later I've added run of shell script, which was configuring a few things very useful for my chrooted Linux

As soon as you done with settings, get back and press "Download" button, then wait until downloading, installing, configuring is done. Voila! Now you can press "Play" button and work with your favorite distribution right from Android, or connect to it remotely from desktop. Just use proper VNC/SSH client. I was using VNC Viewer for VNC and ConnectBot for SSH.

All right, all this looks good, but how to get dualboot and run Linux natively? As you know, our device already has dual boot: regular Android and recovery. We'll just replace recovery with our Linux kernel (zImage) and initramfs (initrd.img), so they'll boot our Linux. For sure we can use the native Android kernel, but if you want to get for example CIFS filesystem support and working touchscreen - you need to compile your own kernel. For that purpose we need:

Linux distribution where we'll compile kernel. I prefer to do this in clean environment, so I've used Ubuntu in VirtualBox. You don't need to set up it from scratch, just download pre-ready Ubuntu image for VirtualBox from here: http://sourceforge.net/projects/virtualboximage/files/UbuntuServer/12.10/ubuntu-12.10-server-i386.7z (there are also other images ready for you, if you don't like Ubuntu: http://virtualboxes.org/images/)

GCC 4.4.3 cross-compiler for ARM. You can also download prebuilt Android toolchain from here: https://android.googlesource.com/platform/prebuilt (just clone this with Git client)

Samsung kernel sources: http://opensource.samsung.com/recep...earchValue=GT-N8000_JB_Opensource_Update1.zip (this archive contains 2 tar.gz files, we need the one with kernel)

I've unpacked all this to /opt folder:

/opt/linux - unpacked kernel sources

/opt/platform_prebuilt-master - prebuilt toolchain

You'll also need my kernel config and patch based on the config/patch ((fix for touchscreen and power button) provided by exception13 - I've just tuned it and added a few fixes for successfull compilation. Please find both files attached to this message. The file config.txt must be renamed to .config and moved to /opt/linux, n8000.patch must be applied to kernel sources (something like "cd /opt/linux && patch -s -p1 ../n8000.patch"). My kernel config uses the next kernel parameters: "root=/dev/loop0 ro rootfstype=ext4 rootwait quiet". E.g. it suggests to boot from loopback device, but you can change it to /dev/mmcblkXX, if you have already re-partitioned EMMC and installed Linux on separate partition (I'm have done this later). Any change to kernel config can be done using "make menuconfig" inside kernel sources folder. After you done, run this:

export ARCH=arm
export SUBARCH=armv7h
export CROSS_COMPILE=/opt/platform_prebuilt-master/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
cd /opt/linux
make -j2
make modules_install

After compilation is done, you can find brend new shining kernel image as /opt/linux/arch/arm/boot/zImage file, and modules in /lib/modules/3.0.31 folder. I've copied those files to my chrooted Linux using SCP (zImage to /boot and modules folder to /lib/modules), and all other things was doing here: started LinuxDeploy, pressed Play, logged in to Linux using SSH.

So, we have kernel, modules, but still need to built initrd.img and replace original recovery with ours. First we need to get original recovery image, because we'll just update it and write back. By the second, we want to keep copy in safe place, just in case:

dd if=/dev/block/mmcblk0p6 of=/boot/recovery.img
cp /boot/recovery.img /boot/recovery.img_orig

Preparing initrd.img depends on distribution you are working with. My ArchLinux has mkinitcpio utility, but as soon as I want it to boot from loopback device I did a few tricks based on the next HowTo: http://felixc.at/ArchLinux-loopback (I just needed /lib/initcpio/hooks/looproot file and /lib/initcpio/install/looproot, fixed /etc/mkinitcpio.conf by adding looproot to HOOKS, and properly changed /etc/fstab). Please note that internal sdcard is not ntfs or vfat, it is ext4, so the file looproot should be a bit different, and there is no need to include ntfs-3g or fuse into initrd. Also the path to arch.img file is /media/arch.img on /dev/mmcblk0p12 partition, so the looproot hook will look like this:

# vim:set ft=sh:
run_hook ()
{
# Now mount the host filesystem
mkdir /host
mount -t ext4 /dev/mmcblk0p12 /host -o defaults,noatime,acl,barrier=1,data=ordered

# And the loop filesystem
losetup /dev/loop0 /host/media/arch.img
mount -t ext4 /host/media/arch.img /new_root -o defaults,noatime,acl,barrier=1,data=ordered
mount --bind /host /new_root/mnt/sdcard
}

Then I've run:

cd /boot
mkinitcpio -k 3.0.31 -g initrd.img

Okay, right now a few other tricks :) Install abootimg utilities package (ArchLinux users can find them in AUR if I remember correcly). Then run "abootimg-unpack-initrd" in "/boot" folder, this will create "/boot/ramdisk" directory, go into it and edit "init" file commenting out ""$mount_handler" /new_root" line. Then run "abootimg-pack-initrd" in the same path and get initrd.img finally ready. To update recovery.img with our files and write it back to the system run:

cd /boot
abootimg -u recovery.img -k zImage -r initrd.img
dd if=/boot/recovery.img of=/dev/block/mmcblk0p6

Well done! Now, we are almost ready to reboot.

The last things: install Xorg + fbvev video driver + evdev input driver + some login manager ("lightdm" for example) + some onscreen keyboard (I would recommend "florence"). Configure login manager to autologin. Make /etc/X11/xorg.conf looking like this:

Section "ServerLayout"
Identifier "Layout0"
Screen "Screen0"
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Touchscreen0" "SendCoreEvents"
EndSection

Section "InputDevice"
Identifier "Keyboard0"
Driver "evdev"
Option "Device" "/dev/input/event0"
EndSection

Section "InputDevice"
Identifier "Mouse0"
Driver "evdev"
Option "Device" "/dev/input/event6"
Option "ButtonMapping" "1 3 0"
EndSection

Section "InputDevice"
Identifier "Touchscreen0"
Driver "evdev"
Option "Device" "/dev/input/event1"
Option "Calibration" "0 4096 0 4096"
EndSection

Section "Device"
Identifier "Card0"
Driver "fbdev"
Option "fbdev" "/dev/fb0"
VendorName "Unknown"
BoardName "Unknown"
EndSection

Section "Screen"
Identifier "Screen0"
Device "Card0"
DefaultDepth 24
EndSection

Section "DRI"
Mode 0666
EndSection

if all is okay, we can logout our chrooted system, press "pause" button in LinuxDeploy program and try to poweroff tablet. Press buttons "Volume-Up" and "Power", wait until Linux booting messages appear, and release buttons. If you've done all correctly, graphics should be started and LXDE too. Touchscreen must be working as touchscreen :), S-Pen as mouse, when tablet is idle for a long time and screen becomes dark - just press "Power" button.

If something is wrong - you can reboot your tablet to Android, login to chroot via LinuxDeploy and fix anything you need.

The next things we will do are: configure WiFi, Bluetooth, sound. And also will repartition emmc and move Linux to the internal native partition (optional). See my next messages...