2016-12-19 3 views
-1



Je développe un pilote SATA de bas niveau pour un système embarqué basé sur FPGA. Le pilote fonctionne bien. Lorsque je lis des secteurs du disque en utilisant la commande dd, je peux voir que la commande SCSI read (10) (opcode 0x28) est récupérée par mon driver de bas niveau, ce que je pense correct. Mais, lorsque j'écris des secteurs sur le disque en utilisant la commande dd, le pilote SCSI envoie la commande first read (10) (opcode 0x28) plusieurs fois puis quelques commandes write (10) (opcode 0x2A).

Quelqu'un peut-il m'expliquer, pourquoi le pilote SCSI envoie-t-il la commande read() pendant l'opération d'écriture?


Édité: Au cours d'une opération d'écriture de fichier, je peux voir que le pilote lit d'abord (mode DMA) de LBA 0 jusqu'à 8 secteurs. Ensuite, il écrit (DMA) sg blocs et puis il lit (PIO) des informations spécifiques au disque. Après cela, il prend quelques LBAs aléatoires et effectue plusieurs lectures (DMA), il s'arrête finalement en lisant les données spécifiques à l'appareil lu (PIO). C'est une séquence pour le fichier dd'ing 1KB. Le disque n'a aucune table de partition et aucun système de fichiers (vérifié à partir de l'utilitaire fdisk). Est-ce un comportement normal du conducteur? Si oui, ne diminue-t-il pas la vitesse de fonctionnement? La lecture globale du fichier est plus rapide que l'écriture en raison des lectures supplémentaires en écriture.

MerciConfusion dans l'opération d'écriture sur disque à l'aide de la commande DD

+0

Linux va rechercher les tables de partition lorsqu'un nouvel appareil est en ligne, mais il ne devrait pas répéter cette danse si vous avez laissé l'appareil connecté et lancer dd une seconde fois. –

+0

Oui, pour chaque "dd if = somefile.txt de = dev/sda bs = 1KB count = 1", la même séquence de commandes est exécutée soit la première fois, soit un nombre illimité de fois. L'appareil est toujours connecté à l'hôte. Devons-nous modifier quelque chose dans le pilote SCSI? Je n'ai rien changé dans le pilote SCSI J'ai juste initialisé une structure SCSI SHT et des fonctions connexes dans mon pilote de bas niveau. –

Répondre

1

Il est difficile de dire concrètement sans en savoir plus sur votre système. Deux possibilités viennent à l'esprit:

  1. Linux recherche des tables de partition. C'est probablement le cas si les lectures sont à LBA 0 et les premiers blocs logiques, ou si les lectures sont à la toute fin du périphérique, où il y a un en-tête GPT secondaire.

  2. Vous êtes en train de créer un fichier sur un système de fichiers et le système de fichiers lit des métadonnées non mises en cache. Fait-il cette séquence chaque fois que vous exécutez dd?

+0

Salut, merci pour la réponse. Je pense que la première raison que vous avez mentionnée est partiellement correcte. J'ai édité la question et ajouté plus d'informations sur le comportement du conducteur. –