C'est au pied du mur qu'on voit mieux le mur

Posted on mer. 06 mars 2013 in Linux, Raspberry Pi

J'utilise la distribution Raspbian (kernel 3.2.27+) pour mon Raspberry Pi. Et comme je suis un fainéant j'ai écrit un script pour générer automatiquement un environnement de cross compile.

Il permet de produire l'environnement et l'utilise ensuite pour compiler un kernel 3.2.27+ afin de pouvoir faire des modules kernel ainsi des templates (pour un programme en user space et un module kernel)

Utilisation :

  1. configurer la variable RPI_DIR à la ligne 17
  2. lancer le script avec la commande suivante : ./rpi_crossenv.sh

Le code source (le fichier est aussi ici):

#!/bin/bash

#title          :rpi_crossenv.sh
#description    :Generates a full cross compile env for Raspberry Pi
#author         :Niluje
#date           :20130306
#version        :0.1
#usage          :./rpi_crossenv.sh
#============================================
#Cross_tool-ng orignal config file is taken from Christophe Blaess site (http://www.blaess.fr/christophe/)
#Kernel module template is taken from chicoree.fr
#============================================

######
## General settings
###################
RPI_DIR=/home/niluje/Work/rpi

TEMP_DIR=/tmp #Use /tmp to compile stuffs. It will go faster
NB_OF_PROCESSOR=`grep -c ^processor /proc/cpuinfo`
#Cross_tools-ng stuffs
XTOOLS_DIR="$RPI_DIR"/x-tools #Final dir for cross tools
CROSS_TOOL_NG_VER=1.18.0
CROSS_TOOL_NG_WORK_DIR=crosstool-ng-"$CROSS_TOOL_NG_VER"
CROSS_TOOL_NG_URL=http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-"$CROSS_TOOL_NG_VER".tar.bz2
CROSS_TOOL_BINS=$XTOOLS_DIR/arm-rpi-linux-gnueabi/bin
CTNG_DIR="$TEMP_DIR"/ctng
CTNG_CONFIG_URL=http://thewired.doesntexist.org/wp-content/uploads/2013/03/config-ctng

#Kernel stuff
KERNEL_CONFIG_URL=http://thewired.doesntexist.org/wp-content/uploads/2013/03/config_kernel
KERNEL_DIR="$RPI_DIR"/kernel #final dir for kernel
KERNEL_SRC_URL=https://github.com/raspberrypi/linux/archive/rpi-3.2.27.tar.gz

#Template dirs
TEMPLATE_DIR="$RPI_DIR"/templates
TEMPLATE_URL=http://thewired.doesntexist.org/wp-content/uploads/2013/03/templates.tar.gz

#cd into the TMP directory
cd "$TEMP_DIR"

######
## Cross_tool-ng
###########################
#Get it and unarchive it
wget "$CROSS_TOOL_NG_URL"
tar xvf `basename "$CROSS_TOOL_NG_URL"`
cd "$CROSS_TOOL_NG_WORK_DIR"

#Configure & first make
./configure --prefix="$CTNG_DIR"
make && make install

#Build the tool chain
cd "$CTNG_DIR"
PATH="$PATH:$PWD/bin"
wget "$CTNG_CONFIG_URL"
mv `basename "$CTNG_CONFIG_URL"` .config
sed -i 's,CT_PREFIX_DIR=.*,CT_PREFIX_DIR='"$XTOOLS_DIR"'/${CT_TARGET},g' .config
ct-ng build

######
## Kernel stuffs
###########################
mkdir "$KERNEL_DIR"
cd "$KERNEL_DIR"

#retrieve the rpi kernel sources
wget $KERNEL_SRC_URL -O - | tar xzf -

cd linux-rpi-3.2.27
make mrproper
wget "$KERNEL_CONFIG_URL"
mv `basename "$KERNEL_CONFIG_URL"` .config
export CCPREFIX=$CROSS_TOOL_BINS/arm-rpi-linux-gnueabi-
export PATH="$PATH:$CROSS_TOOL_BINS"
yes "" | make ARCH=arm CROSS_COMPILE=$CCPREFIX oldconfig
make -j`expr $NB_OF_PROCESSOR + 1` ARCH=arm CROSS_COMPILE=$CCPREFIX

######
## Templates & utils
###########################
cd "$RPI_DIR"
wget "$TEMPLATE_URL"
tar xvf `basename "$TEMPLATE_URL"`
cd templates

#cross compile env script
sed -i 's,export PATH=.*,export PATH=$PATH:'"$CROSS_TOOL_BINS"',g' xenv.sh

#kernel module
sed -i 's,KERNEL_DIR ?=.*,KERNEL_DIR ?= '"$KERNEL_DIR"'/linux-rpi-3.2.27,g' kernel_module/Makefile