RPi à partir de rien : Compilation et installation d’un système de base

RPi à partir de rien : Compilation et installation d’un système de base.

Version : Sans explication.
Distribution de travail : Kubuntu 9.10
Matériel de développement : Ordinateur portable
Article : « Linux from scratch – Construire un système complet » par Christophe Blaess – GNU/Linux Magazine n°155 de décembre 2012.
– Répertoire de travail :

[~] ➔ mkdir RaspberryPi
[~] ➔ cd RaspberryPi/

I) Buildroot.
1) Installation de buildroot :

[~/RaspberryPi] ➔ wget http://buildroot.uclibc.org/downloads/buildroot-2013.02.tar.bz2
[~/RaspberryPi] ➔ tar xvfj buildroot-2013.02.tar.bz2
[~/RaspberryPi] ➔ cd buildroot-2013.02/
[~/RaspberryPi/buildroot-2013.02] ➔

2) Préconfiguration :
1) Fichier de configuration :

[~/RaspberryPi/buildroot-2013.02] ➔ wget https://miniordi.hacktech.dev/noyau_config/config-buildroot
[~/RaspberryPi/buildroot-2013.02] ➔ mv config-buildroot .config

2) Création de la configuration :

[~/RaspberryPi/buildroot-2013.02] ➔ make menuconfig

– Sauvegarder la configuration par défaut.
3) Compilation :

[~/RaspberryPi/buildroot-2013.02] ➔ sudo make

4) Vérification :

[~/RaspberryPi/buildroot-2013.02] ➔ ls /usr/local/cross-rpi/usr/
arm-buildroot-linux-uclibcgnueabi  bin  include  lib  libexec  share
[~/RaspberryPi/buildroot-2013.02] ➔ cd ..

II) Noyau :
1) Téléchargement :

[~/RaspberryPi] ➔ git clone git://github.com/raspberrypi/linux.git raspberry-pi
[~/RaspberryPi] ➔ cd raspberry-pi/

2) Fichier de configuration :
– Télécharger le fichier :
https://github.com/raspberrypi/linux/blob/rpi-3.6.y/arch/arm/configs/bcmrpi_defconfig
et le copier ici : ~/RaspberryPi/raspberry-pi
– Renommage :

[~/RaspberryPi/raspberry-pi (rpi-3.6.y)] ➔ cp arch/arm/configs/bcmrpi_defconfig .config

3) Compilation :

[~/RaspberryPi/raspberry-pi (rpi-3.6.y)] ➔ make ARCH=arm CROSS_COMPILE=/usr/local/cross-rpi/usr/bin/arm-linux-

– Laisser les paramètres pas défauts
4) Vérification :

[~/RaspberryPi/raspberry-pi (rpi-3.6.y)] ➔ ls -l arch/arm/boot/zImage
-rwxr-xr-x 1 lesanglier lesanglier 2150088 2013-03-02 17:44 arch/arm/boot/zImage

III) Configuration de la carte mémoire.
1) Insérer la carte SD de 4 Mo dans le lecteur de carte mémoire.
2) Vérification :

[~] ➔ sudo fdisk -l
...
Disque /dev/mmcblk0: 3957 Mo, 3957325824 octets
61 têtes, 60 secteurs/piste, 2111 cylindres
Unités = cylindres de 3660 * 512 = 1873920 octets
Identifiant de disque : 0x00000000
Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/mmcblk0p1   *           3        2112     3860480    b  W95 FAT32

– Si la carte mémoire est automatiquement détecté par l’ordinateur, démonter la carte mémoire :

[~] ➔ sudo umount /dev/mmcblk0p1

3) Création des partitions :
– Vérification :

[~] ➔ sudo fdisk /dev/mmcblk0
...
Commande (m pour l'aide): p
Disque /dev/mmcblk0: 3957 Mo, 3957325824 octets
61 têtes, 60 secteurs/piste, 2111 cylindres
Unités = cylindres de 3660 * 512 = 1873920 octets
Identifiant de disque : 0x00000000
Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/mmcblk0p1   *           3        2112     3860480    b  W95 FAT32

– Effacement de la partion par défaut :

Commande (m pour l'aide): d
Partition sélectionnée 1

– Création de la partition « Boot » bootable de 128 Mo en format Windows 95 :

Commande (m pour l'aide): n
Commande d'action
   e   étendue
   p   partition primaire (1-4)
p
Numéro de partition (1-4): 1
Premier cylindre (1-2111, par défaut 1):
Utilisation de la valeur par défaut 1
Dernier cylindre, +cylindres or +taille{K,M,G} (1-2111, par défaut 2111): +128M
Commande (m pour l'aide): t
Partition sélectionnée 1
Code Hexa (taper L pour lister les codes): c
Type système de partition modifié de 1 à c (W95 FAT32 (LBA))
Commande (m pour l'aide): a
Numéro de partition (1-4): 1

– Création de la partition « Root » Linux :

Commande (m pour l'aide): n
Commande d'action
   e   étendue
   p   partition primaire (1-4)
p
Numéro de partition (1-4): 2
Premier cylindre (74-2111, par défaut 74):
Utilisation de la valeur par défaut 74
Dernier cylindre, +cylindres or +taille{K,M,G} (74-2111, par défaut 2111):
Utilisation de la valeur par défaut 2111

– Vérification :

Commande (m pour l'aide): p
Disque /dev/mmcblk0: 3957 Mo, 3957325824 octets
61 têtes, 60 secteurs/piste, 2111 cylindres
Unités = cylindres de 3660 * 512 = 1873920 octets
Identifiant de disque : 0x00000000
Périphérique Amorce  Début        Fin      Blocs     Id  Système
/dev/mmcblk0p1   *           1          73      133560    c  W95 FAT32 (LBA)
/dev/mmcblk0p2              74        2111     3729540   83  Linux

– Ecriture des modification sur la carte mémoire :

Commande (m pour l'aide): w
La table de partitions a été altérée!
Appel de ioctl() pour relire la table de partitions.

4) Formatage :
– Partition /Boot :

[~] ➔ sudo /sbin/mkfs.vfat -n Boot /dev/mmcblk0p1
mkfs.vfat 3.0.3 (18 May 2009)

– Partition /Root :

[~] ➔ sudo /sbin/mkfs.ext2 -L Root /dev/mmcblk0p2
mke2fs 1.41.9 (22-Aug-2009)
Étiquette de système de fichiers=Root
Type de système d'exploitation : Linux
Taille de bloc=4096 (log=2)
Taille de fragment=4096 (log=2)
233392 i-noeuds, 932385 blocs
46619 blocs (5.00%) réservés pour le super utilisateur
Premier bloc de données=0
Nombre maximum de blocs du système de fichiers=956301312
29 groupes de blocs
32768 blocs par groupe, 32768 fragments par groupe
8048 i-noeuds par groupe
Superblocs de secours stockés sur les blocs :
        32768, 98304, 163840, 229376, 294912, 819200, 884736
...

5) Enlever et réinsérer la carte mémoire.
– Monter la carté mémoire.
– Vérification :

[~] ➔ ls -l /media/*oot
/media/Boot:
total 0
/media/Root:
total 16
drwx------ 2 root root 16384 2013-03-02 20:43 lost+found

IV) Installation du micrologiciel:
1) Téléchargement :

[~/RaspberryPi] ➔ git clone https://github.com/raspberrypi/firmware

2) Vérification :

[~/RaspberryPi] ➔ ls firmware/boot/
bootcode.bin   fixup_cd.dat  fixup_x.dat           kernel.img        start_cd.elf  start_x.elf
COPYING.linux  fixup.dat     kernel_emergency.img  LICENCE.broadcom  start.elf

3) Copie des fichiers :

[~/RaspberryPi] ➔ sudo cp firmware/boot/bootcode.bin /media/Boot/
[~/RaspberryPi] ➔ sudo cp firmware/boot/start.elf /media/Boot/
[~/RaspberryPi] ➔ sudo cp firmware/boot/fixup.dat /media/Boot/
[~/RaspberryPi] ➔ sudo cp raspberry-pi/arch/arm/boot/zImage /media/Boot/kernel.img
[~/RaspberryPi] ➔ sudo echo "gpu_mem=32" > /media/Boot/config.txt

4) Vérification :

[~/RaspberryPi] ➔ ls -l /media/Boot/
total 4764
-rwxr-xr-x 1 lesanglier root   17764 2013-03-02 21:34 bootcode.bin
-rwxr-xr-x 1 lesanglier root      11 2013-03-02 21:37 config.txt
-rwxr-xr-x 1 lesanglier root    5896 2013-03-02 21:35 fixup.dat
-rwxr-xr-x 1 lesanglier root 2150088 2013-03-02 21:36 kernel.img
-rwxr-xr-x 1 lesanglier root 2694644 2013-03-02 21:34 start.elf

5) Démonter la carte mémoire :

[~/RaspberryPi] ➔ sudo umount /media/Boot/
[~/RaspberryPi] ➔ sudo umount /media/Root/

6) Enlever la carte mémoire.
7) Teste :
– Insérer la carte mémoire dans le Raspberry Pi
– Allumer le RPi
– Le message de log apparaît :

...
Kernel panic - not syncing
...

V) Installation de base du système.
1) Insérer la carte mémoire et monter la partition Root.
2) Création des répertoires :

[~/RaspberryPi] ➔ cd /media/Root/
[/media/Root] ➔ ls
lost+found
[/media/Root] ➔ sudo mkdir bin dev etc home lib mnt proc root sbin sys tmp usr var
[/media/Root] ➔ sudo mkdir dev/pts etc/init.d usr/bin usr/sbin

3) Installation des modules :
– Installation :

[/media/Root] ➔ cd /home/lesanglier/RaspberryPi/raspberry-pi/
[~/RaspberryPi/raspberry-pi (rpi-3.6.y)] ➔ sudo make ARCH=arm INSTALL_MOD_PATH=/media/Root/ modules_install
  INSTALL block/deadline-iosched.ko
  INSTALL crypto/aes_generic.ko
  INSTALL crypto/arc4.ko
...
  INSTALL sound/drivers/snd-dummy.ko
  INSTALL sound/drivers/snd-virmidi.ko
  DEPMOD  3.6.11-glmf+

– Vérification :

[~/RaspberryPi/raspberry-pi (rpi-3.6.y)] ➔ ls /media/Root/lib/modules/3.6.11-glmf+/
build          modules.alias.bin  modules.dep          modules.inputmap   modules.order     modules.symbols      source
kernel         modules.builtin    modules.dep.bin      modules.isapnpmap  modules.pcimap    modules.symbols.bin
modules.alias  modules.ccwmap     modules.ieee1394map  modules.ofmap      modules.seriomap  modules.usbmap

VI) Busybox :
1) Téléchargement :

[~/RaspberryPi] ➔ wget http://busybox.net/downloads/busybox-1.21.0.tar.bz2
[~/RaspberryPi] ➔ tar xvj busybox-1.21.0.tar.bz2
[~/RaspberryPi] ➔ cd busybox-1.21.0/

2) Configuration :
– Téléchargement :

[~/RaspberryPi/busybox-1.21.0] ➔ https://miniordi.hacktech.dev/noyau_config/config-busybox-1.20.2

– Configuration :

[~/RaspberryPi/busybox-1.21.0] ➔ mv config-busybox-1.20.2 .config
[~/RaspberryPi/busybox-1.21.0] ➔ make menuconfig

Valider les paramètres par défaut.
– Compilation :

[~/RaspberryPi/busybox-1.21.0] ➔ sudo make CROSS_COMPILE=/usr/local/cross-rpi/usr/bin/arm-linux-

– Installation :

[~/RaspberryPi/busybox-1.21.0] ➔ sudo make CROSS_COMPILE=/usr/local/cross-rpi/usr/bin/arm-linux- install

– Vérification :

[~/RaspberryPi/busybox-1.21.0] ➔ ls -l busybox
-rwxr-xr-x 1 root root 891792 2013-03-02 22:19 busybox
[~/RaspberryPi/busybox-1.21.0] ➔ ls /media/Root/bin/
[         chvt           dos2unix    fsync     ipcs      md5sum      openvt         resize        sha512sum  tftp         uptime
...
chrt      dnsdomainname  free        ipcrm     lzopcat   od          reset          sha3sum       test       unzip        zcat
[~/RaspberryPi/busybox-1.21.0] ➔ ls /media/Root/sbin/
acpid       chpasswd    fbsplash     hwclock    iproute   mdev        nbd-client    rmmod              swapon       ubiupdatevol
...
chat        fbset       httpd        iplink     man       nandwrite   remove-shell  swapoff            ubirsvol

VII) Libraries :

[~/RaspberryPi/busybox-1.21.0] ➔  cd /media/Root/lib/
[~/RaspberryPi] ➔ cd /media/Root/lib/

– Copie :

[/media/Root/lib] ➔ sudo cp -a /usr/local/cross-rpi/usr/arm-buildroot-linux-uclibcgnueabi/sysroot/lib/* .

– Vérification :

[/media/Root/lib] ➔ ls
ld-uClibc-0.9.33.2.so  libc.so.0          libgcc_s.so.1       libnsl.so.0             libresolv.so.0            libthread_db.so.1
ld-uClibc.so.0         libdl-0.9.33.2.so  libm-0.9.33.2.so    libpthread-0.9.33.2.so  librt-0.9.33.2.so         libuClibc-0.9.33.2.so
libcrypt-0.9.33.2.so   libdl.so.0         libm.so.0           libpthread.so.0         librt.so.0                libutil-0.9.33.2.so
libcrypt.so.0          libgcc_s.so        libnsl-0.9.33.2.so  libresolv-0.9.33.2.so   libthread_db-0.9.33.2.so  libutil.so.0

VIII) Post-configuration :
– Fichier initab :

[/media/Root/etc] ➔ sudo https://miniordi.hacktech.dev/noyau_config/inittab

– Fichier rcS :

[/media/Root/etc] ➔ cd init.d
[/media/Root/etc/init.d] ➔ sudo https://miniordi.hacktech.dev/noyau_config/rcS
[/media/Root/etc/init.d] ➔ chmod +x rcS

– Clavie en français :

[/media/Root/etc/init.d] ➔ cd ..
[/media/Root/etc] ➔ sudo https://miniordi.hacktech.dev/noyau_config/azerty.kmap

Ouvrir :

/etc/init.d/rcS

Ajouter :

loadkmap < /etc/azerty.kmap

IX) Teste.
- Demonter et tester la carte sur le RPi.
Si l'invite ne s'affiche pas, appuyer sur [Entrée]
- Arrêter le système :

/ # mount / -o ro,remount ; halt

X) Liens :
http://www.blaess.fr/christophe/articles/files-glmf/

Leave a Reply

You must be logged in to post a comment.