View difference between Paste ID: 4Jp1WPTb and D3S1VxWb
SHOW: | | - or go back to the newest paste.
1
#Setup Scratchbox2, qemu & a Raspberry Pi rootfs for cross compiling for the Raspberry Pi
2
#Start with a debian(other base distros will work but the commands will be slightly
3
#different) install correctly configured (if the install is inside a VM such as VirtualBox make sure 
4
#that guest-additions or the equivilent is installed). These instructions assume that your shell
5
#is bash, which 99.9% of the time it will be.
6
7
#Install packages required to install Scratchbox2 & qemu plus a few useful extras. Fedora
8
#does not have realpath available as a package installable via yum so you'll need to find the 
9
#source for one (or write your own) and install it manually.
10
sudo apt-get install build-essential mc openssh-server apache2 wget git subversion fakeroot \
11
realpath libsdl1.2debian-all libsdl1.2-dev libncurses5 libncurses5-dev libcurl3 libcurl4-openssl-dev \
12
gftp autoconf
13
14
#Create a tempory working directory
15
mkdir work ; cd work
16
17
#Get Scratchbox2, qemu & a toolchain (you can build your own crosscompile toolchain but
18
#there is one freely available so might as well use that.
19
git clone git://gitorious.org/scratchbox2/scratchbox2.git
20
git clone git://git.linaro.org/qemu/qemu-linaro.git
21
wget https://sourcery.mentor.com/sgpp/lite/arm/portal/package8739/public/arm-none-linux-gnueabi/arm-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
22
23
#Install the toolchain
24
mkdir $HOME/ARMDevelopmentTools
25
tar xjvf arm-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C $HOME/ARMDevelopmentTools
26
27
#Configure, build & install scratchbox2
28
cd $HOME/work/scratchbox2
29
./autogen.sh
30
mkdir $HOME/ARMDevelopmentTools/Scratchbox2
31
make install prefix=$HOME/ARMDevelopmentTools/Scratchbox2
32
33
#Configure, build & install qemu (linaro "fork"). configure options other that --target-list
34
#are pretty much a matter of taste and/or requirements. The ones listed are ones I find work
35
#for me.
36
cd $HOME/work/qemu-linaro
37
mkdir $HOME/ARMDevelopmentTools/qemu-linaro
38
./configure --prefix=$HOME/ARMDevelopmentTools/qemu-linaro --target-list=arm-linux-user,arm-softmmu --audio-drv-list=alsa,sdl,oss --audio-card-list=ac97,sb16 --enable-mixemu
39
make && make install
40
41
#Add the following lines to $HOME/.bashrc using your favourite editor (in the running shell as well)
42
export PATH=$HOME/ARMDevelopmentTools/Scratchbox2/bin:$HOME/ARMDevelopmentTools/qemu-linaro/bin:$PATH
43
alias doch='sudo $(history -p !-1)'
44
45
#Create a directory for keeping all your Raspberry Pi related files & builds in
46-
mkdir $HOME/Raspberry_Pi_Development
46+
mkdir $HOME/RaspberryPiDevelopment
47
48
#Go back to the working directory
49
cd $HOME/work
50
51
#Download the desired rootfs from the downloads page on http://raspberrypi.org/downloads and
52
#copy it to your working directory. If you download using a non-bittorrent direct link using a
53
#browser it'll be in the downloads directory. On debian cp $HOME/Downloads/debian*.zip $HOME/work
54
#If you download it using bittorrent then it'll be in the directory that your bittorent client 
55
#puts things. If you are going to use a direct link you can also just wget it as shown below.
56
wget http://<direct link you go from http://raspberrypi.org/downloads>
57
#I am going to use the latest available debian rootfs
58
unzip debian6-17-02-2012.zip
59
cd debian6-17-02-2012
60
file debian6-17-02-2012.img
61
62
# You will get output similar to below
63
debian6-17-02-2012.img: x86 boot sector; partition 1: ID=0xc, starthead 0, startsector 2048, 
64
153600 sectors; partition 2: ID=0x83, starthead 3, startsector 157696, 3256320 sectors; 
65
partition 3: ID=0x82, starthead 3, startsector 3416064, 391168 sectors, code offset 0xb8
66
67
#You need to note the value of startsector for partition 2 which in this case is 157696
68
#and multiply it by 512. using bc calculator i get the value 80740352
69
70
#Mount the rootfs image as a loop device offset at the start of the second partition in the image
71
#which is the actual rootfs in the image.
72
sudo losetup -o 80740352 /dev/loop0 debian6-17-02-2012.img
73
sudo mkdir /mnt/rootfs
74
sudo mount /dev/loop0 /mnt/rootfs
75
76
#Copy the files from the rootfs to the directory which we will be using for all our Raspberry Pi
77
#developing etc. (if your userid/groupid are not raspberrypi then change change the raspberrypi
78
#in the chown & chgrp commands to your userid and groupid
79
sudo mkdir $HOME/RaspberryPiDevelopment/.debian6_rootfs
80
sudo cp -v -r /mnt/rootfs/* $HOME/RaspberryPiDevelopment/.debian6_rootfs
81
sudo chown -R raspberrypi $HOME/RaspberryPiDevelopment/.debian6_rootfs
82
sudo chgrp -R raspberrypi $HOME/RaspberryPiDevelopment/.debian6_rootfs
83
sudo chmod -R 777 $HOME/RaspberryPiDevelopment/.debian6_rootfs
84
85
#Unmount, detach the rootfs & delete the mountpoint
86
sudo umount /mnt/rootfs
87
sudo losetup -d /dev/loop0
88
sudo rmdir /mnt/rootfs
89
90
#Initialise Scratchbox2
91
cd $HOME/RaspberryPiDevelopment/.debian6_rootfs
92
sb2-init raspberrypi_debian6 $HOME/ARMDevelopmentTools/arm-2011.03/bin/arm-none-linux-gnueabi-gcc
93
94
#Move back to your developemnt directory and test that everything is working
95
cd ..
96
mkdir hello
97
vi hello.c
98
#include <stdio.h>
99
void main(){
100
printf("hello, world\n");
101
}
102
sb2 gcc -o hello.arm hello.c
103
104
#If everything is installed and configured correctly the thenfile hello.arm will output like below
105
hello.arm: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped
106
107
#Running hello.arm using the command sb2 hello.arm will print hello, world