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
also see: N900/Changelog

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://github.com/pali/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-gnueabihf- 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

root problems in recent mainline
In recent mainline (cca 3.16+), it is impossible to use nfsroot over usb0 device. There's patch from Tony Lindgren fixing that.

Also for some strange reason, mmcblk? devices do not work for root filesystem. They work fine when mounted during runtime.

Bluetooth Status in Mainline Kernel
The bluetooth driver is currently available in drivers/staging/nokia_h4p. There is a TODO file in that directory, which lists the code refactoring needed to get the driver out of staging.

Apart from the things listed in that TODO file, the driver also seems to reinvent the wheel concerning the uart port. Most code in the driver simply configures the omap serial port and duplicates code in drivers/tty/serial/omap-serial.c.

sre thinks, that the hci protocol extension code should be put into a file similar to drivers/bluetooth/hci_ll.c, which could be called drivers/bluetooth/hci_nokia.c (hci with nokia extensions). This would result in the protocol being available as hci_uart_proto for usage in a hci-uart driver.

A second driver would be needed, which would be similar to drivers/bluetooth/hci_ldisc.c with the following differences:
 * support for additional gpios
 * support to be instanciated from DT instead of hciattach
 * support for loading bluetooth hardware address from DT
 * support for automatical loading of bt firmware (see btusb.c)

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

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

Files are reuploaded at TMO thread: http://talk.maemo.org/showthread.php?p=1478502#post1478502

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://github.com/pali/0xffff
 * Info & discussion is on: http://talk.maemo.org/showthread.php?t=87996
 * Packages are available in Debian & Ubuntu (apt-get install 0xffff)
 * Gentoo Ebuild is available in ixit overlay (emerge -av sys-apps/0xffff::ixit )

Wireshark Plugin for PhoNet

 * http://sre.ring0.de/isi-wireshark-plugin/

A-GPS

 * Uses SUPL (Secure User Plane Location) protocol (see documentation at open mobile alliance)

A-GPS works by Modem requesting CPU to open a socket (it supplies domain/ip and port) [pkg type LS_SOCKET_OPEN_REQUEST_NTF]. Then the modem will continue by requesting to send some data using pkg type LS_SOCKET_SEND_REQUEST_NTF, followed by requesting to receive some data [pkg type LS_SOCKET_RECV_REQ]. Last but not least it will request to close the socket using LS_SOCKET_CLOSE_REQUEST_NTF. The wireshark plugin mentioned above can also be used to analyse A-GPS sessions (e.g. initialized by Maemo).