I have installed Fedora 12 on my Nokia N900.

Jebba's N900 Fedora 12
Fedora 12 on N900

Screen reads:

Fedora release 12 (Constantine)
Kernel 2.6.28-omap1-jebba5 on an arm7l (tty1)

fedora-arm login: _


[edit] HOWTO Install Fedora 12 on Nokia N900

It boots up happily. No GUI, no phonecalls, no battery charging support, etc. Wifi works. Testing xorg RSN.

[edit] Kernel

You will need to install a kernel that has a framebuffer console. You can use your own or use mine. See: Installing my custom kernel if you would like to use mine. Version 2.6.28-omap1-jebba5 is known to "work".

[edit] bootmenu

You need to have getbootstate version 1.0.35+0m5 or greater for this to work. These docs are basically the same as installing Mer.

dpkg -l getbootstate

(As a side note, getbootstate is closed software. Please vote for this bug and/or clamour for it to be released as free software.)

I have four partitions on my MicroSD card. The first one is 100M of VFAT just to shut up fremantle. The second is 1G of swap. The third is 7G of space for fremantle. The remaining space is around 7G of space for Fedora. You can install it in far less space, but I have a 16G card, so that's what I did. These docs assume you use my partitioning.

# Boot up into Maemo / Fremantle

# Grab this package:

# Be root
sudo gainroot

# Install bootmenu
dpkg -i bootmenu_1.6_armel.deb

Then tappy tap tap the bootmenu install icon and answer yes.

Now you need to set up Fedora in the menu for bootmenu. See also: Mer bootmenu docs.

I put everything on the forth partition on an ext3 formatted "external" MicroSD card (the one that's right next to the camera).

# edit/create this file to create a boot menu item for Fedora:
vim /etc/bootmenu.d/fedora.ext.item

# Make it look justa lika thisa:

ITEM_NAME="Fedora 12 (external SD, partition 4)"
ITEM_MODULES="mbcache jbd ext3"

Then shutoff the phone and reboot with KEYBOARD SLID OUT, so you get the bootmenu.

[edit] rootfs

Boot into your system like "normal" into Maemo fremantle.

Set up and download the needed files:

# This will be a nice place to keep things
mkdir -p /home/user/MyDocs/Fedora/rootfs

# go hence
cd /home/user/MyDocs/Fedora/rootfs

# grab the root image

[edit] fedora-setup-in-chroot

Make this file and put it here: /home/user/MyDocs/Fedora/fedora-setup-in-chroot

Note, in future revisions, I will have more in this script, this is just a starting point for now.


set -x

echo "uh, set a root password!"

[edit] freemoe-fedora-install

Make & run this script; adjust the partition numbers to match your own setup.


set -x

echo "this is going to format your microsd, take care!"


read ok
read ok
exit 0 # you get this i hope


sudo umount /dev/mmcblk1p4

sudo mkfs.ext3 -j -m1 /dev/mmcblk1p4

sudo fsck -vvv /dev/mmcblk1p4

sudo mkdir -p /media/mmc4

sudo mount -o noatime /dev/mmcblk1p4 /media/mmc4/

cd /media/mmc4/

bzcat /home/user/MyDocs/Fedora/rootfs/rootfs-f12.tar.bz2 | sudo tar x

sudo mv rootfs-f12/* .
sudo rmdir rootfs-f12

sudo cp -a /lib/modules/*  /media/mmc4/lib/modules/

echo "Copying over NON-FREE FIRMWARE"
echo "PAY PENANCE!!!!"
sudo cp -a /lib/firmware/*  /media/mmc4/lib/firmware/

sudo cp -p /home/user/MyDocs/Fedora/fedora-setup-in-chroot ./

sudo chmod +x fedora-setup-in-chroot


echo "now run ./fedora-setup-in-chroot after you enter the chroot"
echo "this is convenient too:"
echo "export HOME=/root"

sudo chroot /media/mmc4 /bin/bash

[edit] Disable watchdog

You have to disable the watchdog with the flasher tool or the system will just shut down on bootup:

./flasher-3.5 --set-rd-flags=no-omap-wd

./flasher-3.5 --set-rd-flags=no-ext-wd

./flasher-3.5 --enable-rd-mode

[edit] Wifi

You'll also need to add "." to root's PATH or put that somewhere it root's PATH.

[root@fedora-arm ~]# tail -1 /root/.bashrc 

Here's a crufty crappy script to get wifi and net:

# cat wlanon 

WLAN=`iwconfig |grep wlan | cut -f 1 -d " "`
echo "$WLAN"

ifconfig $WLAN down
sleep 1
iwconfig $WLAN mode managed
sleep 1
ifconfig $WLAN up
sleep 1
iwconfig $WLAN essid consume
sleep 1
ifconfig $WLAN netmask up

iwconfig $WLAN
sleep 2
ifconfig $WLAN

route add default gw

[edit] OLD

(Will add this to script later)

I got wifi going by writing a simple script that I can run at boot. Can't use many of the keys, so no "0", "/" etc. I used iwconfig which I yum installed in the chroot, but this could easily be done with the more modern "iw" which comes installed.

[root@fedora-arm ~]# cat startiwconfig

iwconfig wlan0 essid consume
dhclient wlan0
# cat /etc/sysconfig/network-scripts/ifcfg-wlan0 
# WLAN Interface

Note: I had wifi working fine, then I installed a bunch of apps and network config broke and can't find the device anymore. :(

Note 2: If you reboot without powering off or perhaps yanking the battery, your device may appear as wlan2 or wlan3 etc.

EDIT: UPDATE: by SimonGie 28/07/2010

This works for a network that has no encryption but will not connect to one that does. Boot into Maemo and chroot into the Fedora install. Then yum install wpa_supplicant. Then edit your wpa_supplicant.conf to something like this:

This config below is for two wireless networks...I have one at home and at work that I could connect to. Obviously you need to change the SSID and passkeys to your relevant info. If you only need to connect to one wlan, then leave the 2nd one off.

       ssid="network SSID 1"
       ssid="network SSID 2"

Save that. Then make a little initialisation script:

       vim wlanon

Put this in the file:

       wpa_supplicant -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf -Dwext
       rhclient wlan0

and save it Then

       chmod +x wlanon

Then reboot the phone and boot into Fedora desktop Once logged in, run the script wlanon This should initialise the wlan card, you can check this by typing iwconfig

If you have device does not exist errors, boot into Maemo, mount the Fedora partition and delete the file


Because the wireless MAC address changes for some reason and Udev assigns it a different name. Deleting that file will make Udev redetect it as wlan0

You should now have internet access.

Do a yum install NetworkManager-gnome and let it install. When eventually you boot into the desktop, NetworkManager should start and you will be able to connect to any wireless network, regarless of wpa_supplicant.conf

If NetworkManager complains about required resources, run this command from the terminal

      gtk-update-icon-cache -f /usr/share/icons/hicolor

NetworkManager is working flawlessly with my install. -- 20:49, 27 July 2010 (UTC)


X is up and running with XFCE & openbox. I have the touchscreen working. I can do touchscreen calibration.

# as root, I did this via ssh when networking was working
yum groupinstall Base-X

# grab a desktop. No openbox or lxde available at the moment for ARM.
yum groupinstall XFCE

# Screen config.
yum install tslib xorg-x11-apps

# fix /etc/hosts to this so XFCE doesn't complain:       localhost localhost.localdomain fedora-arm

# since keyboard isn't working you have to set up this script from
# chroot or ssh in:
echo "TSLIB_TSDEVICE=/dev/input/event3 TSLIB_CONFFILE=/etc/ts.conf ts_calibrate" > /root/ts
chmod +x /root/ts

# then next time you boot up, log in as root and run "ts" to calibrate.

# Uncomment this line in /etc/ts.conf:
module_raw input

[edit] Misc

In a chroot I wanted to do a `yum update` and installs. Did a `mount -a` and needed to create a device:

cd /dev
MAKEDEV urandom
yum update
yum install wireless-tools openssh-clients git
route add default gw
  • disable /etc/sysconfig/network-scripts/ifcfg-eth0
  • Have lame network startup script run at boot.
  • stop startup stuff
chkconfig abrtd off
chkconfig auditd off
chkconfig ip6tables off
chkconfig iptables off
chkconfig netconsole off
chkconfig netfs off
chkconfig restorecond off
  • Build tools:
yum groupinstall --skip-broken "Development Tools"

yum install -y vim-enhanced file gqview xorg-x11-apps xterm

  • Auto login, edit /etc/gdm/custom.conf
  • Edit /etc/inittab to set default runlevel to 5.

To get X pointer and keyboard working:

  • Mount up Maemo root partition:
mkdir -p /mnt/maemo
mount -t ubifs ubi0:rootfs /mnt/maemo
  • /usr/share/hal/fdi/* stuff from maemo to get touchscreen working in X. Copy it to /etc/hal/...
  • Copy over xkb stuff to get numbers etc from keyboard working:
mv /usr/share/X11/xkb /usr/share/X11/xkb.f12
cp -a /mnt/maemo/usr/share/X11/xkb /usr/share/X11/xkb
  • ofono
yum -y install glib2-devel dbus-devel libudev-devel

To initialize modem, you need to run this non-free command:

/mnt/initfs/sbin/phonet -a 0x6C -i phonet0
ifconfig phonet0 up # or:
ip link set dev phonet0 up
  • misc misc misc
yum -y install openbox rxvt-unicode alsa-utils sox


I had issues updating via yum, and I had to rebuild the database. Boot into Maemo and mount and chroot the Fedora partition. Then run

     rm -f /var/lib/__db*

and then

     rpm --rebuilddb

Once it's done you should be able to run yum -- 20:49, 27 July 2010 (UTC)

[edit] Battery?

Copying over the script from Mer to get the battery working appears to run, not certain how it is working yet.

cp -p /mnt/mer/etc/init.d/n900-support /etc/init.d/
# edit n900-support, adding this line:
# chkconfig: - 58 74
chkconfig --level 35 n900-support on

[edit] watchdog

To disable R&D mode, try this:

yum -y install watchdog
rpm -Uvh n900_wd-1-1.noarch.rpm

[edit] kludge up symlinks

chroot /mnt/initfs/
ln -s /f12/tmp/bme-dbus-socket /tmp/bme-dbus-socket

Outside chroot:

ln -s /mnt/initfs/tmp/dsmesock /tmp/
sudo ln -s /mnt/initfs/tmp/.bmesrv /tmp/

cp -p /mnt/initfs/usr/lib/ /usr/lib
cp -p /mnt/initfs/usr/lib/hal/hald-addon-bme /usr/libexec/hald-addon-bme
cp -p /mnt/initfs/usr/share/hal/fdi/policy/10osvendor/10-bme.fdi /etc/hal/fdi/policy/10osvendor/

[edit] watchdog other

Here's some scripts that I got from somewhere, i think another fedora/n900 user. :) It is another way to disable the watchdog without having to enter R&D mode.

[edit] n900_wd

# chkconfig: 12345 01 99
# description: N900 watchdog kicker

# Source function library.
. /etc/rc.d/init.d/functions

[ -x /usr/sbin/wd_keepalive ] || exit 0


start() {
	echo -n $"Starting $prog: "
	/usr/sbin/${prog} -c /etc/watchdog-omap.conf
	[ $RETVAL -ne 0 ] && (echo_failure; echo; return $RETVAL)
	/usr/sbin/${prog} -c /etc/watchdog-twl4030.conf
	[ $RETVAL -eq 0 ] && touch $lockfile
	[ $RETVAL -eq 0 ] && echo_success
	[ $RETVAL -ne 0 ] && echo_failure
	return $RETVAL

stop() {
	rm -f $lockfile $pidfile

case "$1" in
	status $prog
	echo $"Usage: $0 {start|status}"
	exit 1

[edit] watchdog-twl4030.conf

watchdog-device		= /dev/twl4030_wdt
interval		= 10
realtime		= yes
priority		= 1

[edit] watchdog-omap.conf

watchdog-device		= /dev/watchdog
interval		= 10
realtime		= yes
priority		= 1

[edit] See also