请稍侯

Alignment trap报错问题

2013年 07月04日
更多

在设备中添加ipv6时,在运行ping6测回环时,出现了alignment trap的报错。在内核编译中寻找没有找到配置的问题,最终在网上找到了下面的内容,整理如下,主要是在arm上没有字节对齐引发的问题

在基于arm的linux系统中,当运行某个应用程序时,可能会出现Alignment trap的错误。以下是出现的一个典型提示:

            Alignment trap: standalone-640- (1357) PC=0x00094ab8 Instr=0xe5810000
Address=0x40e22532 FSR 0x813 Bus error

这主要是应用程序里的数据结构没有按照4字节对齐。虽然arm也支持2字节的Thumb指令,但是必须进入到该工作模式下才生效。不过linux下有参数 可以设置,使得arm能够支持2字节对齐。不过此时arm是通过异常处理,切换到Thumb状态下进行工作,运行完成后又需要切换到正常的4字节模式。因 此执行程序时,会比较慢,影响性能。所以在写arm的linux程序时,最好遵守4字节模式。Linux下的设置命令为:echo 2 > /proc/cpu/alignment

cat /proc/cpu/alignment
 User:           1
 System:         0
 Skipped:        0
 Half:           0
 Word:           1
 DWord:          0
 Multi:          0
 User faults:    3 (fixup+warn)
0 - ignore
1 - warn
2 - fixup
3 - fixup+warn
4 - signal
5 - signal+warn (需要这个)