- Obtention et installation de SystemC 2.3.1
Pour commancer, téléchargez la version 2.3.1 de SystemC depuis le dépôt officiel et compilez-la.
wget https://www.accellera.org/images/downloads/standards/systemc/systemc-2.3.1.tgz
tar xzf systemc-2.3.1.tgz
cd systemc-2.3.1
mkdir build && cd build
export CXX=g++
../configure --prefix=/opt/systemc-2.3.1
make -j$(nproc)
sudo make install
La variable CXX définit le compilateur C++. L'option --prefix spécifie le répertoire d'installation.
- Compilation et exécution d'une démo SystemC
Téléchargez les fichiers d'exemple liés à la simulation et adaptez la configuraton de construction.
wget https://caslab.ee.ncku.edu.tw/dokuwiki/_media/course:ca:106a:ca_lab_attachedfiles.zip
unzip ca_lab_attachedfiles.zip
cd CA_LAB_AttachedFiles/LAB4/SystemC_Module
Modifiez le fichier Makefile pour pointer vers votre installation SystemC et le compilateur.
# Extraits du Makefile
CXX := g++ -std=c++11
SYSTEMC_DIR := /opt/systemc-2.3.1
Compilez et exécutez la démo.
make -j$(nproc)
export LD_LIBRARY_PATH=/opt/systemc-2.3.1/lib-linux64
./qsysbridge
- Construction de l'environnement QEMU pour ARM
Obtenez et compilez une version spécifique de QEMU ciblant l'architecture ARM.
git clone https://github.com/qemu/qemu.git
cd qemu
git checkout v9.0.0
mkdir build_arm && cd build_arm
../configure --target-list="arm-softmmu,arm-linux-user" --prefix=/opt/qemu-arm
make -j$(nproc)
sudo make install
Les cibles arm-softmmu et arm-linux-user génèrent respectivement l'émulateur système et l'émulateur en espace utilisateur.
- Préparation de l'environnement de compilation croisée pour ARM
Installez les outils de compilation croisée nécessaires.
sudo apt-get install gcc-arm-linux-gnueabi
Vérifiez l'installation en compilant un programme simple.
// fichier: hello.c
#include <stdio.h>
int main(void) {
printf("Bonjour depuis ARM!\n");
return 0;
}
arm-linux-gnueabi-gcc hello.c -o hello_arm
/opt/qemu-arm/bin/qemu-arm -L /usr/arm-linux-gnueabi/lib ./hello_arm
Si des erreurs de bibliothèques apparaissent, copiez les fichiers .so manquants dans un répertoire accessible et définissez LD_LIBRARY_PATH.
- Compilation du noyau Linux et des utilitaires BusyBox
5.1 Noyau Linux
Téléchargez les sources du noyau Linux 5.10 et utilisez une configuration de base pour ARM.
wget https://github.com/torvalds/linux/archive/refs/tags/v5.10.tar.gz
tar xzf v5.10.tar.gz
cd linux-5.10
make ARCH=arm vexpress_defconfig
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm -j$(nproc)
Les fichiers zImage et les arborescences de périphériques (.dtb) seront générés dans arch/arm/boot/.
5.2 BusyBox
Construisez BusyBox pour fournir les commandes de base du système.
wget https://busybox.net/downloads/busybox-1.36.0.tar.bz2
tar xf busybox-1.36.0.tar.bz2
cd busybox-1.36.0
make defconfig
make CROSS_COMPILE=arm-linux-gnueabi- -j$(nproc)
make install CROSS_COMPILE=arm-linux-gnueabi-
Les fichiers installés se trouvent dans le répertoire _install.
- Création du système de fichiers racine (rootfs)
Assemblez un système de fichiers minimal contenant BusyBox, les bibliothèques et les nœuds de périphériques.
mkdir -p rootfs/{dev,etc/init.d,lib,proc,sys,root}
cp -r busybox-1.36.0/_install/* rootfs/
cp -P /usr/arm-linux-gnueabi/lib/* rootfs/lib/
sudo mknod rootfs/dev/tty1 c 4 1
sudo mknod rootfs/dev/tty2 c 4 2
dd if=/dev/zero of=rootfs.ext3 bs=1M count=256
mkfs.ext3 rootfs.ext3
sudo mount -t ext3 rootfs.ext3 /mnt
sudo cp -r rootfs/* /mnt
sudo umount /mnt
- Lancement de QEMU avec le système Linux ARM
Démarrez l'émulateur avec le noyau, l'arborescence de périphériques et le système de fichiers racine.
/opt/qemu-arm/bin/qemu-system-arm -M vexpress-a9 -m 512M \
-kernel linux-5.10/arch/arm/boot/zImage \
-dtb linux-5.10/arch/arm/boot/dts/vexpress-v2p-ca9.dtb \
-nographic -append "root=/dev/mmcblk0 console=ttyAMA0" -sd rootfs.ext3
L'option -M spécifie la machine virtuelle. Le noyau, l'initrd ou le disque racine peuvent être ajustés selon les besoins.
- Intégration d'un composant matériel personnalisé dans QEMU
Pour ajouter un nouveau périphérique virtuel, modifiez le code source de QEMU, reconstruisez-le et mettez à jour le noyau et le système de fichiers si nécessaire.
# Exemple de structure de commande pour reconstruire
cd qemu/build_arm
make -j$(nproc)
sudo make install
cd ../../linux-5.10
make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm -j$(nproc)
# Mettre à jour le rootfs et relancer QEMU
La personnalisation implique généralement l'ajout de pilotes dans le noyau ou de modules chargeables.