Read this if you want to know how I ported Gentoo and/or want to do it yourself.
First I tried using existing arm OABI stages. Two problems. You'll immediately hit #462677. That can possibly be fixed by using kernel >=2.6.25. However one of my goals is minimal intervention in device preinstalled software (initfs, kernel, maemo image). Second: although Gentoo has some documented way of changing CHOST, I don't believe it is possible to perform OABI→EABI migration. Correct me if I'm wrong.
Another interesting approach is to convert maemo image into Gentoo using bootstrap-portage script.
Alternatively, Gentoo could be built from scratch using LFS approach. However this may be hard because of busybox. Actually I managed to build full GNU stack (coreutils, diffutils, etc) to /usr/local on vanilla maemo.
Anyway, I chose cross-compilation.
Install cross-development tools:
emerge crossdev crossdev-wrappers
Build cross-toolchain:
crossdev -S armv6j-unknown-linux-gnueabi
Create convenient cross-portage infrastructure:
emerge-wrapper --init
Change profile from busybox to fully-powered GNU utils:
rm /usr/armv6j-unknown-linux-gnueabi/etc/make.profile ln -s /usr/portage/profiles/default/linux/arm/10.0/ /usr/armv6j-unknown-linux-gnueabi/etc/make.profile
Tweak make.conf:
nano /usr/armv6j-unknown-linux-gnueabi/etc/make.conf
My tweaks:
Try to cross-build mininal system (I hope it will pass successfully one day):
emerge-armv6j-unknown-linux-gnueabi -vND system
Los of stuff builds, but libperl fails. It won't build. At all. Even don't try. Emerge all remaining packages that don't depend on libperl with –oneshot.
So. We have minimal gentoo system (without perl).
From your tablet:
Transfer gentoo from build machine:
cd /path/to/gentoo/chroot &&\ ssh root@<gentoo_host_address> 'cd /usr/armv6j-unknown-linux-gnueabi && tar -czp * -O -' | tar -xvzp
Mount misc system stuff into chroot:
cd /path/to/gentoo/chroot &&\ mount -t proc proc proc &&\ mount -o bind /dev dev &&\ cp -L /etc/resolv.conf etc/resolv.conf
Enter chroot:
chroot /path/to/gentoo/chroot /bin/bash
Wooo-haaa! You're inside your n8x0 gentoo installation!
Remove cross-build related stuff from make.conf (see CFLAGS page):
cat > /etc/make.conf << 'EOF'
CHOST='armv6j-unknown-linux-gnueabi'
CFLAGS='-Os -pipe -march=armv6j -mtune=arm1136jf-s -mfpu=vfp'
CXXFLAGS='${CFLAGS}'
USE='-* zlib minimal unicode ncurses'
EOF
Sync portage tree:
emerge --sync
Build missing stuff from 'system':
emerge -v1 automake
Check that all 'system' built:
emerge -vuND system
Rebuild bash (I got strange failures without this):
emerge -v1 bash
Tweak USE flags in make.conf. I set USE='-ipv6 -fortran'
Reemerge natively gcc/glibc (~15 hours using 'performance' cpu governor). Do not forget to plug in battery charger.
Rebuild natively whole world.
emerge -ve system
Profit! You have fully-functional native arm gentoo chroot.