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/