J'ai acheté un livre intitulé "l'architecture x86 apprise avec mon propre émulateur". Le Makefile de cet exemple de code fait référence à la chaîne d'outils incluse (gcc, etc.) et l'outil était pour Windows. Je n'aime pas développer sous Windows pour des raisons religieuses, j'ai donc décidé de développer un émulateur x86 sur mon Manjaro habituel (environnement Linux basé sur Archlinux).
Dans cet article, j'expliquerai comment utiliser l'exemple de code modifié pour Manjaro et la partie modifiée.
$ sudo pacman -S git gcc nasm binutils qemu
$ git clone https://github.com/Kenta11/x86-emulator-book-Manjaro
Les différences par rapport à l'exemple de code officiellement distribué sont les suivantes.
Dans l'exemple de code distribué, gcc, etc. ont été inclus et référencés.
--Avant (à partir de tolset_p86 / emu4.2 / Makefile)
TARGET = px86.exe
OBJS = main.o emulator_function.o instruction.o modrm.o io.o bios.o
Z_TOOLS = ../z_tools
CC = $(Z_TOOLS)/mingw32-gcc/bin/gcc
CFLAGS += -Wall
.PHONY: all
all :
make $(TARGET)
%.o : %.c Makefile
$(CC) $(CFLAGS) -c $<
$(TARGET) : $(OBJS) Makefile
$(CC) -o $@ $(OBJS)
J'ai remplacé l'outil référencé par celui installé avec pacman
et ajouté une règle que je pensais être plus utile.
--Après (depuis chapitre4 / section2 / Makefile)
TARGET = px86
PROGRAM = subroutine32.bin
OBJS = main.o emulator_function.o instruction.o modrm.o io.o bios.o
CC = gcc
ASM = nasm
CFLAGS += -O2 -Wall -Wextra
.PHONY: all run clean
all : $(TARGET) $(PROGRAM)
run : $(TARGET) $(PROGRAM)
./$(TARGET) -q $(PROGRAM)
$(TARGET) : $(OBJS)
$(CC) -o $@ $(OBJS)
%.o : %.c
$(CC) $(CFLAGS) -c $<
%.bin : %.asm
$(ASM) -f bin -o $@ $<
clean :
rm -f $(TARGET) $(PROGRAM) $(OBJS)
Dans le cas de ce Makefile, j'ai ajouté run and clean. run exécute le programme de test sur l'émulateur. Clean supprime également les produits (fichiers objets, binaires d'émulateur, programmes de test).
Comme boots était un binaire pour Windows sans exception, j'ai créé un programme qui effectue un traitement similaire à l'original (chapitre4 / section5. tree / master / chapitre4 / section5)). Le livre montre le contenu de FAT16, mais toutes les mémoires USB autour de moi étaient formatées avec FAT32. Par conséquent, FAT32 peut également être affiché. (Je me demande si les bottes d'origine peuvent également voir FAT32 ... je vérifierai plus tard)
Dans le livre, la sortie du programme d'assemblage par boot est modifiée pour exécuter le programme qui affiche la chaîne de caractères sur la machine réelle. Cependant, j'avais peur qu'il y ait eu un accident que l'ordinateur se soit cassé en raison d'une erreur dans le programme d'assemblage, alors je l'ai essayé à la place avec QEMU (émulateur). Mettez le programme d'assemblage pbr.asm dans chapitre4 / section6 et exécutez make
, et QEMU va Il lit pbr.bin et affiche le même résultat que la machine réelle.
-Depuis chapitre4 / section6 / Makefile
TARGET = pbr.bin
ASM = nasm
QEMU = qemu-system-x86_64
.PHONY: all clean
all : $(TARGET)
$(QEMU) $<
%.bin : %.asm
nasm $< -o $@
clean :
rm -f $(TARGET)
qemu-system-x86_64
, veuillez corriger la partie TARGET
du Makefile.Le gcc et les bottes inclus sont pour Windows et ne sont pas nécessaires pour Manjaro, je les ai donc supprimés. Je suis content car la taille du fichier est plus petite.
J'ai travaillé sur "l'architecture x86 apprise avec mon propre émulateur" avec Manjaro. Je ne pense pas que vous puissiez profiter du plaisir de la création progressive de l'émulateur 80386 lorsque vous lisez les pages d'autres livres (en particulier les livres japonais!). L'architecture x86 semble compliquée à première vue, mais après avoir lu ce livre, cela semble compliqué: P Bien sûr, cela s'est produit pour des raisons historiques, mais comme vous le lisez, pourquoi? J'ai pu en faire l'expérience. Je le recommanderais sans hésiter à tous ceux qui s'intéressent au fonctionnement des ordinateurs.
En remplaçant les outils référencés par l'exemple de code Makefile par ceux qui peuvent être installés avec le gestionnaire de packages de Manjaro, il est plus facile de les réutiliser dans un environnement Linux tout en étant plus petit que l'exemple de fichier ZIP de code d'origine. Si vous souhaitez travailler sur le contenu de ce livre sous Linux, veuillez utiliser l'exemple de code téléchargé sur GitHub.
Recommended Posts