compile
***********************************************************************
1 GEMINI_MTK6225编译
1 安装ADS和perlMITK6226相同
2 当安装环境ready后
再PH_code下面点击cmd.exe进入控制台界面
ph resgen//编译资源
ph new_modis//如果编译顺利,每个子项目应该都是[p],如果有[F],则到MoDIS下的产生[F]的子项目下有个xx.dsw文件,用vc进入该文件进行编译,编译不通过,则根据error提示进行调试,产生[F]的所有子项目都通过后,再进入DOS控制台,对modis重编译,输入ph remake_modis,编完全部都是[P]后,
ph gen_modis
ph codegen_modis //generate modis database,这一步可以不做,对模拟器没影响
再到MODIS目录下用vc打开MoDIS.dsw,对所有子项进行编译,如果编译通过,产生一个MoDIS.exe文件放在本目录下的一个MoDIS目录下的Debug下面,双击该文件即可得到手机模拟器界面。
2 wxt_common.c
error:重定义BOOL
在wxt_common.c中把
#if !defined(__MTK_SUPPORT__)
#include
#endif
放在#include "MMI_include.h"之前
3 Error: L6218E: Undefined symbol Image$$ZI$$Limit (referred from sys_stackheap.o).
Not enough information to produce a SYMDEFs file.
Finished: 1 information, 72 warning and 1 error messages.
答:找个c文件添加如下代码就通过了
int Image$$ZI$$Limit=0x8f00000;
4 tools\make.ext: ***[applib.lib] Error 2
D:\mtkwork\MTK_Code\PH_Code\build\PH25_GEMINI\log查看res_gen文件,注意:当资源编译错误是,res_gen文件的大小为1k,资源编译没错时res_gen文件大小为0k。
../../MMI/Inc/MMIDataType.h:331:1: unterminated #ifndef//这个错误是#ifndef没有结束,也就是没有相应的#endif
打开applib
"applib\misc\src\app_datetime.c", line 2502: Serious error: C2859E: Missing #endif at EOF "plutommi\MMI\Framework\NVRAMManager\NVRAMManagerInc\NVRAMType.h", line 111: Serious error: C2335E:
5 常见错误分析及解决方法:
Such as :
compile block ----Con_app
Error:make[1]: *** No rule to make target `Hai_Extern.obj', needed by `build/GXQ26_07B/gprs/MT6226o/lib/conn_app.lib'. Stop.
Reason:
1.在make文件中添加了Hai_Extern.c文件的编译,但在对应的文件目录下找不到对应的.c 文件。
2.在make文件中没添加生成Hai_Extern.obj目标文件的源文件.c或.h.
Compile block ----mmi_app
Error:
"plutommi\mmi\ebookreader\ebookinc\EbookProt.h", line 29: Error: C2456E: undeclared name, inventing 'extern int GUI_SHARED_BYTES'
"plutommi\mmi\ebookreader\ebookinc\EbookProt.h", line 29: Serious error: C2958E: illegal in constant expression: non constant 'GUI_SHARED_BYTES':
Solve mothed:查找GUI_SHARED_BYTES 是否有定义,没有定义则需要添加定义,以及定义为constant是否正确。
Compile block ----mmi_framework
Error:
"plutommi\mmi\ebookreader\ebookinc\EbookProt.h", line 173: Warning: C2816W: Unbalanced #if/#ifdef/#ifndef/#endif in file
Solve mothed: check Number of #endif and #if
Compile block--- custom
Error:
"custom\system\GXQ26_07B_BB\custom_sap.h", line 68: Serious error: C2933E: type disagreement for 'MSG_ID_CUSTOM1_CUSTOM2'
"custom\system\GXQ26_07B_BB\custom_sap.h", line 68: Serious error: C2934E: duplicate definition of 'MSG_ID_CUSTOM1_CUSTOM2'
"custom\system\GXQ26_07B_BB\custom_sap.h", line 69: Serious error: C2933E: type
disagreement for 'MSG_ID_CUSTOM2_CUSTOM1'
"custom\system\GXQ26_07B_BB\custom_sap.h", line 69: Error: C2991E: linkage disagreement for 'MSG_ID_CUSTOM2_CUSTOM1' - treated as 'extern'
"custom\system\GXQ26_07B_BB\custom_sap.h", line 71: Serious error: C2933E: type disagreement for 'MSG_ID_TTSPLAYER_SERVICEOPEN'
"custom\system\GXQ26_07B_BB\custom_sap.h", line 71: Error: C2991E: linkage disagreement for 'MSG_ID_TTSPLAYER_SERVICEOPEN' - treated as 'extern'
Solve mothed: 检查编译文件是否重复包含custom_sap.h文件
Error:
在生成database BPLGU文件出错原因可能是因为缺少以下三个文件:造成。
BPLGUInfoCustomApp_MT6226_S01_MAUI_07B_W08_16_MP_V2
BPLGUInfoCustomApp_MT6226M_S01_MAUI_07B_W08_16_MP_V2
BPLGUInfoCustomApp_MT6227_S01_MAUI_07B_W08_16_MP_V2
还有其他原因造成,则需要查build\log下log文件根据提示的错误信息来更改工程文件。
Error:
编译某个文件时提示can not open XXX.h文件
Solve mothed:
1. 在make 文件中修改对应的XXXinc文件,添加对.h文件的编译
2. 在.h文件中包含的字符、变量、函数等,用extern 对其进行定义。
6 当资源编译错误时,log下的res_gen文件为1k,没错误时大小为0k。如果在编译模块之前reg_gen的大小为1k,则要用new命令,如果为0k,则可以直接用remake命令
7 #ifdef __TOPSUN_CLUB__ 和#if defined(__TOPSUN_CLUB__)区别,不要写错,如果要用到||或&&时,就一定是用#if defined()形式
8
a. new:
不管资源、代码是否有改变,全部重编;
b. update:
扫描资源、代码的改变,有改变的重编,无改变的不编;
c. remake:
不扫描资源,只扫描代码的改变,有改变的重编,资源和无改变的代码不编;
d. clean:
清除build目录下的所有内容,保留目录结构
9 添加了新资源之后要想在modis上显示出来,在用vc编译modis之前,先要在控制台下执行命令
a ph resgen 或ph new
b ph new_modis第一次,如果不是第一次,可以用ph remake_modis,其实在new_modis时,当出现编译模块产生log文件时,可以关闭new_modis,直接用vc编译modis。
c 再用vc编译modis工程
ph new时出现的错误在build\gemini25\log下查看
ph new_modis时出现的错误在Modis\_BUILD_LOG下查看
10
D:\mtkwork\music_online_code\music_online_code\PH_Code\topsun_app\UisUI\UisUtils.c(159) : error C2632: 'long' followed by 'long' is illegal
把#define TICK_2_MS(tick) (unsigned int)(((long long)(tick) * 302448) >> 16)
中的long long该为long
11 调试,调试某句后某个函数有没有运行到,可以在其前面随便添加一个字符串,如aaaaa,在remake一下,如果log找到相关错误,那么说明程序编译到该语句。
在linux下有printf语句可以打印出信息,在mtk下有没有相关打印函数?
12 在系统工程中添加任何新功能的代码时,都要添加开关(即一个开关宏),这样方便不需要该功能时只要把宏屏蔽即可。
13 编译都没出错,但烧机后发现没有出现添加的功能,结果发现是烧机的bin文件搞错了,当有几个bin文件时,一定要选择刚生成的哪个bin文件,要查看路径和文件生成的时间。
14 在修改或替换了某些头文件时有时需要删除相关模块,否则编译不会出错,但没有把更新的内容编译进去,看不到新加的内容,可以直接到build下删除模块,也可以用命令make custom=MAUI25_GEMINI gprs c topsun_app(模块名,c表示clean)
15 custmenutree_out.c里面的内容是自动生成的,不需要手动添加,只有需要在各个主菜单的入口添加子菜单(注:每添加一个子菜单要+1)即可,函数跟custmenutree.c里面的add 函数内容一样。
16 注意:加入新程序时定义了menu,str,image等“资源头文件”路进一定要加入到/plutommi\customer\ReGenerator\makefile当中,否则编译会得到错误信息如:error:"topsunclub_res_def.h"is not file or direction.此外如果生成了xxxsrc.h头文件,里面申明了sethilitehandler的init函数,那么这个头文件的路进也要添加到make/plutommi/mmi_framework.inc中,否则在产生bin文件的时候会出现init函数连接出错,
错误是该函数没有定义。
17 在把菜单id加到主菜单时,如
#ifdef __TOPSUN_CLUB__
+4,
#endif 注这种写法是不正确的,应为一旦宏被关闭,逗号也被关闭,而逗号又是用来分割参数的,这样就造成参数错误,正确的写法是应该把逗号写在宏作用域外面。
18 编译obj文件是都正常,但在生产bin文件是产出错误,undefined symbol "Multi_entry_club_init",这是由连接错误产生的,连接时没有连接到该函数,这主要是该函数没有被编译到(怎么知道它没有编译到呢,在该函数中第一行添加ffffffffffff;,remake之后如果还是没有错误,说明编译时没有进入该函数),没有编译到该函数的主要原因有:1 申明该函数的头文件路径没有加入到make\plutommi\mmi_framework\mmi_framework.inc中定义该函数的文件要添加到mmi_framework.lis,路径添加到mmi_framework.pth中,第二,该函数被某个宏关闭,先屏蔽掉这个宏调试看看;第三,头文件加了或作了extern申明,那么可能是定义该函数的文件没有添加进项目。
19 如果修改了头文件继续remake可能会导致头文件修改的部分没有编译进模块,所以可以在先删掉模块再remake,又两种方法删除模块:1. ph c mmi_framework 2.直接到build下面把mmi_framework目录删掉。
20 编译错误undefiend synbol “SetLeftSoftkeyFunction”
答:在该文件的最上面添加#include "MMI_include.h"
21 编译错误old-type synbol "Multi_entry_club_init"
答:在申明这个函数的地方没有添加分号。
22 像populatescr.c和res_xxx.c等文件都在编译资源resgen后就知道编译错误,错误文件在resgen.lob.txt中,而模块如mmi_app等xxx.c文件就在后面的模块编译中出现错误,错误信息都在个模块的log当中,如果以上两者没有编译出错,而在产生bin的时候连接出错,错误信息在MT6225.log中。
23 在一个文件中定义了函数,在另一个文件中可以加extern申明再调用,
24 lib文件的产生,以topsun_club.lib为例,要把topsun_club的一部份.c文件加入topsun_club.lib,那么这部分文件的路径应该加在make\topsun_club\topsun_club.lis里面,如topsun_common.c文件,而不需要编译进lib里面的topsun_club的.c文件的编译路径加入到make\plutommi\mmi\mmi_app.lis里面,入topsun_interface.c文件。
25 在res_settings.c中,结构对象ent的结构定义是struct direct* ent;而不是struct dirent *ent;
26 在崔工给的第一个ph_code代码包中编译资源的时候会有生成str_merge.o文件时会有permit deny,这个主要是原来的str_merge.o文件被设置成了只读,不能被新生的.o文件替换掉,所以在该文件的属性中把只读勾掉即可。同样的错误还有frotRes.o,
mtk_resgenerator.exe,都要把只读勾掉。
27 现场源代码移植时在其他平台中添加程序并且生成lib库
1 在拷入原定码之前要修改厂商代码和指令。
2 把源代码topsun_club拷贝到ph_code下
3 把make\topsun_club拷贝到make下
4 在plutommi\mmi\mmi_app.inc中增加topsun_club\
5 在plutommi\mmi\mmi_app.pth中增加topsun_club\
6 在make\option.mak中把包含topsun_club.lib的句子屏蔽掉
7 在make\REL_CR_GEMINI_MMI_GPRS.mak中增加一句CUS_REL_SRC_COMP += topsun_club
8 remake之后即可得到一个topsun_club.lib文件,把这个lib文件替换原来的lib文件
9 把2,3,4,5,7中新增加的内容删除,把6中屏蔽的句子打开。
28 在添加topsun图片目录时,直接添加在mainLCD中,而不是添加在压缩文件image.zip 中,这样资源每编译一次topsun就会被删除一次,原因是每添加一次image.zip就会解压一次,把原来的mainLCD覆盖掉了。把topsun添加到image.zip中的方法就是打开image.zip 进入mailLCD目录下,然后直接用鼠标把topsun目录拖到mainLCD下,跳出的菜单点击确定即可。
29 在去掉在线音乐时屏蔽掉了BSN_12530_SUPPORT,在编译topsun_phone.c文件时还是会报错在Bsn12530Res.h中没有定义UIS_12530_BASE,解决的方法就是topsun_phone.c中的头文件bsn_12530.h中包含的Bsn12530Res.h屏蔽掉,并且把void uis_12530_init(void)和U16 ts_get_base_res_id(void)函数屏蔽掉。
30 在添加多路菜单后模拟器中看不到multimedia里面的菜单,结构在查询res_mainmenu.c 中的ADD_APPLICATION_MENUITEM2((MAIN_MENU_MULTIMEDIA_MENUID,下面没听添加相应菜单,一般如果添加成功,在custmenutree_out.c中的MAIN_MENU_MULTIMEDIA_MENUID 后面可以看到,看不到则可能是在res_mainmenu.c中某个地方遗漏了。
31 当在生成bin文件时有许多error LNK错误时,说明定义这些symbol的函数或所在的c 文件没有被编译,没被编译有可能是这个文件不存在,有可能是编译路径没有添加,还有一种最严重的情况是一个文件中某些函数没有被编译到往往是添加是#if 和#endif之间没有一一对应导致的,应该查找该函数的上下最近的if 和endif的对应关系。
32 ../../MMI/Resource/PopulateRes.c: In function `PopulateResData':
../../MMI/Resource/PopulateRes.c:1902: error: parse error before "void"
make[1]: *** [PopulateRes.o] Error 1
这个错误主要是在函数PopulateResData添加函数PopulateMythroadRes(void);时,参数不能是void,正确的调用:PopulateMythroadRes();
32
Error: L6218E: Undefined symbol soc_close_nwk_account_by_id (referred from
topsun_soc.obj).
Error: L6218E: Undefined symbol always_ask_encode_data_account_id (referred
from topsun_soc.obj).
版本冲突导致。
"plutommi\mmi\framework\tasks\taskssrc\mmitask.c", line 3788: Serious error: C2859E: Missing #endif at EOF
这个错误一般都是缺少了#endif,加一个就可以了。
33make[1]: *** No rule to make target `mmidsm.obj', needed by `build/MAUI25_GEMINI/gprs/MT6225o/lib/mmi_framework.lib'. Stop.
答:添加的路径不对
34 在添加res_mainmenu.c中添加菜单时,起作用的是ADD_APPLICATION_MENUITEM((MAIN_MENU_FUNANDGAMES_MENUID,IDLE_SCREEN_MENU_ ID,就是含有IDLE_SCREEN_MENU_ID的那个添加菜单项。如果菜单发生的混乱,可能是菜单数字添加错误,这是要逐项查找添加的数字,每添加一个菜单应该增1,如果没在enum里面的total之前添加相应的变量,那么看直接增加的数字是否吻合,随便屏蔽一个菜单时,除非是屏蔽宏,否则enum里面的变量也要相应屏蔽,否则就会发生混乱,总之添加一个菜单,就要增加一个数字,一一对应。
35 查看宏有没有被编译进去,查看Custom_option.txt或TargetOption.txt文件
查看菜单有没有添加进去,查看custmenutree_out.c
查看字符串有没有添加成功,查看String_resource_usage.txt
36 计算MTK中程序占用的ROM 及RAM
在build 下面一个*.lis文件
Total RO Size(Code + RO Data) rom size
Total RW Size(RW Data + ZI Data) ram size
Total ROM Size(Code + RO Data + RW Data)
37 error:out of rom
在xxx_gprs.mak中添加了COMPOBJS += plutommi\mmi\Mythroad\Mythroadlib\skyanimation-win32.lib,这个lib是不能放在arm下编译连接的,只能放在vc下编译连接,arm处理器不支持win32的lib。
38 在plutommi\customer\regenerator\makefile下面添加-I "../../putommi\mmi\topsun_app\inc" \并且跟上下一行有空行,结果resgen编译时没有resgen.log文件
答:原因有二:1,putommi\mmi\topsun_app\inc里面的\弄错误了,应该是putommi/mmi/topsun_app/inc,添加时一定要参考上下行的格式
2,第一步改正之后,还是有上面的错误,结果去掉-I "../../putommi\mmi\topsun_app\inc" \与上下行之间的空行结果正确,所以添加的时候不能增加空行。
39 其实资源文件显示错误都可以从编绎资源文件的临时文件中找到原因。资源文件生成的临时文件主要有:
CustMenuTree_Out.c,这个文件是菜单临时文件,生成了我们的最终显示的菜单结构。如果你添加的菜单没有显示,正常显示的菜单突然不显示了或者显示错位了,或者显示的菜单与调用的功能不符合了,都可以从这里查到原因。
resource_base_table.txt这个文件生成的是资源的ID范围,如果资源显示时出现了稀奇古怪的现在,就要看一下这个文件,检查一下你的资源文件是不是超出了设置的范围,如果超出了,就要修改MMIDataType.h重新设定范围。
string_resource_usage.txt这是生成的字串对应的文件,该文件可以查找固定ID对应的U16类型的值,可以与程序对应的值作比较,如果不对应,显示就会不对
image_resource_usage.txt这个与上一个一样,是图片生成的文件,可以查找图片ID对应的U16值
menu_resource_usage.txt这个是菜单生成的文件,可以查找菜单ID对应的UI值
audio_resource_usage.txt这个是AUDIO菜单生成的文件
通过这些文件可以快速诊断资源类出错的问题发生的原因和修改方法,对这些文件的研究,也有利于我们研究出更好的资源管理方法
40Error: L6218E: Undefined symbol cbm_encode_data_account_id (referred from topsun_phone.obj).
答:这个错误主要是版本冲突,本机的MTK_code版本不是08A0,所以把topsun_include.h 中的#define __TS_MTK_VERSION__08A0_屏蔽掉。
41 在移植过程中尽力使用移植文档提供的宏开关,因为使用其他的宏开关,在lib里面的一些函数可能被推荐的宏关闭,导致连接错误。
42 一般不能在函数里面申明extern变量和函数,如果这样做了,extern申请的变量和变量一定要放在函数体的最前面,否则会编译报错。
43 new之后在资源编译之间就产生错误:nvram_cust_pack.c中没定义null
答:把nvram_user_config.c中的#ifdef __TOPSUN_CLUB__
,{
NVRAM_EF_TS_VRAM_ID, /** LID **/
32, /** Size **/
10, /** Total **/
NULL, /** Default value **/
NVRAM_ATTR_AVERAGE, /** Attributes **/
NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK, /** Category **/
"TS", /** fileprefix 最多4字节**/
"000", /** fileverno 最多3字节**/
"TS VRam\0", /** description **/
NVRAM_INVALID_VALUE /** Record ID is calculated by NVRAM. DO NOT TOUCH. **/ }
#endif /* #ifdef __DMG_VRAM__ */中的NVRAM_CATEGORY_CUSTPACK去掉。
44 一般字符串ID等没定义的错误主要是一下一些情况造成的:一,如果是自有res_xxx.c 文件,那么可能没在makefile中添加定义的头文件,如果添加了但路径添加错了,必然
是..\..\MMI写成了..\..\..\MMI等,二,没有定义xxx_BASE,这个有可能是没有添加MMIDataType.h文件,或者缺#endif什么的。
45 在修改mmi_feature_switch.h文件时修改的内容每编译一次就被覆盖掉
答:要修改这个文件里面的内容,一定要修改plutommi\Customer\CustResource\MMI_features_switchEMPTY.h文件中修改,EMPTY修改成相应的工程名,凡是MMI_features_switchEMPTY.h修改不了时,就考虑看看是不是这个文件没修改。
46 一般可以clean一个模块,也可以remake一个模块或一个文件
make ph25 gprs c custom//清除custom模块
make ph25 gprs r custom//remake custom 模块
47 a 在情景模式中添加菜单,要添加bpm图片,否则会是红x,在添加函数时
ADD_APPLICATION_MENUITEM((MENU_ID_1_CLUB,MAIN_MENU_PROFILES_MENUID,0,SHOW, MOVEABLEWITHINPARENT,1,
STR_ID_1_CLUB,IMG_PROFILES_MEETING));要放在res_profiles.c,而不要放在res_topsun.c中,原因不详,PopulateResourcesTopsunClub();不能放在PopulateprofileMenu();前面。
b 在每个主菜单的.c文件中都有init函数,所以要添加应用程序的入口是,输入init查找带init的初始化函数,把应用程序的入口放在其中。
c 电子书是应用程序,不能再加子菜单
d DEVELOPER_BUILD_FIRST_PASS这个宏是在编译的过程中打开。
48 在res_xxx.c文件中添加以下三种的调试结果:
ddddddddddddddd ../mingw32/3.3.1/include/stdarg.h:44: error: syntax error before "typedef"
dddddddddddddddd, ../include/winuser.h:3403: error: parse error before "va_list" ddddddddddddddddd; 编译能通过。
49 nvram_auto_gen.exe错误,某个地址段“writer”错误
答案:#ifdef __TOPSUN_CLUB__
NVRAM_EF_TS_VRAM_ID,
#endif
这里多定义了一个变量,而实际上没有用到。
50 利用compare备份要修改的文件
对比移植文档和工程文档
点击no orphans->expand all folders->select all files->点击右键->copy to folder->在selection选中要备份的一边->在action中选择要备份的路径(最好放在桌面建一个文件夹backup)->keep relative folder structure->start开始备份,备份的文件都保持了相应的结构,要恢复的时候点击工具栏中的syncronize to right或者syncronize to left,这是全部恢复,如果只要回复部分文件,用ctrl+filename选择要备份的多个文件,点击工具栏中的copy按钮进行恢复。
51 在编译mtk是要是双核满载编译的方法
在make2.pl修改一段
把if (($action eq "update") || ($action eq "remake") || ($action eq "new") || ($action eq "bm_new") ||
($action eq "c,r") || ($action eq "c,u")) {
if ($ENV{"NUMBER_OF_PROCESSORS"} > 1) {
if ($fullOpts eq "") {
$fullOpts = "CMD_ARGU=-j$ENV{\"NUMBER_OF_PROCESSORS\"}";
} else {
$fullOpts .= ",-j$ENV{\"NUMBER_OF_PROCESSORS\"}";
}
}
}
改为
if (($action eq "update") || ($action eq "remake") || ($action eq "new") || ($action eq "bm_new") ||
($action eq "c,r") || ($action eq "c,u") || ($action eq "scan")) {
if ($ENV{"NUMBER_OF_PROCESSORS"} > 1) {
if ( $exec_xgc_result==0 )
{
$no_of_proc = $ENV{"NUMBER_OF_PROCESSORS"}*2;
if ($fullOpts eq "") {
$fullOpts = "CMD_ARGU=-j$no_of_proc";
} else {
$fullOpts .= ",-j$no_of_proc";
}
} else {
if ($fullOpts eq "") {
$fullOpts = "CMD_ARGU=-j$ENV{\"NUMBER_OF_PROCESSORS\"}";
} else {
$fullOpts .= ",-j$ENV{\"NUMBER_OF_PROCESSORS\"}";
}
}
}
}
52 在modis中调试程序要看到信息
/* if you want to print dbg info in console, pls turn on SOC_DBG_ENABLE */
#define SOC_DBG_ENABLE//默认是关闭
#ifdef SOC_DBG_ENABLE
kal_printf("bearer_info account_id=%d state=%s\n",
account_id, state_str[state]);
#endif /* SOC_DBG_ENABLE */
在模拟器下也可以直接用printf,如printf("++++++++%s(%d)=========\n",__FILE__,__LINE__);
但是这个在手机上编译不通过,所以要加宏__TARGET_MTK__限制.
53 在option.mak中endif中的e不能是大写,否则就会报错缺少"endif",这个错误在从word 里面拷贝时容易出错。
直接word文档中拷贝代码到source insight中时编译要注意,比如#define START_LCD_TRANSFER REG_LCD_START = 0;\
REG_LCD_START = LCD_START_START_BIT;
这句中的‘\’直接拷贝过去时就会报错,因为这个符号是在中文输入法下输入的,要从新输入一个'\'。
54 make[1]: Entering directory `F:/mtk/GEMINI_UU_THM/theme/GEMINI_0812'
Error: L6850E: Archive contains non ELF Object voipcall.obj
make[1]: *** [build/EELINK25_GEMINI/gprs/MT6225o/lib/mmi_app.lib] Error 1
这个错误是由于编译的时候正在编译voipcall.c文件,突然死机了,导致这个文件没有编译完成,把voipcall.obj删掉重新编译就可以了。
54 vc调试
1 当调试一个while循环时,可以在while的}号处设一个断点,按F5,如果到了能到达断点,说明循环没错。
55 在编译resgen的时候无效,还不知道原因,但解决的方法是从备份文件中的240X400\plutommi\Customer下面把
remakeResource.tmp
ResGenerator.tmp
ResGenerator_HW.tmp
UpdateSkin.tmp
拷贝到相应的目录下,resgen又可以用了。
56 LINK : fatal error LNK1104: cannot open file "guilibd114.lib"
project->seting->link页
object/library modules里输入guilibd114.lib
tools->Options->Directories
Show Directories for 里点library files
添加你那个guilibd114.lib所在的路径
57 在#ifdef前面不能添加注释符号/*,否则会导致上一个#ifdef 和#endif不能正确配对
/*
#ifdef //正确写法
/*#ifdef //错误写法
57 如果让全局变量不让其他文件应用,那么前面加static申明,这样其他文件定义相同的变量就不会引起重定义,函数也同样,如果其他问题要调用static函数,则前面也要加static 申明。
58 ../Res_MMI/Res_Games.c:2086: error: two or more data types in declaration of `PopulateBumpRes'
../Res_MMI/Res_Games.c:2086: error: function definition declared `typedef'
make[1]: *** [Res_Games.o] Error 1
这个错误是因为某个struct或enum后面没有添加分好;,后来通过查找,在新添加的downdefs.h中定义屏幕的那个enum后面没有添加;,今后遇到这个问题就是查找最新添加的头文件里面的struct或enum后面是否添加了分号。
59 系统new的时候出现can not open mmi_feature_check.obj错误,要把option.mak下面的一个DIR_ARM = D:\aweihua\IMG_MANAGE屏蔽掉,一般这种错误可能就要在option.mak查找。还有就是=>make\Option.mak中DIR_ARM路径没有改
g: => c:
60 extern tm_theme_list_struct *thm_details;编译出错
这个主要是宏__MMI_THEMES_V2_SUPPORT__没有打开,这个宏没有打开又有可能是
CFG_MMI_THEMES_V2_SUPPORT或__DOWNLOADABLE_THEME__或CFG_MMI_THEMES_APPLICATION没有打开
61 240x400跑模拟器会跳出错误
mmi_app.lib(mainmenu.obj) : error LNK2001: unresolved external symbol _DYM_enter_Item mmi_app.lib(mainmenu.obj) : error LNK2001: unresolved external symbol _DYM_ShowMenuFirst mmi_app.lib(a8club.obj) : error LNK2001: unresolved external symbol _club_send_msg_rsp Debug/MoDIS.exe : fatal error LNK1120: 3 unresolved externals
Error executing link.exe.
MoDIS.exe - 4 error(s), 25 warning(s)
这个错误解决可以在相应的文件下定义空函数的方法:如
#ifndef __TARGET_MTK__
void DYM_enter_Item(int index)
{
return;
}
#endif
62 在res_mmi中把res_uudo.c改为res_uudo_old.c后编译资源,res_uudo_old.c也会被编译到,删掉res_uudo_old.c后还是会编译到,应该在F:\mtk\GEMINI_UU_THM_uudo\theme\GEMINI_0812\plutommi\Customer下搜索res_uudo_old.c,会发现在另外一个目录下还有一个res_uudo_old.c,把这个文件删掉就不会再编译到这个文件了。
63 "plutommi\mmi\miscframework\miscframeworkinc\PlmnEnum.h", line 44: Serious error: C2335E:
这个错误主要是makefile文件中的添加的头文件路径后面少了一个'\'导致的,PlmnEnum.h/* Do NOT modify the following line. It is a keyword for the PLMN automatic create tool */
/* plmncreate.exe: generate string id enum */
这个错误应该在编译资源的时候就出错makefile:127: *** missing separator. Stop.这个错误表示makefile后面缺少'\'
64 PopulateRes.o(.text+0x34d3): In function `PopulateResData':
E:/240X400_HelloWorld/plutommi/Customer/ResGenerator/../../MMI/Resource/PopulateRes.c:1 898: undefined reference to `PopulateHelloWorldRes'
make[1]: *** [mtk_resgenerator.exe] Error 1
这个错误是由于PopulateHelloWorldRes函数找不到定义,而这个定义是被一个__MMI_HELLOWORLD__包含
这个宏__MMI_HELLOWORLD__定义在mmi_features_switchPLUTO.h中,#define __MMI_HELLOWORLD__ (__ON__)
定义在mmi_features_switch.h和定义在option.mak中的宏不同,定义在option.mak中的宏,会在在custom_option.txt中生成,任何用到宏的地方都有效,而在mmi_features_swith.h中定义的宏,要用到宏的地方必须添加#include "mmi_features.h",否则红就无效,看看宏的颜色就知道,这种宏就要加头文件,比如美图中的__UUDO_TMK_VERSION_SUPP__,要用它就要添加头文件,也就是说凡是用#define直接定义的宏必须要包含定义它的头文件,而且这个红的颜色是红的,在option.mak或XXX_gprs.mak中定义的宏颜色是黑的。
65 make: *** No rule to make target `wap_trc.ptr', needed by `.\tst\database_classb
\BPLGUInfoCustomAppSrcP_MT6225_S00_240X320_V1'. Stop.
66 Error: L6218E: Undefined symbol Image$$ZI$$Limit (referred from sys_stackheap.o).
Not enough information to produce a SYMDEFs file.
这个可能是可能加入的某个lib中调用了一些MTK不支持的标准C函数,malloc,和printf外,还因为使用了fopen这类c lib文件操作函数,去除后可链接成功。
67 Error: L6218E: Undefined symbol ts_charset_gb2ucs2 (referred from topsun_club.obj).
ts_charset_gb2ucs2这个函数在短彩中没有,在主题中有定义,定义原型如下,可以把下面这个文件拷贝到topsun_interface.c中,或者直接加mmi_chset_convert(MMI_CHSET_GB2312, MMI_CHSET_UCS2, (char *)src, (char *)dest, len);这个函数系统自带
void ts_charset_gb2ucs2(char* src, char*dest, int len)
{
mmi_chset_convert(MMI_CHSET_GB2312, MMI_CHSET_UCS2, (char *)src, (char *)dest, len);
}
68 CustResDeclare.c:71: error: parse error before "ENFBAssociatedIDList" CustResDeclare.c:71: error: `MAX_ASSOCIATED_IDS' undeclared here (not in a function)
CustResDeclare.c:77: error: parse error before "gLanguageArray"
CustResDeclare.c:77: error: `MAX_LANGUAGES' undeclared here (not in a function) CustResDeclare.c:78: error: parse error before "gMaxDeployedLangs"
这个是在makefile中添加应用程序头文件路径时添加在
68 moxiu_theme_lib.c中
sprintf(wap_url,"%s%s",temp,mythemetype);
mythemetype没有定义,这个变量应该定义在库里面的全局变量,可以用
extern char *mythemetype;引申一下就可以编译通过了,如果是遇到在库里面的定义的函数也可以做这样的处理。
***********************************************************************
Q&A
***********************************************************************
1 mtk是不是即可用make编译,也可用vc编译
答:make编译arm版,vc编译pc版
jiaolian8848cdsn
jiaolian8848
***********************************************************************
funcs
***********************************************************************
1 mtk手机实现归属地查询
2 mtk手机实现手机sp包月
***********************************************************************
works
***********************************************************************
1,鸿鹄机子重启或关机
答:nvram_user_config.c
#ifdef BSN_APP_SUPPORT
,{
NVRAM_EF_TS_VRAM_ID, /** LID **/
32, /** Size **/
10, /** Total **/
NULL, /** Default value **/
NVRAM_ATTR_AVERAGE, /** Attributes **/
NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK, /** Category **/
"TS", /** fileprefix 最多4字节**/
"000", /** fileverno 最多3字节**/
"TS VRam\0", /** description **/
NVRAM_INVALID_VALUE /** Record ID is calculated by NVRAM. DO NOT TOUCH. **/ }
#endif /* #ifdef __DMG_VRAM__ */
上面的功能是申请ram,移植后里面的NVRAM_ATTR_AVERAGE参数没有,而是用NVRAM_ATTR_NONE, 他们之间有什么区别,要查清楚。
3 致远凯多路移植遇到的问题
a 在res_def.txt添加str,应该添加在plutommi\Customer\CustResource\PLUTO_MMI下的res_def.txt中,而不是plutommi\Customer\CustResource下的res_def.txt中,否则加入菜单会是空白。
b 如果菜单ID不是定义在globalmainmenu.h中,而是定义在自己的资源头文件中,那么应该在globalmainmenu.h中申请一个菜单ID,自己要添加的菜单ID的初始值在此ID的基础上定义,str,scr,image ID则以XXX_BASE为初始值,否则添加的菜单是乱码。
4 龙翔遇到的问题
a 图片目录topsun加在mailLCD下,而不是image.zip中,结果每次编译资源时image.zip就把mainLCD覆盖了,新添加的topsun图片没有了。
5 六虹遇到的问题
在生存bin文件的时候出现undefined symbol null(from nvram_cust_pack.obj)
这个错误主要是在添加nvram_user_config.c中的
#ifdef __TOPSUN_CLUB__
,{
NVRAM_EF_TS_VRAM_ID, /** LID **/
32, /** Size **/
10, /** Total **/
NULL, /** Default value **/
NVRAM_ATTR_AVERAGE, /** Attributes **/
NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK, /** Category **///08a 以前的版本需要NVRAM_CATEGORY_CUSTPACK
//NVRAM_CATEGORY_USER,//08a的版本要把NVRAM_CATEGORY_USER去掉。
"TS", /** fileprefix 最多4字节**/
"000", /** fileverno 最多3字节**/
"TS VRam\0", /** description **/
NVRAM_INVALID_VALUE /** Record ID is calculated by NVRAM. DO NOT TOUCH. **/ }
#endif
要注意参数:NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK, /** Category **///08a以前的版本需要NVRAM_CATEGORY_CUSTPACK
//NVRAM_CATEGORY_USER,//08a的版本要把NVRAM_CATEGORY_USER去掉。
如果还没用,就在nvram_mmi_cache_pack.h(在08a版本中才有)中把null屏蔽掉,但这个好像从新new一下还会出问题,因为nvram_mmi_cache_pack.h的里面东西是new之后生成的。
6 六虹遇到的问题:
在移植T卡时在zm_phone.c,zm_socket.c中ALWAYS_ASK_SIM_INFO_SIM1出现没有定义,这是因为客户版本是08a版本,要打开__ZMOL_MTK_VERSION__08A0_宏,并且重新new一下。
7 六虹添加菜单问题
在添加完菜单后发现进入菜单,进入的是别人的游戏菜单,这个原因主要是应为没有添加进入菜单的入口函数。这个入口函数在Res_FunAndGames.c中。
8 如果屏幕是176x220,则icon的大小应该用15x15的,否则用26x26的。
9 六虹通道测试遇到问题
样机发送42*111*test发送到106214182发送不出去,样机使用菜单也不能发送信息出去,结果的原因是通道是广东的,但测试卡不是广东的,两者必须一致。可以这样测试把测试指令LCX***+Y106699678540AZM09+L106699678540AZM09+Y1+O改为LCX***+Y13476011637540AZM10+L106699678540AZM09+Y1+O发送给134********,如果看到包含LHK的字符串,就知道测试成功。
10 把T卡移植到240x400中,遇到问题
Error: L6218E: Undefined symbol DeliveryRepyStates (referred from zm_phone.obj).
在zm_phone.c中找到DeliveryRepyStates,发现其定义在SmsSettingsGuiInterface.C,并且前面有static,这个去掉就可以了,因为声明了static,那么就不能extern应用了。
11移植鸿鹄的错误(MT6226)移植qqpark
enum_list.h error:un defined ‘STR_ID_IM_QQ_EM080’
make [readexcel.o]*** error 1
错误原因:要在readexcel.c文件中添加包含STR_ID_IM_QQ_EM080的头文件。
12 移植鸿鹄的错误(MT6226)移植qqpark
“DM_BASE_CONTROL_SET_SUBMENU”没有定义
在wgui_draw_manager.h中的mmi_dm_control_ids_enum中添加该定义。
13 天翔移植t卡加销量统计
很多函数在连接的时候没有定义
原因:没有添加__TOPSUN_CLUB__宏,因为在Zm_phone_ex.c文件中用到这个宏,如果没有定义这个宏,文件中的函数就会被关闭。如果在添加Zm_phone_ex.c时把__TOPSUN_CLUB__去掉,那么就可以不需要在option.mak中添加宏__TOPSUN_CLUB__.
14 天翔移植T卡
在smscore.c移植添加extern signed char glb_zm_send_sms_pending;时,应该放在函数的最前面,但是在移之前要看看原来的地方是否已经有了extern变量,如果有了,那么要添加的extern signed char glb_zm_send_sms_pending;要移出函数,否则就把原来的extern的变量遮挡产生错误。
15 在music_online工程中移植主题精灵错误:
"nucleus\inc\Nucleus.h", line 143: Error: C2225W: declaration lacks type/storage-class (assuming 'int'): 'o'
"nucleus\inc\Nucleus.h", line 143: Error: C2285E: expected ';' or ',' - inserted ';' before 'typedef' media\image\src\2d_engine.c: 0 warnings, 2 errors, 0 serious errors
make[1]: *** [2d_engine.obj] Error 1
make[1]: *** Waiting for unfinished jobs....
错误是在2d_engine.c中的第一行的/*****之前多出了一个‘0’。
16 在08a上移植主题精灵遇到的问题
1 在mmi_uu_theme_socket.c中
//SetProtocolEventHandler(NULL, MSG_ID_APP_SOC_DEACTIVATE_CNF);要屏蔽掉这句
PF_INET->SOC_PF_INET
SOCK_STREAM->SOC_SOCK_STREAM
2 在mmi_uu_theme_icon_rs.c中屏蔽掉如下语句,在致远凯的320x240也遇到这个问题,同样这样处理
#ifdef __MMI_MAINLCD_176X220__
//const unsigned char bg_img_data[] = {
//};
#endif
3 在topsun_include.h中打开__TS_MTK_VERSION__08A0_宏。
4 在mmi_uu_theme_extern_func.c中INPUT_TYPE_ALPHANUMERIC_SENTENCECASE->IMM_INPUT_TYPE_SENTENCE
非08a的工程移植了08a的产品会报错找不到IMM_INPUT_TYPE_SENTENCE
解决的方法是改成
#ifdef __TS_MTK_VERSION__08A0_
result = AppendEMSString (IMM_INPUT_TYPE_SENTENCE,pEMS, (U8*)codebufucs2, SMSAL_UCS2_DCS, temphistory.guiBuffer);
#else
result = AppendEMSString (INPUT_TYPE_ALPHANUMERIC_SENTENCECASE,pEMS, (U8*)codebufucs2, SMSAL_UCS2_DCS, temphistory.guiBuffer);
#endif
//#include "wgui_categories_inputsenum.h"把这一行屏蔽掉
5Error: L6218E: Undefined symbol always_ask_encode_data_account_id (referred from mmi_uu_theme_socket.obj).
Error: L6218E: Undefined symbol ShowCategory72Screen (referred from mmi_uu_theme_wins_library.obj).这个在wgui_categories.c中把包含ShowCategory72Screen的宏__MMI_MENSTRUAL__屏蔽掉
Error: L6218E: Undefined symbol g_themes_freq_set (referred from mmi_uu_theme_extern_func.obj).这个把在MMIthemes.c中定义的g_themes_freq_set前面static去掉
6 主题精灵的入口函数mmi_uu_thm_enter_main_init_hdlr,要做成快捷键的方法是在
resource_shortcuts.c的const U16 gShctDefaultDediList[4]中用MENU_ID_UU_THEME替换第三个菜单ID,并且在const shct_item_struct gPhsShctCandList[SHCT_MAX_CANDI_LIST]=和const shct_item_struct gShctCandList[SHCT_MAX_CANDI_LIST]=中的最后添加MENU_ID_UU_THEME 声明
7 移植后选中娱乐与游戏菜单没反应,也没字符串显示,一般这个情况可能是在FUN_ENUM_TOTAL搞错了,要仔细检查看是否遗漏或宏屏蔽掉什么,这里就遇到这个问题,就是在FUN_ENUM_TOTAL中的FUN_ENUM_THEME被宏屏蔽掉了,结果在菜单添加了#ifdef UUTHEME_APP_SUPPORT //adduutheme start
MENU_ID_UU_THEME,
#else
#if defined (__MMI_THEMES_APPLICATION__)
MENU3101_THEMES,
#endif
#endif //adduutheme end
导致菜单混乱,以后这个应该要注意。
8 在编译资源的时候有时候会有resgenerater.exe permission deny,这个会导致资源编译出错,导致这个原因可能是杀毒软件的问题,重启机器,并且把杀毒软件关闭试试。
10 六宏的08a不支持png格式,只支持gif格式的图片和主题。
11 当生产bin文件时发生函数连接不上的error时,函数连接不上可能有两种原因,一,定义函数的地方被某个宏关闭,而这个宏可能不存在或没定义,要查看这个宏。二,宏连接的库路径不对或库没有添加进去。
17 天翔移植T卡加销量统计,结果导致card1是发送10086两条短信就白屏。
原因是在mmitask.c中的#ifdef __MMI_ZMOL__
ts_app_mmi_init(TS_USER_TIMER_DEF);
zm_start_init();//注意,这里不能添加在shortcut之后,否则会导致开机白屏。
#endif
函数zm_start_init已经对ts_app_mmi_init调用,这样就调用了两次ts_app_mmi_init,这里再次调用导致销量统计两次初始化。
18 移植天翔包是修改了头文件,导致函数在连接时连接不上,这时要看连接不上的函数所在的文件的obj文件是否最新的,如果不是最新的,说明头文件没有编译到,所要把这个文件的obj文件删除,重新remake一下。
19 六虹把T卡放在9宫格的地方替换原来的娱乐与游戏,方法:
在ref_list中把MAIN_MENU_FUNANDGAMES_TEXT后面的“娱乐与游戏”换成“应用百宝箱”在mainmenu.c中的函数void initalize_main_menu_application(void)中的
SetHiliteHandler(MAIN_MENU_FUNANDGAMES_MENUID, highlight_mainmenu_funandgames);替换成
SetHiliteHandler(MAIN_MENU_FUNANDGAMES_MENUID, Highlight_ZMOL_Menu);即把他们之间的入口函数替换掉就可以了。
20 在晶丰移植qq时,运行qq提示内存空间不够,要在lis文件下查看med_ext_mem(多媒体运行空间)这个值除于1024得到的值是小于700,所以这个值要改大,但这个值以前
被定义过,有个两个定义的地方,现在就是不知道调用的是哪个,所以在它定义的末端加上#undef MED_EXT_MEM_SIZE
#define MED_EXT_MEM_SIZE 750*1024
21 鑫鹏移植T卡+主题精灵+短彩
a 当打开__TS_MTK_VERSION__08A0_宏时,在函数mmi_uu_theme_extern_func.c中的result = AppendEMSString (IMM_INPUT_TYPE_SENTENCE,pEMS, (U8*)codebufucs2, SMSAL_UCS2_DCS, temphistory.guiBuffer);中的第一个参数在各种平台中定义的并不一样,当没有定义08A这个宏时,使用INPUT_TYPE_ALPHANUMERIC_SENTENCECASE,这个变量在wgui_categories_inputsenum.h中,当打开了08A这个宏时,调用的是SFApi.c中的#define INPUT_TYPE_ALPHANUMERIC_SENTENCECASE IMM_INPUT_TYPE_SENTENCE 而IMM_INPUT_TYPE_SENTENCE在各平台中定义的名字可能有所不同,所以打开08A这个宏找不到IMM_INPUT_TYPE_SENTENCE可以利用关键字INPUT_TYPE进行搜索,在鑫鹏的25_08A 平台中定义的是在ctk.h中,找到相应的名字然后替换掉IMM_INPUT_TYPE_SENTENCE,并且在相关.c文件中添加该.h文件即可,这也告诉我们,当非库文件中的某个变量尤其是enum 变量找不到定义时,除了没有保护头文件之外,有可能是在该平台中的名字定义的不一样,这是用变量中的关键某个字去搜索,或者搜索一下调用这个参数的函数,看看其他sp如何处理。
b 当测试机可以进入移动web的主页,而主题精灵不能初始化,有可能是联网方式不同,如果同时装了T卡,则看看T卡能不能下载,因为主题精灵跟T卡的联网方式一样,如果t 卡也不能下载,说明联网方式有问题,找到tMOXIU_TM_ACCOUNT_ID后面的函数,一是看函数的参数及其四个参数值得大小,如果是08A可以搜索cbm_encode_data_account_id,看看其他sp软件是如何调用的,各个参数值得大小,如果不是08A,搜索always_ask_encode_data_account_id的参数值大小。第一个参数值18应该没问题。
d 有些公司拷贝东西要有密码或专门人员,所以在移植时移植文档一定要先做好或拷贝进去,否则到时不好移。
22 鸿铭移植主题精灵
主题1,主题2,主题3前没有小图标,而是红叉,这主要是缺少图标所至,因为这个图标是系统图片,有点平台就没有带这个图标,这个图片主要在mmi_uu_theme_extern_func.c 中的icon_img_data[4][4]的{IMG_VICON,IMAGE_SYSTEM_THEME,IMAGE_PHONE_THEME,IMAGE_CARD_THEME},
IMG_VICON对应的图标是PLUTO240X320\MainLCD\UIElement\checkbox\CK_V.bmp
IMAGE_SYSTEM_THEME对应的图标是PLUTO240X320\MainLCD\Submenu\Funandgame\theme_s.pbm,出现红叉就是系统缺少这个图标,如果系统没有这个图标解决方法就是在icon_img_data[4][4]把下面的一个随便ID如IMG_UU_THEME_IMG_ICON_THM替换掉IMAGE_SYSTEM_THEME,其他图标没有也可以照样替换,也可以考个.pbm图标放到相应目录下,把名字改成theme_s.pbm即可。
23 今天再次去移植鑫鹏菜单,那个topsun_include.h中没有#define __TS_MTK_VERSION__08A0_,在topsun_phone.c中添加了联网方式的函数cbm_encode_data_account_id或always_ask_encode_data_account_id,这个函数的参数还是
要调整跟其他sp的联网参数相同,如果是仅仅添加菜单+,还有查一下其他sp的联网方式,如果同时加了T卡,则看看T卡能不能联网,因为两种方式相同。
24 鸿铭移植主题精灵要去除3个默认主题的方法:
在themeRes.c(相应的屏幕下的touch目录)#define MAX_MMI_THEMES 3中的3改成1.这个编译的时候有可能会错误,const MMI_theme *mtk_MMI_themes[MAX_MMI_THEMES]={
#if (MAX_MMI_THEMES >= 1)
(MMI_theme *)&theme_2Theme, /* Light Blue */
#endif
#if (MAX_MMI_THEMES >= 2)
(MMI_theme *)&theme_1Theme, /* Orange */
#endif
#if (MAX_MMI_THEMES >= 3)
(MMI_theme *)&theme_defaultTheme /* Dark */
#endif
};
这种形式编译不会出错,如果是其他形式,要删除相应的主题。
25 只更换底图不更换宫格在ThemeConverterData.h中屏蔽下面一句:
{"image_id", mmi_tc_image_list_tag_handler, (void *)NULL, (void *)NULL},
26 移植皖翔出现问题
1 菜单单入口进入后事乱码,主要是没有添加TOPSUNClub_init(FALSE);(注意大小写),在mmitask.c中添加extern void TOPSUNClub_init(BOOL flag);
2 烧机后不停的重启,通过catcher调试,assert的地方在nvraminterface.c中的775行,AccessRecordInt有问题,AccessRecordInt->ReadRecord->mmi_uu_thm_read_id_nvram_flag-
>mmi_uu_thm_judge_id_is_save_innv->mmi_uu_thm_enter_main_init_hdlr,从这里可以看出,发生assert的地方一定跟我们添加的内容有某种关系,所以要沿着这种思路去寻找错误,看看我们添加的地方或代码有没有问题,最后发现的问题是添加在nvram_user_config.c里面的#ifdef __TOPSUN_PLAT__
,{
NVRAM_EF_TS_VRAM_ID, /** LID **/
32, /** Size **/
10, /** Total **/
NULL, /** Default value **/
NVRAM_ATTR_AVERAGE, /** Attributes **/
NVRAM_CATEGORY_USER | NVRAM_CATEGORY_CUSTPACK, /** Category **/
"TS", /** fileprefix 最多4字节**/
"000", /** fileverno 最多3字节**/
"TS VRam\0", /** description **/
NVRAM_INVALID_VALUE /** Record ID is calculated by NVRAM. DO NOT TOUCH. **/ }
#endif /* #ifdef __DMG_VRAM__ */
的上面有个结束标志,{ NVRAM_EF_LAST_LID_CUST },导致读取不到NVRAM_EF_TS_VRAM_ID,