BOOTING NOKIA N8X0 WITH CURRENT KERNEL, VERSION 2008-07-03
Here are some notes on how you can boot current linux-omap tree on your
Nokia N8X0. I've only tested this with N810, but most of it should apply
to N800 also.
As bunch of omap patches are not yet in the mainline kernel, linux-omap
is the closest thing to mainline kernel at this point. Some things won't
work, such as WLAN as there's currently no way to compile firmware for
it against the current kernels.
I'm using Debian sid created with debootstrap, but this should work for
basically any distro. I'm booting my kernel to internal MMC so I the
NAND flash contains untouched Maemo. To do this, just load the kernel
with flasher -k zImage-n8x0 -l -b instead of using -f so you don't overwrite
Here are things that would be nice to have in case somebody has time to
hack on them:
- Update system time from retu during boot
- Copy initfs to a directory and set up chroot scripts for starting
bluetooth and bsme individually
- Build xomap for Debian sid
- Build Maemo kernel with CONFIG_KEXEC so Maemo can load the kernel to
boot to MMC..
Here are few issues you may run into:
- External MMC card must be in the slot to keep the right order
- If ssh -Y or ssh -X to your N8X0 does not work, make sure target has
lo configured in /etc/network/interfaces. It should say:
iface lo inet loopback
Update: With the recent patches retu watchdog behaves like a regular
Linux /dev/watchdog. Following scripts are not needed any longer.
Retu watchdog must be kicked during init as it cannot be disabled.
This can be done with a shell script.
Create following script as /sbin/retu-wd:
mount -t sysfs sysfs /sys > /dev/null 2&>1
while [ 1 ]; do
echo 60 > /sys/devices/platform/retu-watchdog/period
And then create following as /etc/init.d/retu-watchdog:
case "$1" in
killall retu-wd > /dev/null 2>&1
Then make them executable:
# chmod a+x /sbin/retu-wd
# chmod a+x /etc/init.d/retu-watchdog
And start it up automatically:
# ln -s /etc/init.d/retu-watchdog /etc/rc1.d/S40retu-watchdog
# ln -s /etc/init.d/retu-watchdog /etc/rc2.d/S10retu-watchdog
If you want to see the watchdog counter value, you can do:
# cat /sys/devices/platform/retu-watchdog/counter
Power management works, but does not do voltage scaling like the Maemo kernel.
To enable hitting deep sleep state during idle, make sure your init script
enables it once during init:
# echo 1 > /sys/power/sleep_while_idle
As long as screen is blanked and USB cable is disconnected, N8X0 will hit
deep sleep during idle. You can blank the screen with:
# echo 3 > /sys/class/graphics/fb0/blank
BLUETOOTH AND BSME
First, copy the bluetooth firmware to the right location:
# cp /media/initfs/mnt/initfs/usr/lib/hotplug/firmware/*.bin /lib/firmware/
Then bluetooth will work after you set the hardware address during boot:
# chroot /media/initfs/ /linuxrc
# /etc/init.d/bluetooth restart
Note if using a serial jig, this seems to need system booted on
battery, and not using a power supply.
I think battery charging works if you run the linuxrc as noted
under bluetooth section..
You might want to have something like this in /etc/network/interfaces:
iface lo inet loopback
iface usb0 inet static
Then you'll probably want someting into your /etc/resolv.conf too.
Note that if using this same distro as chroot environment from Maemo,
you'll want to have nameserver 127.0.0.1 in /etc/resolv.conf. This
won't work with Debian though.
MOUTING NAND FLASH
# mkdir /media/initfs
# mkdir /media/rootfs
# mount -tjffs2 /dev/mtdblock3 /media/initfs
# mount -tjffs2 /dev/mtdblock4 /media/rootfs
KEYBOARD ON N810
Current patch series has a patch that makes the N810 keyboard to work
with console. Ideally the input layer would handle the sticky keys
instead of the driver.
Note that currently the 8250 serial port does not support clock management.
So if you have disabled serial clocks for better power management, and
try to access serial ports, you'll get "Unhandled fault: external abort on
linefetch" errors. This will get properly solved when we'll have an omap
specific serial driver that supports power management.
If you want to use a serial console, you need to remove the serial clock
patch, and add following to /etc/inittab:
T2:23:respawn:/sbin/getty -L ttyS1 115200 vt100
You may need to create the dev entry first when booting to
single user mode:
# mknod /dev/ttyS1 c 4 65
CURRENT PATCH SERIES
Here are the patches against current linux-omap tree (requires n810 flashed to diablo):
These older obsolete patches work only with pre-diablo bootloader: