最近使用飞腾CPU,需要将X86平台ubuntu系统的驱动移植到飞腾平台银河麒麟系统下。但是一个驱动一直有问题。费了很多时间去查找原因,最后在谢工的帮助下,总算圆满解决。
一、主要问题,如下图
1.从网上查了一些资料:
2.在谢工的帮助下定位了出现问题的函数:
去该函数中定位到问题出现在写数据,最终定位到是对齐异常,并且学习了网上的相关资料:
3.此时看出现问题的地址0xffffffc01206c302不是4字节对齐的,但是还是用了iowrite32去写。
此问题在之前的X86平台ubuntu系统未出现,是因为X86硬件会自动处理非对齐访问情况,对软件透明,而ARM不支持自动处理非对齐访问。
二、移植时出现copy_from_user和copy_to_user编译报错,解决办法是添加
#include <linux/uaccess.h>