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/