ARM Linux中的非对齐内存访问(Alignment trap警告的原因)

本文介绍了ARM处理器中非对齐内存访问的问题,特别是在ARMv5架构下,非对齐访问可能导致Alignment trap警告或异常。通过调整/proc/cpu/alignment配置,可以设置内核如何处理此类问题,如仅发出警告(UM_WARN)、尝试修复(UM_FIXUP)或发送SIGBUS信号。在ARMv6及以上版本,CPU默认支持非对齐访问,但仍需注意某些复合指令的处理。避免非对齐访问的方法包括使用char类型读写和利用memcpy等函数。
摘要由CSDN通过智能技术生成

ARMv5指令集的CPU(一般是arm9架构)默认不支持非对齐内存访问,ARMv6及以上的CPU默认支持处理大部分的非对齐内存地址访问。对齐指的是起始地址是一个word长度的整数倍,通常是4字节对齐。
通过设置/proc/cpu/alignment文件内容可修改内核中对非对齐地址访问的处理。

root@(none):~# cat /proc/cpu/alignment
User:           3905290
System:         0
Skipped:        0
Half:           0
Word:           0
DWord:          2672136
Multi:          1233154
User faults:    2 (fixup)

这个文件中最后一行"User faults"即是内核中如何处理非对齐的内存地址访问,这个值是一个位图

#define UM_WARN  (1 << 0)
#define UM_FIXUP (1 << 1)
#define UM_SIGNAL (1 << 2)

UM_WARN:只给出“Alignment trap”警告。
UM_FIXUP:尝试正确处理非对齐的内存地址。
UM_SIGNAL:发生非对齐地址访问时,发送SIGBUS信号通知相应进程。
几种处理方式可以进行组合,例如设置为(UM_WARN | UM_F

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值