
ppp ドライバーが非整列アドレスにアクセスしようとしているため、カーネル エラーが発生します (非整列アドレスを指すポインターがあります)。非整列アドレスの意味がよくわかりません。倍数でも 4 でも RAM スコープ外でもないという意味ですか? システムに 32 ビット幅のバスがある場合、アドレスが与えられたときに、それが整列されているか、整列されていないかをどのように知ることができますか?
答え1
簡単に言うと、非整列アドレスとは、(通常は) 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。