嵌入式linux 字节对齐 导致输出Alignment trap
来源:互联网 发布:单片机温度报警器设计 编辑:程序博客网 时间:2024/05/24 04:49
在ARM9新塘平台运行应用程序时,总是输出Alignment trap,但是并不影响程序的运行。通过查找资料,发现cpu在处理内存对齐的时候,有几种方式可以设置。
cat /proc/cpu/alignment
User: 0
System: 0
Skipped: 0
Half: 0
Word: 0
DWord: 0
Multi: 0
User faults: 2 (fixup)
我的嵌入式linux系统下的默认处理方式是第2级处理方式:修复。
0 - ignore
1 - warn
2 - fixup
3 - fixup+warn
4 - signal
5 - signal+warn (需要这个)
于是修改为:echo 5 > /proc/cpu/alignment,这样就会给内核一个信号。再在gdb下面重新运行
./rtmpserver ./rtmpserver.lua,果然gdb捕获到该信息,然后bt,查看出现问题的代码:
_currentFPVersion = ntohl(*((uint32_t *) (GETIBPOINTER(buffer) + 4))); //----MARKED-LONG---
原来是在强制类型转换读取内存的时候出现了错误,于是修改为:
uint32_t uTemp = 0;
memcpy(&uTemp,GETIBPOINTER(buffer) + 4,sizeof(uint32_t));
_currentFPVersion = ntohl(uTemp);
重新编译,Alignment trap消失。这也提醒我们,平时在写代码的时候,在内存访问上,尽量使用memcmp,memcpy,memset等函数,而不要为了方便,直接对指针内容进行访问。这样的代码在x86上可能没问题,但是运行到arm上,就可能会出问题。
cat /proc/cpu/alignment
User: 0
System: 0
Skipped: 0
Half: 0
Word: 0
DWord: 0
Multi: 0
User faults: 2 (fixup)
我的嵌入式linux系统下的默认处理方式是第2级处理方式:修复。
0 - ignore
1 - warn
2 - fixup
3 - fixup+warn
4 - signal
5 - signal+warn (需要这个)
于是修改为:echo 5 > /proc/cpu/alignment,这样就会给内核一个信号。再在gdb下面重新运行
./rtmpserver ./rtmpserver.lua,果然gdb捕获到该信息,然后bt,查看出现问题的代码:
_currentFPVersion = ntohl(*((uint32_t *) (GETIBPOINTER(buffer) + 4))); //----MARKED-LONG---
原来是在强制类型转换读取内存的时候出现了错误,于是修改为:
uint32_t uTemp = 0;
memcpy(&uTemp,GETIBPOINTER(buffer) + 4,sizeof(uint32_t));
_currentFPVersion = ntohl(uTemp);
重新编译,Alignment trap消失。这也提醒我们,平时在写代码的时候,在内存访问上,尽量使用memcmp,memcpy,memset等函数,而不要为了方便,直接对指针内容进行访问。这样的代码在x86上可能没问题,但是运行到arm上,就可能会出问题。
阅读全文
0 0
- 嵌入式linux 字节对齐 导致输出Alignment trap
- 字节对齐陷阱(Alignment trap)-demo for ARM9
- 字节对齐(Alignment)
- ARM Linux中的非对齐内存访问(Alignment trap警告的原因)
- ARM Linux中的非对齐内存访问(Alignment trap警告的原因)
- 字节对齐(Data Alignment)
- Alignment trap
- Alignment trap
- 数据的字节对齐(data structure alignment)
- 嵌入式—字节对齐
- how to disable alignment trap from user space in linux
- Alignment trap 解决方法
- Alignment trap的问题
- Alignment trap 解决方法
- 内核字节对齐 ping Error -- Unhandled fault: alignment exception
- Linux 字节对齐问题
- linux下字节对齐
- linux下字节对齐
- Solr 6.5.1 SolrCloud windows使用zk安装集群
- Python自然语言分析(第四期):第1课书面作业
- 微信小程序28
- python 多进程并发与多线程并发总结
- wdcp如何修改phpmyadmin导入 最大限制2048 KB
- 嵌入式linux 字节对齐 导致输出Alignment trap
- LeetCode Binary Tree Level Order Traversal
- 微信小程序30
- Liferay主题之获取用户角色
- 升级svn 到1.7
- 互斥对象和线程同步
- 小强学Python+OpenCV之-1.1图像加载、显示、保存
- jni集成第3方third party动态库libwebrtc_audio_preprocessing.so时android.mk的编写
- IntelliJ IDEA 创建 hello world Java web Maven项目从头到尾都有图有真相2017版本