我收到内核错误,因为 ppp 驱动程序正在尝试访问未对齐的地址(有一个指针指向未对齐的地址)。我不确定未对齐地址的含义。这意味着不是多个或 4 个或超出 RAM 范围?如果我的系统有一个 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
有关此事的更多信息,请参见文档/unaligned-memory-access.txt。