Chinaunix首页 | 论坛 | 博客
  • 博客访问: 53293
  • 博文数量: 23
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 112
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-05 14:04
个人简介

同学,仍需努力啊!

文章分类

全部博文(23)

文章存档

2015年(23)

分类: LINUX

2015-04-14 17:45:13

问题:

        将手机的boot,system,splash,userdata,recovery,全部擦掉,然后再依次烧入。再开机时手机就死在了开机 logo中。从串口输出的bootloader信息来看是发生了数据异常。但是如果再将splash擦掉,再烧写一遍。就不会有这个问题了。

分析问题:

        通过打印log,最后将出错的代码定位在了释放内存函数free()中的list_delete(node),当中。说明在访问Node进出了问题。从程序执行的流程来看,先是从logo的高度,宽度和bpp计算出logo所需要的内存;然后以这个大小去向系统申请内存。然后再从flash当中读取logo数据。而从flash中读,是以整页为单位。这样之后读取出来的数据就要大于上面根据logo的尺寸所计算的大小,也就可能大于所申请的内存, 从而导致占用了其它没有被申请的内存了。这样就出了问题。

解决方法:

        以将logo的大小以flash页对齐之后,再去申请内存。

疑问:

        为什么再次擦除,烧写slpash.img后,就过了呢?我把list_delete(node)中node的pre,next指针都打印出来后,发现next的值都是非法的,但前后都不同。现在不知道是什么原因。

阅读(581) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~