## page was renamed from n900-wheezy-armhf This is an account of installing Debian wheezy armhf on a Nokia N900. Notes are abridged assuming that you've read [[MaemoAndSqueeze]] already. I still haven't got the special keys ( like "-"!) on the keyboard working in the console yet, so this install revolves around getting SSH working first. == Prepare the root file system == {{{#!highlight sh numbers=disable EDITOR=vim # ..or your favourite PACKAGES="module-init-tools,udev,netbase,ifupdown,openssh-server,$EDITOR,locales,whiptail" sudo debootstrap --arch=armhf --variant=minbase --include=$PACKAGES --foreign wheezy /tmp/wheezy-armhf/ http://mirror:9999/debian # Copy these files to the SD card # Need these scripts because don't have "-" on the keyboard ( amongst other things) cat <<'.' > bin/fn #!/bin/sh debootstrap/debootstrap --second-stage . cat <<'.' > bin/rb #!/bin/sh mount -o remount,ro / reboot -f . chmod +x bin/fn bin/rb cat <<'.' > etc/fstab # so that "mount -o remount,ro" prior to reboot works if you need it # # /etc/fstab: static file system information. # # pass: 0: do not check, 1: before mounting root, 2: after mounting root # # Use 'blkid -o value -s UUID' to print the universally unique identifier # for a device; this may be used with UUID= as a more robust way to name # devices that works even if disks are added and removed. See fstab(5). # pass, # ,file system ,mount point ,type ,options dump, | # | | | | | | /dev/mmcblk1p4 / ext4 errors=remount-ro,noatime 0 0 proc /proc proc nodev,noexec,nosuid 0 0 none /tmp tmpfs noatime 0 0 . echo N900 > etc/hostname $EDITOR etc/shadow # and set root's password to something cat <<'.' >> etc/modules g_nokia . cat <<'.' > etc/network/interfaces # interfaces(5) file used by ifup(8) and ifdown(8) # loopback auto lo iface lo inet loopback # usb auto usb0 iface usb0 inet static address 10.3.3.1 netmask 255.255.255.0 gateway 10.3.3.254 . echo nameserver 10.3.3.254 > etc/resolv.conf }}} == Building the kernel == {{{#!highlight sh numbers=disable # Needs at least 2.3G of disc space git clone git://gitorious.org/linux-n900/linux-n900.git git checkout v3.8-rc3-n900 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make rx51_defconfig # unchecked CONFIG_SYSFS_DEPRECATED # Change the configuration to include ext2 and the TWL4030 watchdog: ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make xconfig # Comment out line 1040 of arch/arm/mach-omap2/board-rx51-peripherals.c ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- nice -19 make -j 5 INSTALL_MOD_PATH=/tmp ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make modules_install sudo rsync --archive /tmp/lib/ 10.3.3.1:/mnt/lib/ sudo flasher-3.5 -l -k arch/arm/boot/zImage -b"vram=12M console=tty0 rootdelay=1 rootwait root=/dev/mmcblk0p4 init=/bin/bash" }}} Once at the bash prompt, run `fn` to finish the debootstrap process then `rb` to reboot and use the same command line but without an explicit `init=` parameter to boot normal init. == Routing via workstation == {{{#!highlight sh numbers=disable # Configure usb0 with 10.3.3.254, then: echo 1 > /proc/sys/net/ipv4/ip_forward iptables -t nat -A POSTROUTING -s 10.3.3.0/24 -o wlan0 -j MASQUERADE }}} == U-Boot == Use version `2013.04-1` of `u-boot-flasher` in Maemo because earlier versions boot some kernels but reset the CPU instead of booting others. == X == '''Video driver''' Both `xserver-xorg-video-omap3` and `xserver-xorg-video-omapfb` segfaulted for me. `xserver-xorg-video-fbdev` works though. '''Keyboard''' To get support for the special characters printed on the keys, edit `/etc/default/keyboard`: {{{ XKBMODEL="nokiarx51" XKBLAYOUT="us" }}} To add other characters, edit `/usr/share/X11/xkb/symbols/nokia_vndr/rx-51`: {{{ key { type[Group1] = "PC_FN_LEVEL2", symbols[Group1] = [ Up, Page_Up ] }; key { type[Group1] = "PC_FN_LEVEL2", symbols[Group1] = [ Left, Home ] }; key { type[Group1] = "PC_FN_LEVEL2", symbols[Group1] = [ Down, Page_Down ] }; key { type[Group1] = "PC_FN_LEVEL2", symbols[Group1] = [ Right, End ] }; }}} ..then to reload the keymap: {{{ setxkbmap us }}} Some useful keys not available by default: `Escape Tab Page_Up Page_Down Home End Insert Delete less greater bracketleft bracketright braceleft braceright grave percent asciicircum asciitilde bar F2` '''Touchscreen''' The Y axis of the touchscreen was inverted. `xinput --list` shows a line like: {{{ TSC2005 touchscreen id=6 }}} `xinput --list-props 6` shows: {{{ Evdev Axis Inversion (239) }}} ..and then `xinput --set-prop --type=int 6 239 0 1` flipped the axis for me. It also needed some calibration: {{{ xinput --set-prop --type=float 6 113 1.10 0.00 -0.05 0.00 1.18 -0.10 0.00 0.00 1.00 }}}