Sunday, October 28, 2012

How to Compile RaspberryPI Kernel

The actual process of compiling Linux Kernel is not really difficult, and it has been documented in hundreds of websites and blogs. However since the raspberrypi cpu's is not really too fast it can take many hours to compile the kernel native in the raspberrypi. Then is essential to setup another computer to perform cross compilation and be able to copy the Image and modules files.

I found two great tutorials here and here, which guide me in the right direction. Since there are many different ways to achieve the same goal. I will documents the steps that worked for me.

In your Linux Desktop

1) First install Git if you don't have it already.
$ sudo apt-get install git

2) Install packages required to cross compilation
$ sudo apt-get install git gcc-arm-linux-gnueabi make ncurses-dev

3) Create a directory to download raspbian kernel in your home directory.

$ cd ~/
$ mkdir raspberrypi
$ cd raspberrypi$ git clone https://github.com/raspberrypi/firmware
$ git clone git://github.com/raspberrypi/linux.git

 -- or to download just the latest --

$ git clone --depth 1 git://github.com/raspberrypi/linux.git $ cd linux

4) Configure kernel
Option 1: Obtain the .config from your existing Raspberrypi Kernel
$ sudo zcat /proc/config.gz > .config

Then, copy this file to your desktop computer raspberrypi/linux directory with scp or by any other way.

Option 2: Use the standard broadcom raspberrypi cutdown .config file.
$ cp arch/arm/configs/bcmrpi_cutdown_defconfig .config
Once you have .config file perform a "oldconfig" this will create a new .config based in the old .config file but with options and selections according to the new kernel file.

$ make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- oldconfig
This will ask you a thousand questions, just press Enter to accept the default configuration. You would be able to make changes in the next step.

Optional - But probably the only good reason to recompile the kernel. Add or modify kernel options and settings.
$ make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- menuconfig

5) Compile kernel
$ make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- -k
In you have a multicore processor use the "-j" argument with a number between 1.5 or twice the number of cpu's in your computer.
ej. in my AMD 4 cores I use the following. It just takes around 5 minutes to compile.
 $ make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- -k -j 6

In your Raspberry PI.

Copy your files to a RaspberryPI. We have many ways to do this, I will describe my favorite.

6) Boot your raspberry - easy !

7) Install sshfs in your RPI, also you must have ssh or openssh-server for debian distros installed and running in your desktop.
 $ sudo apt-get install sshfs

8) Install Modules in your RaspberryPI

$ cd /mnt
$ mkdir raspbian
$ sshfs user@host:raspberrypi raspbian
$ cd raspbian/linux
$ sudo make modules_install

9) Copy new firmware
$ cd /mnt/raspbian/firmware/boot
$  cp * /boot

10) Copy yout custom kernel from Desktop to PI
$ sudo cp arch/arm/boot/Image /boot/kernel.img
11) Edit /boot/config.txt and add your memory split settings
gpu_mem_256=64
gpu_mem_512=128

12) Reboot



Sunday, July 17, 2011

Simple Step by Step Sheeva plugcomputer upgrade

After a long time running my sheevaplug with the original Ubuntu 9.04 the last Ubuntu version available for the sheeva, I found myself without any security update, no APT no nothing. I have stretched this non LTS Ubuntu version to the maximum.

Since the actual update took me a long long time, due to a series of technical problems and the difficulty of getting the uboot bin file, I will document every single step and will include a link to every file to make sure that I can refresh my sheeva easily in the future. There are many other how-to's around the web, I tried few of them but non worked for me.

Pre-Requisites:
  • A 32b linux installation
  • php5-cli
  • openocd
  • libftdi1
  • Sheeva Plug Installer (a 145MB download link)
Just get a old pc/laptop with a 32b linux, I'm using LinuxMint but any other distro should work fine, also VirtualBox should work but I haven't tried yet.
Install php5-cli if you don't have it installed.
sudo apt-get install php5-cli
I had problems running the php script because the default configuration didn't included the local environmental variables. So take a look to:

/etc/php5/cli/php.ini

search for "variables_order"
and make sure the E is there; like that:
variables_order = "EGPCS"
install openocd;

sudo apt-get install openocd
Then install libftdi1

sudo apt-get install libftdi1

And to finish the prep work, download and extract the Sheeva Plug Installer to your favorite directory.

Setup you connection
These are the setting to connect to your sheeva plug with any terminal from link.
  • 115200 baud
  • 8 data bit
  • N parity
  • 1 stop byte
  • 0 (none) flow control
Connect the Sheeva, reboot and launch putty or you favorite terminal, you should see booting process. You have few second to interrupt the booting process and go directly to uboot; confirm the uboot version with.
uboot version
The Sheeva Plug installer includes uboot version 3.4.19. Others howto's recommend U-Boot 3.4.27+pingtoo.

U-Boot Upgrade

Took me a while to get the bin file, but I finally found it in here. The actual uboot is part of the zip file in "Preparing USB Pendrive". By the way this is great tutorial. Or you can download the U-Boot 3.4.27+pingtoo from here.

Replace the uboot.bin file in /sheevaplug-installer/uboot with this uboot.bin. Edit /sheevaplug-installer/uboot/uboot-env/uboot-nand-custom.txt to include your sheeva plug MAC address.


Prepare the USB drive

Download and save the following files in a formatted USB drive.
  • initrd (this is the same found in the installer)
  • uImage kernel 2.6.39.3 (or newer from http://sheeva.with-linux.com/sheeva/ )
  • modules.tar.gz 2.6.39.3 (or newer from http://sheeva.with-linux.com/sheeva/ )
  • rootfs.tar.gz (or make your own with this script, download to your current sheeva, chmod +x and run as root)
Upgrade

Plug the USB drive in the sheeva, and run the following command from the sheevaplug-installer folder.
php runme.php nand
This should copy the new uboot into the sheeva, and then will execute run recover1. If you just want to reflash withou upgrade uboot, just execute run recover1 from the uboot console.

Finishing

  1. check the date, apt-get may not work if the date is wrong.
  2. apt-get update
  3. apt-get upgrade
  4. regenerate the ssh
    • rm /etc/ssh/ssh_host*
    • ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ""
    • ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ""
  5. dpkg-reconfigure tzdata
  6. dpkg-reconfigure locales
  7. edit /etc/hostname to change the hostname.
Credits
http://www.plugcomputer.org/downloads/plug-basic/

Since the original link from plugcomputer forum is broken, I used the uboot found here: http://caller9.com/blog/21/full/

Manually unpacking a tar ball of Debian on SheevaPlug
http://www.cyrius.com/debian/kirkwood/sheevaplug/unpack.html

SheevaPlug Installer
http://plugcomputer.org/plugwiki/index.php/SheevaPlug_Installer

U-Boot Links:

Uboot howto Cross Compile
http://doukki.net/wiki/tutoriels/uboot.howto

Upgrading SheevaPlug's Uboot
http://www.cyrius.com/debian/kirkwood/sheevaplug/uboot-upgrade.html

Saturday, June 18, 2011

AWS Adventures

These are my first three steps to create a Ubuntu instance in Amazon EC2.

1) Ubuntu Official AMI's are published by user with Amazon ID '099720109477'.

after the instance get launched you can access the instance with the public DNS and the AWS pem file.

2) ssh -i awskey.pem ubuntu@ec2-01-02-03-04.compute-1.amazonaws.com

To facilitate ssh, i prefer to send my own key to the instance with ssh-copy-id. Here is the link to create your own key pair.

3)cat id_rsa.pub | ssh -i testkey.pem ubuntu@ec2-01-02-03-04.compute-1.amazonaws.com "cat>> .ssh/authorized_keys"

At this point my instance is ready, and easily accessible with my own rsa credentials.

Saturday, February 20, 2010

These are the instructions to compile transmission in a sheevaplug. From elBradford. http://bradford.law-family.org/success-building-transmission-1-80-from-source-on-sheevaplug/ This link was down on February 20, 2010. I get access to it from google cache.

1) I think the last 3 package are not really required, for a non gtk installation
# apt-get install build-essential automake autoconf libtool pkg-config
libcurl4-openssl-dev intltool libxml2-dev libgtk2.0-dev libnotify-dev libglib2.0-dev
* now libevent-dev is required, a had to download it and compile it.

2) Download the latest transmission from:

http://download.m0k.org/transmission/files/


# wget "and the actual link to the latest file"

3) Extract the files

# tar –xvf transmission-1.90.tar.bz2

4) Enter in directory and:

# ./configure –-disable-gtk --disable-cli

5) First Backup your current settings.json and purge current installed torrent.
# aptitude purge transmission-daemon

5) Build

# make

# make install

6) Setup init scrip as per this link.

7) edit init script transmission-home to point /etc/transmission instead of default /root/.conf/transmission

Create transmission user: adduser Make sure transmission user has access is the owner of the directory.

8) Configure /etc/transmission/settings.json

9) start transmission

# /etc/init.d/transmission-daemon start


10) Add rc links

#update-rc.d transmission-daemon defaults



Sunday, February 05, 2006

Ubuntu mount and read permits in a NTFS partition

Problema.
No puedo "mount" ni ver los files en una particion NTFS como USER solo los puedo montar y accesar como root. No me interesa el escribir la particion esto puede afectar la particion. La solucion esta en la opcion de umask en el file fstab, users y ro "read only".
Users permite que cualquier usuario pueda "mount" la particion.
ro modo de solo lectura
umask=0222 permite que todos los user puedan leer el contenido de la particion.


/dev/hdb1 /media/win ntfs users,ro,umask=0222 0 0

Booting W2k from a slave HD using GRUB

Problema,
W2K se reusa a bootiar de un disco esclavo "slave".
Para lograr que windows arranque hay que hacer un pequeño engaño a windows desde grub.
map (hd0) (hd1) logra que windows vea el disco master como slave
map (hd1) (hd0) y el slave como master


/boot/grub/menu.lst

# This entry automatically added by the Debian installer for a non-linux OS
# on /dev/hda1
title Microsoft Windows 2000 Professional
map (hd0) (hd1)
map (hd1) (hd0)
root (hd1,0)
savedefault
makeactive
chainloader +1

Wheelmouse in Knoppix

Luego de installar Knoppix en el hard drive el wheel mouse dejo de funcionar. Como siempre una busqueda en google mostro la solucion. Es necesario el seleccionar el protocolo imps/2,device /dev/psaux y "ZAxisMapping" "4 5".

/etc/X11/XF86config-4

Section "InputDevice"
# Identifier and driver

Identifier "Mouse1"
Driver "mouse"
Option "Protocol" "imps/2"
Option "Device" "/dev/psaux"
Option "ZAxisMapping" "4 5"