
Ich bekomme Kernel-Oops, weil der PPP-Treiber versucht, auf eine nicht ausgerichtete Adresse zuzugreifen (es gibt einen Zeiger, der auf eine nicht ausgerichtete Adresse zeigt). Ich bin mir nicht sicher, was eine nicht ausgerichtete Adresse bedeutet. Bedeutet es „kein Vielfaches“ oder „4“ oder „außerhalb des RAM-Bereichs“? Wenn mein System einen 32-Bit breiten Bus hat, wie kann ich bei einer gegebenen Adresse wissen, ob sie ausgerichtet oder nicht ausgerichtet ist?
Antwort1
Kurz gesagt handelt es sich bei einer nicht ausgerichteten Adresse um eine Adresse eines einfachen Typs (z. B. eine Ganzzahl- oder Gleitkommavariable), die größer als (normalerweise) ein Byte ist und nicht gleichmäßig durch die Größe des Datentyps teilbar ist, den man zu lesen versucht.
Address % Size != 0
Angenommen, Sie haben diesen Speicherbereich und lesen 4 Bytes:
+---------- 8 % 4 = 0, OK
|
______+______
| |
... 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--
* | @ | @ | @ | @ | * | * | * | * | @ | @ | @ | @ | * | * | *
--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--
|_______.______|
|
+--- 10 % 4 = 2, Unaligned
Mehr zum Thema inDokumentation/unaligned-memory-access.txt.