
Я получаю kernel oops, потому что драйвер ppp пытается получить доступ к невыровненному адресу (есть указатель, указывающий на невыровненный адрес). Я не уверен в значении невыровненного адреса. Это означает не кратно или 4 или вне области действия ОЗУ? Если в моей системе шина шириной 32 бита, как узнать, выровнен он или нет, если задан адрес?
решение1
Короче говоря, невыровненный адрес — это адрес простого типа (например, целочисленная или плавающая переменная), который больше (обычно) байта и не делится нацело на размер типа данных, который пытаемся прочитать.
Address % Size != 0
Допустим, у вас есть этот диапазон памяти и вы считываете 4 байта:
+---------- 8 % 4 = 0, OK
|
______+______
| |
... 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--
* | @ | @ | @ | @ | * | * | * | * | @ | @ | @ | @ | * | * | *
--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--
|_______.______|
|
+--- 10 % 4 = 2, Unaligned
Подробнее об этом вДокументация/невыровненный-доступ-к-памяти.txt.