Ich versuche, einen zusammenhängenden Speicher zu verwenden, den ich reserviert habe, während ich beim Booten den Parameter "mem" an Linux übergebe.Reservieren von Speicher für DMA-Verwendung
Jetzt habe ich die physikalische Adresse dieses Speicherplatzes, den ich zuvor reserviert habe, und die Länge davon, und ich möchte diesen reservierten Platz für DMA-Zwecke in meinem Treiber nutzen.
Normalerweise würde ich dma_alloc_coherent()
verwenden, und wenn ich CMA verwenden würde, würde ich das auch verwenden, aber in diesem Fall ist es anders.
Nun habe ich gelesen, dass ein akzeptabler Weg, um einen physischen Raum des Abbildens virtuellen Raum auf Kernel ist ioremap
Und eine akzeptable Art und Weise der „Übernahme“ einen zusammenhängenden Raum für DMA-Zwecke zu verwenden ist dma_map_single
zu verwenden (Zuordnung für Busadresse)
Ich habe Probleme, die beiden zu kombinieren. ioremap
funktioniert und gibt eine virtuelle Adresse zurück. Nun, ich habe gelesen, dass dies keine gewöhnliche virtuelle Adresse ist und ich nur Zugriffsmethoden verwenden sollte, um aus diesem Speicher zu lesen/schreiben.
Das ist, wenn ich versuche, diese virtuelle Adresse an dma_map_single
übergeben, meldet es keinen Fehler, aber ich vermute, dass dies falsch ist.
Bin ich es richtig? Was kann ich tun, damit es so funktioniert, wie es sollte?
10x
Ich bin zu faul zu suchen, aber auf dieser Website passiert diese Frage einmal pro Jahr. – 0andriy
Danke. Vielleicht bin ich nicht geschickt in der Suche, aber ich habe verschiedene Varianten gesucht und gefunden, aber nicht meinen Fall. –