Premiers pas avec Linux embarqué

Installation ou configuration

Instructions détaillées sur la configuration ou l’installation de Linux intégré.

** Émulation express polyvalente ARM sur Qemu **

Présentation de l’environnement :

Hébergeur gratuit :- 12.04

Version du noyau Linux : linux-4.4

version de la boîte occupée : 1.24.0

Chaîne d’outils du compilateur croisé : arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux gnu.tar.bz2

version de qemu : qemu-2.5

Téléchargement et installation de QEMU :

$ mkdir Source_Code
$ cd Source_Code
$ git clone git://git.qemu-project.org/qemu.git
$ cd qemu
$ git checkout remotes/origin/stable-2.5 -b stable-2.5
$ cd ../../
$ mkdir -p Binary_images/Qemu_Bin
$ cd Qemu_src/qemu
$ cd Source_Code/qemu
$ ./configure --target-list=arm-softmmu --prefix=/Path/to/your/Binary_images/Qemu_Bin
$ make
$ make install

Installation de la chaîne d’outils ARM Cross_Compiler :

Télécharger le code source : http://sourcery.mentor.com/public/gnu_toolchain/arm-none-linux-gnueabi/

Télécharger -> arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

$ mkdir -p Binary_images/ARM_Cross_Tools
$ cd Binary_images/ARM_Cross_Tools
$ tar xvf arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

Téléchargez le code source du noyau Linux :

$ cd Source_Code
$ git clone https://github.com/torvalds/linux
$ cd linux
# Switch to version v4.4
$ git checkout v4.4

Préparez la compilation : Charger la configuration par défaut pour la carte cible, c’est-à-dire vexpress_defconfig.

$ make ARCH=arm CROSS_COMPILE=/path/to/your/Binary_images/ARM_Cross_Tools/arm-2014.05/bin/arm-none-linux-gnueabi- vexpress_defconfig

Ajustez ou activez certains paramètres pour l’instant non requis à l’avenir, cela pourrait être nécessaire.

$ make ARCH=arm CROSS_COMPILE=path to your/Binary_images/ARM_Cross_Tools/arm-2014.05/bin/arm-none-linux-gnueabi- menuconfig

Compiler le noyau

$ make ARCH=arm CROSS_COMPILE=/path/to/your/Binary_images/ARM_Cross_Tools/arm-2014.05/bin/arm-none-linux-gnueabi- all

Vérifiez que qemu et le noyau peuvent s’exécuter correctement :

~/Binary_images/Qemu_Bin/qemu-system-arm -M vexpress-a9 -m 512M -dtb ./arch/arm/boot/dts/vexpress-v2p-ca9.dtb -kernel ./arch/arm/boot/zImage -append “console=ttyAMA0” -serial stdio

Compilation de Busybox pour ARM sur QEMU :

Téléchargez Busybox depuis https://busybox.net/downloads/

$ cd busybox
$ make ARCH=arm CROSS_COMPILE=/path/to/your/Binary_images/ARM_Cross_Tools/arm-2014.05/bin/arm-none-linux-gnueabi- defconfig

Activer ou désactiver certains paramètres comme mentionné ci-dessous

$make ARCH=arm CROSS_COMPILE=/path/to/your/Binary_images/ARM_Cross_Tools/arm-2014.05/bin/arm-none-linux-gnueabi- menuconfig

Paramètres Busybox -> Options de construction ->

[*] Construisez BusyBox en tant que binaire statique (pas de bibliothèques partagées)

$ make ARCH=arm CROSS_COMPILE=/path/to/your/Binary_images/ARM_Cross_Tools/arm-2014.05/bin/arm-none-linux-gnueabi- install

La commande ci-dessus construit Busybox et crée un répertoire appelé _install contenant l’arborescence du système de fichiers racine. Ensuite, vous devez créer un dossier pour monter les systèmes de fichiers virtuels tels que les scripts proc, sys et init.

$ mkdir -p _install/proc/
$ mkdir -p _install/sys/
$ mkdir -p _install/tmp/
$ mkdir -p _install/root/
$ mkdir -p _install/var/
$ mkdir -p _install/mnt/
$ mkdir -p _install/etc/init.d/

Créez un nom de fichier rcS dans le dossier _install/etc/init.d/ et modifiez le fichier rcS avec le contenu ci-dessous

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
mount -a
echo /sbin/mdev /proc/sys/kernel/hotplug
mdev -s

Créez un nom de fichier inittab dans _install/etc/ et modifiez-le avec le contenu ci-dessous.

# /etc/inittab
::sysinit:/etc/init.d/rcS
console::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::restart:/sbin/init

Téléchargez et copiez le fichier fstab dans /etc/. dossier dans rootfs

$ wget clone https://github.com/mahadevvinay/Embedded_Stuff/tree/master/Embedded_Linux_Virtual_Setup/fstab

Créez un fichier image ext3 et copiez tous les fichiers de notre dossier _install vers l’image :

$ dd if=/dev/zero of=RootFS.ext3 bs=1M count=$((32))
$ sudo mkfs.ext3 RootFS.ext3
$ mkdir tmpfs
$ sudo mount -t ext3 RootFS.ext3 tmpfs/ -o loop
$ sudo cp -r _install/* tmpfs/.
$ sudo umount tmpfs

La commande complète consiste à émuler :

~/Qemu_/Binary_images/Qemu_Bin/bin/qemu-system-arm -M vexpress-a9 -dtb path to your linux folder/arch/arm/boot/dts/vexpress-v2p-ca9.dtb -kernel path to your linux folder/arch/arm/boot/zImage -append root=/dev/mmcblk0 console=ttyAMA0 -sd path to your busybox-1.24.0/RootFS.ext3 -serial stdio

La configuration ci-dessus est pour Qemu, la même procédure peut être utilisée pour configurer n’importe quelle cible intégrée.