
Recibo un error del kernel porque el controlador ppp está intentando acceder a una dirección no alineada (hay un puntero que apunta a una dirección no alineada). No estoy seguro del significado de dirección no alineada. ¿Significa que no es múltiple, 4 o está fuera del alcance de la RAM? Si mi sistema tiene un bus de 32 bits de ancho, dada una dirección, ¿cómo puedo saber si está alineado o no alineado?
Respuesta1
En resumen, una dirección no alineada es de tipo simple (por ejemplo, variable entera o de punto flotante) que es mayor que (normalmente) un byte y no es divisible uniformemente por el tamaño del tipo de datos que se intenta leer.
Address % Size != 0
Digamos que tiene este rango de memoria y lee 4 bytes:
+---------- 8 % 4 = 0, OK
|
______+______
| |
... 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--
* | @ | @ | @ | @ | * | * | * | * | @ | @ | @ | @ | * | * | *
--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--
|_______.______|
|
+--- 10 % 4 = 2, Unaligned
Más sobre el asunto enDocumentación/acceso-memoria-no alineada.txt.