a guest Apr 6th, 2012 5,675 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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.
  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
  14. #Create a tempory working directory
  15. mkdir work ; cd work
  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://
  20. git clone git://
  21. wget
  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
  27. #Configure, build & install scratchbox2
  28. cd $HOME/work/scratchbox2
  29. ./
  30. mkdir $HOME/ARMDevelopmentTools/Scratchbox2
  31. make install prefix=$HOME/ARMDevelopmentTools/Scratchbox2
  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
  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)'
  45. #Create a directory for keeping all your Raspberry Pi related files & builds in
  46. mkdir $HOME/RaspberryPiDevelopment
  48. #Go back to the working directory
  49. cd $HOME/work
  51. #Download the desired rootfs from the downloads page on 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>
  57. #I am going to use the latest available debian rootfs
  58. unzip
  59. cd debian6-17-02-2012
  60. file debian6-17-02-2012.img
  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
  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
  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
  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
  85. #Unmount, detach the rootfs & delete the mountpoint
  86. sudo umount /mnt/rootfs
  87. sudo losetup -d /dev/loop0
  88. sudo rmdir /mnt/rootfs
  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
  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
  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
  107. #Running hello.arm using the command sb2 hello.arm will print hello, world
RAW Paste Data
Want to get better at Bash?
Learn to code Bash in 2017
Pastebin PRO Summer Special!
Get 40% OFF on Pastebin PRO accounts!