User:Jebba/Fedora
I have installed Fedora 12 on my Nokia N900.
Screen reads:
Fedora release 12 (Constantine) Kernel 2.6.28-omap1-jebba5 on an arm7l (tty1) fedora-arm login: _
Contents |
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.
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".
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: wget http://www.daimi.au.dk/~cvm/bootmenu_1.6_armel.deb # 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_ID="fedora" ITEM_DEVICE="${EXT_CARD}p4" ITEM_MODULES="mbcache jbd ext3" ITEM_FSTYPE="ext3" ITEM_FSOPTIONS="noatime,rw"
Then shutoff the phone and reboot with KEYBOARD SLID OUT, so you get the bootmenu.
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 wget http://ftp.linux.org.uk/pub/linux/arm/fedora/rootfs/rootfs-f12.tar.bz2
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.
#!/bin/sh set -x echo "uh, set a root password!" passwd
freemoe-fedora-install
Make & run this script; adjust the partition numbers to match your own setup.
#!/bin/sh set -x echo "this is going to format your microsd, take care!" echo "THIS FORMATS PARTITION 4 ON YOUR MICROSD" read ok read ok exit 0 # you get this i hope echo 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 "WARNING WARNING WARNING!!!!" 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 sync echo echo "now run ./fedora-setup-in-chroot after you enter the chroot" echo "this is convenient too:" echo "export HOME=/root" echo sudo chroot /media/mmc4 /bin/bash
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
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 #!/bin/sh 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 10.0.0.3 netmask 255.255.255.0 up iwconfig $WLAN sleep 2 ifconfig $WLAN route add default gw 10.0.0.2
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 #!/bin/sh iwconfig wlan0 essid consume dhclient wlan0
PATH=$PATH:.
# cat /etc/sysconfig/network-scripts/ifcfg-wlan0 # WLAN Interface DEVICE=wlan0 #HWADDR=00:00:00:00:00:00 ONBOOT=no BOOTPROTO=dhcp TYPE=Wireless NM_CONTROLLED=no USERCTL=yes PEERDNS=yes IPV6INIT=no #MODE=Master RATE=auto ESSID=consume CHANNEL=
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:
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.
ap_scan=1 ctrl_interface=/var/run/wpa_supplicant network={ ssid="network SSID 1" scan_ssid=1 proto=WPA key_mgmt=WPA-PSK psk="Passkey1" pairwise=TKIP group=TKIP } network={ ssid="network SSID 2" scan_ssid=1 proto=WPA key_mgmt=WPA-PSK psk="Passkey2" pairwise=TKIP group=TKIP }
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
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.
X.org
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: 127.0.0.1 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
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 192.168.1.1
- 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
[daemon] AutomaticLoginEnable=true AutomaticLogin=jebba
- 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
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
watchdog
To disable R&D mode, try this:
yum -y install watchdog wget http://atorkhov.fedorapeople.org/n900_wd-1-1.noarch.rpm rpm -Uvh n900_wd-1-1.noarch.rpm
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/libbmeipc.so.0 /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/
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.
n900_wd
#!/bin/sh # # chkconfig: 12345 01 99 # description: N900 watchdog kicker # # Source function library. . /etc/rc.d/init.d/functions [ -x /usr/sbin/wd_keepalive ] || exit 0 RETVAL=0 prog=wd_keepalive pidfile=/var/run/wd_keepalive.pid lockfile=/var/lock/subsys/n900_wd start() { echo -n $"Starting $prog: " /usr/sbin/${prog} -c /etc/watchdog-omap.conf RETVAL=$? [ $RETVAL -ne 0 ] && (echo_failure; echo; return $RETVAL) /usr/sbin/${prog} -c /etc/watchdog-twl4030.conf RETVAL=$? [ $RETVAL -eq 0 ] && touch $lockfile [ $RETVAL -eq 0 ] && echo_success [ $RETVAL -ne 0 ] && echo_failure echo return $RETVAL } stop() { rm -f $lockfile $pidfile } case "$1" in start) start ;; stop) stop ;; status) status $prog RETVAL=$? ;; *) echo $"Usage: $0 {start|status}" exit 1 esac
watchdog-twl4030.conf
watchdog-device = /dev/twl4030_wdt interval = 10 realtime = yes priority = 1
watchdog-omap.conf
watchdog-device = /dev/watchdog interval = 10 realtime = yes priority = 1