2009-09-28 6 views
1

Je travaille sur processeur ARM 9 avec 266 Mhz avec support fpu et 32 ​​Mo de RAM, je cours linux dessus. Je veux l'émuler sur pc (j'ai linux et windows disponibles sur pc). Je veux profiler mes comptes de cycles, exécuter mes exécutables croisés directement dans l'émulateur. Existe-t-il un projet opensource disponible pour créer facilement un émulateur? Combien de changement/code/effort ai-je besoin d'écrire pour créer un émulateur personnalisé? Ce serait génial si vous me fournissez des tutoriels d'autres références pour obtenir un coup d'envoi.Comment créer un émulateur de périphérique personnalisé ARM9?

Merci & Cordialement,

ensoleillé.

Répondre

2

Vous devez donner un coup d'oeil à QEMU. Je ne comprends pas, pourquoi avez-vous besoin d'un émulateur complet?

Vous pouvez déjà beaucoup de profilage sans émulateur. Quels sont les gains que vous attendez d'avoir un émulateur de système?

+0

mon périphérique embarqué n'a aucune connectivité à l'exception du connecteur série, il est très difficile de transférer du code à chaque fois. Il faut 10 à 15 minutes pour transférer le code sur l'appareil. – SunnyShah

+0

pouvez-vous s'il vous plaît dites-moi que, combien d'efforts faut-il pour faire émulateur avec qemu? – SunnyShah

4

Voulez-vous émuler uniquement le processeur ou une machine complète?

Emuler une CPU est très facile, il suffit de définir une structure contenant tous les registres CPU, créez un tableau pour simuler la RAM et puis juste émulent comme ceci:

cpu_ticks = 0; // counter for cpu cycles 

    while (true) { 

     opcode = RAM[CPU.PC++]; // Fetch opcode and increment program counter 

     switch (opcode) { 

     case 0x12: // invented opcode for "MOV A,B" 
      CPU.A = CPU.B; 
      cpu_ticks += 4; // imagine you need 4 ticks for this operation 
      set_cpu_flags_mov(); 
      break; 

     case 0x23: // invented opcode for "ADD A, #" 
      CPU.A += RAM[CPU. PC++]; // get operand from memory 
      cpu_ticks += 8; 
      set_cpu_flags_add(); 
      break; 

     case 0x45: // invented opcode for "JP Z, #" 
      if (CPU.FLAGS.Z) CPU.PC=RAM[CPU.PC++]; // jump 
      else CPU.PC++; // continue 
      cpu_ticks += 12; 
      set_cpu_flags_jump(); 
      break; 
     ... 
     } 

     handle_interrupts(); 

    } 

Emuler une machine entière est beaucoup plus difficile .. vous devez émuler des contrôleurs LCD, des registres mappés en mémoire, des contrôleurs de banques de mémoire, des DMA, des périphériques d'entrée, du son, des E/S ... vous avez probablement besoin d'un vidage du BIOS et du système d'exploitation ... Je ne sais pas le processeur ARM, mais si il a des pipelines, des caches et de telles choses, les choses deviennent plus compliquées pour le calendrier.

Si vous avez toutes les pièces de matériel entièrement documentées, il n'y a pas de problème mais si vous avez besoin de faire de l'ingénierie inverse ou de deviner comment la machine émulée fonctionne ... vous aurez du mal.

Commencez ici: http://infocenter.arm.com/help/index.jsp et téléchargez le «Manuel de référence technique» pour votre processeur.

Et pour les questions d'émulation générale: http://www.google.es/search?q=how+to+write+an+emulator

+0

Eh bien, je veux émuler toute la machine. Merci pour la réponse détaillée. – SunnyShah

+0

J'ai fait un émulateur Nintendo Gameboy en javascript, le code est très simple et facile, peut-être qu'il vous aide à comprendre le fonctionnement d'un émulateur. http://www.codebase.es Cette version est un peu obsolète, dans quelques jours, je vais télécharger une nouvelle version avec beaucoup de corrections de bugs et une compatibilité améliorée. – Peter

+3

Bien que cette approche soit essentiellement correcte, il est important de noter qu'il s'agit d'une émulation intrinsèquement inexacte. Il sérialise les choses qui ne seraient pas sérialisées dans un vrai processeur. Par exemple, les opcodes ne sont pas atomiques dans ARM 9, ils sont faits sur son pipeline en 5 étapes, donc une interruption peut survenir à n'importe quel stade du pipeline. Également, écrire un émulateur pour un CPU moderne est une tâche non triviale. d conseil contre le code de production (mais cela pourrait être une bonne expérience d'apprentissage). – Falaina

Questions connexes