N900

The Nokia N900 is a Linux based smartphone from Nokia, which has been released in November 2009. It's sold with Maemo using a patched 2.6.28 kernel (adding board support and lots of drivers). Since then board support has been added to the mainline kernel and most hardware can be used with a current kernel. Details can be seen in the table below.

Kernel Status
Colors:
 * Green = Available
 * Yellow = Work in Progress (WIP), for docs: no documentation, but kernel code available
 * Red = Missing
 * Gray = Deprecated
 * Cyan = Not Available (N/A)

Kernel git repository for N900
There is git repository for upstream linux kernel with all N900 patches.

https://gitorious.org/linux-n900/linux-n900

This git repository is used for development. All other git repositories on internet are older and does not contains all patches.

Kernel Compilation
export ARCH=arm export CROSS_COMPILE=arm-linux-gnueabi- make rx51_defconfig make zImage modules

DT Kernel Compilation
Make sure this is enabled in the kernel configuration:

CONFIG_ARM_APPENDED_DTB=y CONFIG_ARM_ATAG_DTB_COMPAT=y CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEND=y CONFIG_PINCTRL_SINGLE=y CONFIG_REGULATOR_TWL4030=y CONFIG_REGULATOR_FIXED_VOLTAGE=y

Compile Kernel, Modules and DTB file:

export ARCH=arm export CROSS_COMPILE=arm-linux-gnueabi- make zImage make modules make omap3-n900.dtb

Create combined kernel image by appending the DTB file:

cat arch/arm/boot/zImage arch/arm/boot/dts/omap3-n900.dtb > zImage

Install Modules:

make INSTALL_MOD_PATH=/mnt/target modules_install

Modem Status in Mainline Kernel
Missing drivers to have a working modem in the mainline kernel:
 * omap-ssi - the modem is attached via ssi, this driver adds support for the ssi hardware of the omap processor.
 * ssi-protocol - this adds support for the protocol used to to communicate with the modem (AKA McSAAB).
 * cmt-speech - this adds support for the protocol used to exchange peech data with the modem
 * cmt - this driver handles the modem's GPIO pins and is needed by ssi-protocol and cmt-speech.

sre is currently working on getting the modem supported in the mainline kernel. Basic modem support (= everything except cmt-speech) is expected to be ready for 3.14 or 3.15.

Bluetooth Status in Mainline Kernel
This is the TODO list to get the hci_h4p driver into the mainline kernel:

Use hdev->setup callback for firmware loading and initial setup Note 1: Since they are all HCI commands anyway, you can nicely use the sync interface we added for that Note 2: Example: btusb.c Review MAC address setup (driver, which loads config from eeprom?) https://lkml.org/lkml/2013/10/24/375

M-Shield
For M-Shield AES, SHA1 and MD5 acceleration is needed updated signed bootloader X-Loader. Without it M-Shield crashing.

More info on: http://maemo.org/community/maemo-developers/n900_aes_and_sha1-md5_hw_acceleration_drivers/

U-Boot
Instead of booting the kernel directly from NOLO (which restricts you to using exactly one kernel), U-Boot can be used as second bootloader. The Maemo kernel can be appended to U-Boot to keep the existing Maemo installation working (U-Boot must be located at the location of the Maemo kernel). The resulting boot process will end up like this: NOLO -> U-Boot -> Kernel.

Pali Rohár has been working on getting the N900 support into the mainline U-Boot:

Now all N900 patches are in upstream U-Boot mainline project (part of U-Boot 2013.04). Source code is on http://git.denx.de/?p=u-boot.git

Debian packaging for Maemo is in this git repository: https://gitorious.org/u-boot-shr/u-boot (branch maemo).

There's also a thread on talk.maemo.org, where the latest released & tested version can be found: http://talk.maemo.org/showthread.php?t=81613

More info about U-Boot on N900 is in first post.

Flashing
There is an open source flasher application called 0xFFFF, which is working with the Nokia N900.


 * Git repository is on: https://gitorious.org/0xffff/0xffff
 * Packages are available in Debian & Ubuntu (apt-get install 0xffff)
 * Gentoo Ebuild is available in ixit overlay (emerge -av sys-apps/0xffff::ixit )