AOSP5.0换8G eMMC不能开机问题

AOSP5.0 MT6572平台。用H9TP32A4GDBCPR_KGM这颗4G的eMMC就能够。可是用H9TP65A8JDACPR_KGM这个8G的就开不了机,一直是重新启动。用串口抓LOG发现以下这个东东:

[    2.028532]<1>.(0)[6:kworker/u4:0]total reserve: l_otp_reserve = 0x0 blocks, l_mtk_reserve = 0xa800 blocks, l_offset = 0x7fd000 blocks

[    2.028538]<1>.(0)[6:kworker/u4:0]l_reserve = 0x807800

[    2.030884]<1>.(0)[6:kworker/u4:0][mmc_blk_probe]: mmcblk0 by manufacturer settings, quirks=0x10000000

[    2.032043]<1>.(0)[65:mmcqd/0]msdc0 -> Address offset in USER REGION(Capacity 7456 MB) is 0xffffd000 <- msdc_cal_offset() : L<2574> PID<mmcqd/0><0x41>

[    2.032057]<1>.(0)[65:mmcqd/0]msdc0 -> XXX Address offset error(-12288),please check MBR start address!! <- msdc_cal_offset() : L<2576> PID<mmcqd/0><0x41>

[    2.032075]<1>-(0)[65:mmcqd/0][KERN Warning] ERROR/WARN forces debug_lock off!

[    2.032079]<1>-(0)[65:mmcqd/0][KERN Warning] check backtrace:

依据上边“Address offset error”这个错误信息,定位代码到:...h10\kernel-3.10\drivers\misc\mediatek\mmc-host\mt6572\sd.c文件

开机正常的4G的eMMC的串口log例如以下:

[    2.016319]<0>.(1)[58:kworker/u4:1][mmc_blk_probe]: mmcblk0 by manufacturer settings, quirks=0x10000000

[    2.017554]<0>.(1)[65:mmcqd/0]msdc0 -> Address offset in USER REGION(Capacity 3696 MB) is 0x0 <- msdc_cal_offset() : L<2574> PID<mmcqd/0><0x41>

[    2.020739]<0>.(0)[1:swapper/0]warning init time too long!

[    2.021471]<0>.(0)[1:swapper/0][pdev] mtk-msdc

感觉应该是这里出了问题。结合代码分析。应该是MBR_START_ADDRESS_BYTE这个宏定义应该有问题,这个宏是......h10\bootable\bootloader\preloader\tools\emigen\MT6572\MemoryDeviceList_MT6572.xls这个文件里emmc_region表格Boot1(KB)+Boot2(KB)+RPMB(KB)的值。有人说在......h10\device\mediatek\build\build\tools\ptgen\MT6572\mbr_addr.pl中改MBR_Start_Address_KB即可。可是我试了试不行的,不知道为何。

在解决这个问题过程中查到一下几篇文章,可供參考,留作以后学习:

1、关于mt6572不能开机问题 - Tracy Mcgrady的专栏 - 博客频道 - CSDN.NET

刚接触mtk的平台,就遇到一个问题,新代码配置好flash之后,烧写到板子上,系统不可以正常启动,配置串口为115200,仅仅能得到例如以下信息:

[DL] 00001388 00000015 010301F0: 1028 0000F3: 0000 0000V0: 0000 0000 [0001]00: 1027 000201: 0000 0000BP: 0000 0051G0: 0090 0003T0: 0000 1499EC: 0000 0080 [0000]Jump to BL

一直循环打印这段信息,也没有太多信息输出。不是吧。连preloader都没进入,由于之前看过一点preloader的代码,至少也有几个print函数,难道flash配置有问题,或者是ddr配置的问题,查找了一下代码,也没有看见哪里配置ddr(后来才知道ddr和nand flash是一个模块)。

后来也没有找到原因。都快要放弃了的时候,在网上找到了相同的问题。改动mediatek/custom/projec_dir/preloader/inc/cust_bldr.h文件,改动部分例如以下:

-#define CFG_UART_LOG                (UART2)+#define CFG_UART_LOG                (UART1)

也就是log信息改成从UART1输出,波特率为921600,又一次编译烧写preloader之后。preloader的信息得到了。输出信息的最后发现了问题,问题例如以下:

[EMI] no flash ID match, no DRAM info match ! mt_emi.c:line 1048 0PL fatal error...PL delay for Long Press Rebootpl pmic powerkey Release[PLFM] emergency download mode(timeout: 5s).mtk_arch_reset at pre-loader!

哦。preloader是进入了的,也就是说并非之前想象的停留在mtk rom其中。还是跳转到了preloader中,仅仅是flash没有匹配正确,造成preloader不断重新启动,再又一次配置好flash之后,系统启动起来了。

这里也有一点疑问。假设说flash都配置不对的话,那么烧写也应该是不能成功的,难道preloader运行下载模式时不检測flash ID?

2、[FAQ08871]更换新(eMCP)emmc之后无法开机

[DESCRIPTION]

当更换一款新的emmc之后,尤其是更换的这款emmc容量较大。比如16G等等。会发现无法开机。

查看kernel log会有例如以下类似的错误信息:

[MSDC] msdc0 -> Address offset in USER REGION(Capacity 15032 MB) is 0xffffd000 <- msdc_cal_offset br style=‘font-size:14px;font-style:normal;font-weight:normal;font-family:Tahoma;color:rgb(51, 51, 51);‘ />L<2937> PID<0x40>

[MSDC] msdc0 ->  XXX Address offset error(-12288),please check MBR start address!! <- msdc_cal_offset br style=‘font-size:14px;font-style:normal;font-weight:normal;font-family:Tahoma;color:rgb(51, 51, 51);‘ />L<2939> PID<0x40>

[SOLUTION]

比如更换H9TP17ABLDMCNR_KGM_MMD2之后出现故障。

1、先去alps/mediatek/build/tools/emigen/MT65XX/MemoryDeviceList_MT65XX.xls里面的emmc_region页中寻找

H9TP17ABLDMCNR_KGM_MMD2所相应的BOOT1+BOOT2+RPMB的size总和(比如4096+4096+4096 = 12288)。

2、假设在emmc_region中找不到H9TP17ABLDMCNR_KGM_MMD2,可是能够找到H9TP17ABLDMCNR_KGM。则须要

H9TP17ABLDMCNR_KGM这行新拷贝到新的行,并将新复制出来的那行第一列名字改动为H9TP17ABLDMCNR_KGM_MMD2

3、打开alps/mediatek/config/project_name/mbr_addr.pl,查看$MBR_Start_Address_KB的值(比如6144)。假设

$MBR_Start_Address_KB < BOOT1 BOOTRPMBsize MBR_Start_Address_KB ="

BOOT1+BOOT2+RPMB的size总和($MBR_Start_Address_KB = 12288)

4、改动之后又一次build new

时间: 2024-11-04 17:36:11

AOSP5.0换8G eMMC不能开机问题的相关文章

CentOS6.8 install Cacti 0.8.8g

Centos6.8 Cacti 0.8.8g一.Cacti简介 cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用rrdtool储存和更新数据,当用户需要查看数据的时候用rrdtool生成图表呈现给用户.因此snmp和rrdtool是cacti的关键.Snmp关系着数据的收集,rrdtool关系着数据存储和图表的生成. Mysql配合PHP程序存储一些变量数据并对变量数据进行调用,如:主机名.主机ip.snmp团体名.端口号.模板信息等变量. snmp抓到数据不

ubuntu14.0换源

由于种种原因,决定今天开始从centos7转为ubuntu14.0.但是一开始就遇到了一个问题.ubuntu的源貌似被墙了.没有办法,只好换源.如是参考了下面的帖子. 换源参考链接 但是又出现了一个问题,百度了好久才找到 [email protected]:~$ sudo apt-get -f install gcc Reading package lists... Done Building dependency tree Reading state information... Done Y

Android 4.0及以上版本接收开机广播BOOT_COMPLETED、开机自启动服务

情景概要:自己做的一个项目的时候,或得不到开启启动的通知,这样更别说开机启动通知里面实现开机服务功能了,查找了N多资料,说法不一,太多的人说4.0之后无法获得开机通知,通过各种渠道,各种大牛的方式仍然是那些N多人说不可行的方法,即使大牛给的是英文文档也是说这样可以的. 最后发现,开启启动通知已经实现了,但是自己的疏忽没有发现,我通过在通知里面弹出一个Toast,但是真机或者模拟器在开机的时候都需要很多启动项,导致最后的Toast弹出很晚,而自己却没看见.你可以在通知里面弹出10个以上的Toast

碎碎念android eMMC

一./dev/block root@:/dev/block #ls bootdevice mmcblk0 mmcblk0p1 mmcblk0p10 --. mmcblk0p18 mmcblk0p19 mmcblk0p2 mmcblk0p20 -- mmcblk0p29 mmcblk0p3 mmcblk0p30 -- mmcblk0rpmb platform LK获取分区信息  smem_ptable_init()从SMEM的entry SMEM_AARM_PARTITION_TABLE中读取分区

开机自动播放音乐的vbs

今天无意间看到了vbs这小玩意,就突发奇想,自学了一下,倒弄出如下的小玩意,大牛勿喷!这个可用做撩妹神技也可以用于提醒自己!使用方法:复制程序到txt文本里面保存,然后改后缀为vbs,丢到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp便可开机自启!红色的为歌曲路径,这个要设置对,绿色的看心情修改,感觉好用的热心一下,别浪费了! 程序1:CreateObject("SAPI.SpVoice").Speak &quo

换还是不换,这是一个问题

概率题: 给你三个盒子,其中一个放了东西,你指定一个,然后打开另外两个中的一个,发现是空的,问:你是否要改变你的选择. 网上的答案说应该改变选择,这样概率更大些. 那么请问,在发现另外一个盒子为空的情况下,选择的盒子中有东西的概率P是多少?改变后选对的概率又是多少[当然是1-P]? 我觉得用不着换,概率当然都是1/2. 我编写了一个程序模拟这个问题.这个程序显示invalidcountselcount misscount各占1/3,即selcount ~ misscount,证明了我的判断. #

Swift3.0学习实践-一个简单的画板(七色轨迹、可撤销、可清除、带橡皮擦)

写着玩儿的小程序,继续学习Swift.运行效果+代码+知识点总结 运行效果:             代码: Canvas类:画布,画图板状态管理.交互.处理手势 [plain] view plain copy class Canvas:UIView{ //负责线条的生成.操作与管理 let pathCreator:PathCreator //是否处于擦除状态 var isInErasering:Bool //橡皮擦视图 let eraserView:UIView override init(f

错误的类文件:… 类文件具有错误的版本 52.0,应为 50.0

出现问题: 今天在pom.xml中引入了最新版本guava工具包,编译时报了如下错误: [ERROR] E:\workspace\report\src\main\java\indi\johnny\report\template\excel\ExcelXSSFStyle.java:[16,-1] 无法访问 com.google.common.base.Strings错误的类文件: com\google\common\base\Strings.class(com\google\common\base

关于数组、结构体的初始化{0}

关于数组.结构体的初始化 一直以来,初始化变量和数组常采用定义时赋值的方法,今天在定义一个结构体的时候发现了一些问题,查了下相关资料发现以往的使用确实有些误区,一直没有注意到,于是搜集了下零散的资料在此记录一下. 一.以往常用的初始化方式: 1 int a=0; /*a初始化为0*/ 2 int b[10]={0}; /*b中全部元素初始化为0*/ 想必一直这样使用也确实不会发现问题,按照惯性思维,把0换成1就是把全部元素初始化为1了!然而事实却并非如此,请看下面这段代码↓ 1 #include