2017-10-17 10 views
-1

J'écris une application UEFI qui devrait être capable d'écrire beaucoup de données sur disque. Je connais les limites de taille de fichier FAT-32 et le nombre de fichiers par répertoire, etc. Cela ne devrait pas être le problème. La zone de mémoire que j'essaie d'écrire est marquée comme utilisable par la carte de mémoire et je peux la lire/écrire sans problème, mais après une certaine quantité de données mon vm redémarre juste sans aucun message d'erreur. La ligne suivante fait des problèmes:EFI_FILE_HANDLE-> Écrire des plantages lors de l'écriture de plus d'environ 3,4 GiB

uefi_call_wrapper(handle->Write, 3, handle, size, content); 

poignée est initialisé quelques lignes plus tôt, la taille est toujours max 128MiB et le contenu d'une zone de mémoire valide avec un accès en lecture/écriture. J'ai déjà réécrit tout le thin sur Windows avec EDK2 et j'ai eu les mêmes problèmes.

Quelqu'un peut-il m'aider avec ceci? Merci d'avance et passez une bonne soirée

+0

Quelle erreur obtenez-vous? –

+0

Je ne reçois aucune erreur, le vm redémarre juste et sur vrai hw il se bloque et rien d'autre ne se passe ... – AlexRoot

+0

Quel est le type de 'handle'? Est-ce que Write fonctionne quand vous l'appelez avec une taille plus petite? Quelle est la taille à laquelle il commence à échouer? Etes-vous sûr que le redémarrage se produit dans l'appel à écrire et non après son retour? – prl

Répondre

0

Salut les gars et merci pour votre réponse. L'argument size est un pointeur. Je viens de trouver la solution au problème. Je ne savais pas que je devais réinitialiser le minuteur de surveillance. Après avoir appelé uefi_call_wrapper(ST->BootServices->SetWatchdogTimer, 4, 0, 0, 0, NULL); tout fonctionne comme prévu

Cheers!

1

En supposant que handle est un pointeur vers EFI_FILE_PROTOCOL, le paramètre BufferSize à écrire est transmis par référence. Lorsque la fonction renvoie, BufferSize contient le nombre d'octets écrits. Vous n'avez pas donné assez de contexte à votre question, mais il semble que vous la transmettez en valeur.