最近发现移植的linux长时间运行会死机,通过打印的oop信息,发现时串口发送结束时,使用ioremap返回的空,没有经过处理就使用了导致的。网上查阅资料,在此对ioremap简单说明一下,就是:ioremap 是动态io映射。解决方法网上也有,使用ioread32和iowrite32函数操作,不能直接readl和writel,我查阅了一下源码,找到了系统静态map的地址,直接使用ioread32和iowrite32操作。
在oop信息中,我的问题函数不长,所以也比较好发现问题,如果文件较长,使用objdump 反汇编问题函数文件的.o 文件,根据0xXX/0xXX来判断问题函数位置,需要注意的是,此处使用的是交叉编译工具中的objdump。 arm-self-objdump -S X.obj