一.环境搭建
XP与win7下都可以用下面的方法搭建环境
1. 将win7下面绿色破解版本RVDS3.1.rar里面的ARM文件夹解压到C:\Program Files\中
2. 将armar.rar解压,将解压出来的armar.exe拷贝到C:\Program Files\ARM\RVCT\Programs\3.1\569\win_32-pentium中覆盖掉以前的armar.exe
注:原先的armar.exe是580KB,正确的armar.exe是594KB
3. 设置环境变量
-
ARMLMD_LICENSE_FILE C:\Program Files\ARM\Licenses\rvds.dat
-
ARMROOT C:\Program Files\ARM
-
Path 添加在后面 C:\Program Files\ARM\bin\win_32-pentium;C:\Program Files\ARM\Utilities\FLEXlm\10.8.5.0\1\win_32-pentium;C:\Program Files\ARM\RVCT\Programs\3.1\569\win_32-pentium
-
RVCT31BIN C:\Program Files\ARM\RVCT\Programs\3.1\569\win_32-pentium
-
RVCT31INC C:\Program Files\ARM\RVCT\Data\3.1\569\include\windows
-
RVCT31LIB C:\Program Files\ARM\RVCT\Data\3.1\569\lib
4.检查
-
cmd中运行如下:
-
C:\Users\Administrator>armar --vsn
-
ARM Archiver, RVCT3.1 [Build 1055]
5.安装office
一般系统都带了office,如果没有安装则需要装office中的excel
只需要装excel就可以了,office2003就够用,office2007也可以.
6. 安装perl
双击安装ActivePerl_5.16.2.3010812913.exe即可
7. 源码下面需要拷贝的文件及目录
-
cmd.exe
-
tools\MinGW
-
tools\msys
-
tools\make.exe
-
\plutommi\Customer\ResGenerator\7za.exe
-
\plutommi\Customer\ResGenerator\convert.exe
二.编译
1.编译方法
E:\6261\make\CENON61D_3232_11C_GPRS.mak
在源码的make目录下,有一堆*.make文件,能一个CENON61D_3232_11C_GPRS.mak及CENON61D_3232_11C_GPRS.mak(KAL_TRACE_OUTPUT=FULL)后面有KAL_TRACE_OUTPUT=FULL的两个*.mak文件就对了。
构造编译命令时把GPRS去掉,写成如下
make CENON61D_3232_11C gprs new
make VITA61A_BT_11C gprs new
2. 出错及问题的解决
2.1 出现
C:\Program Files\ARM\ADSv1_2\licenses\license.dat is not existed!
不用管,没有问题
2.2
在.\plutommi\Customer\ResGenerator\ResgenXML\ResgenSrc\mmi_rp_xml.c中
添加定义L335
static void mmi_rp_mgr_output_res_base_table();
2.3
E:/temp/mcu/plutommi/Customer/ResGenerator/ResgenCore/src/common/ImageGroupCreator.cpp:35: undefined reference to `std::__default_alloc_template::allocate(unsigned int)'
把下面三个目录下的.o删掉
E:\cong\6261\plutommi\Customer\ResGenerator\OfflineResGenerator\lib\common\*.o
E:\cong\6261\plutommi\Customer\ResGenerator\ResgenLog\lib\common\*.o
E:\cong\6261\plutommi\Customer\ResGenerator\ResgenCore\lib\common\*.o
2.4
nvram_gen_util.c:1002: error: conflicting types for 'nvram_gen_search_entry'
在E:\MTK\6261\tools\NVRAMStatistic\src\nvram_gen_util.c的开头添加定义
nvram_ltable_entry_struct* nvram_gen_search_entry(nvram_lid_enum lid);
2.5 这个可能不需要
[ERROR] Cannot determine the original codegen database: BPLGUInfoCustomApp_MT6261_S01_MAUI_11C_W13_52_MP_V2 BPLGUInfoCustomApp_MT6261_S01_MAUI_11C_W13_52_MP_V2_F4
make: *** [.\build\CENON61D_3232_11C\gprs\MT6261r\codegen_dep\cgen_cfg.det] Error 2
new
把下面三个目录下的BPLGUInfoCustomApp_MT6261_S01_MAUI_11C_W13_52_MP_V2删掉
E:\cong\6261a\tst\database_classb
E:\cong\6261a\tst\database_classb\MT6261\S00\gprs\KAL_TRACE_OUTPUT\FULL\GEMINI\2
E:\cong\6261a\tst\database_classb\MT6261\S00\gprs\KAL_TRACE_OUTPUT\FULL\GEMINI\FALSE
E:\cong\6261a\tst\database_classb\MT6261\S00\gprs\KAL_TRACE_OUTPUT\NONE\GEMINI\2
E:\cong\6261a\tst\database_classb\MT6261\S00\gprs\KAL_TRACE_OUTPUT\NONE\GEMINI\FALSE
BPLGUInfoCustomApp_MT6261_S00_MAUI_11C_W13_52_MP_V5
2.6 刚开始编译就出现下面
tools\make.exe: Interrupt/Exception caught (code = 0xc0000005, addr = 0x7ef928c8)
网上说跟环境变量有关系,如path中不能用()或者将program file改为PROGRA~1都没有用,直接重装系统
以前是ghost的,换了一个win7企业版的,就没有再出现上面的问题了.
2.7
start MMI feature check...
get feature list from MMI_features.h...
get feature list from MMI_features_switch.h...
generate feature check file...
validate features...
ARM/Thumb C/C++ Compiler, RVCT3.1 [Build 569]
make: *** [mmi_feature_check] Error 1
b.打开log文件
D:\6261a\build\VITA61A_BT_11C\log\mmi_check.log会显示如下:
FLEXnet Licensing error:-1,359. System Error: 2 "No such file or directory"
For further information, refer to the FLEXnet Licensing End User Guide,
c.解决方法:
设置环境变量:
ARMLMD_LICENSE_FILE C:\Program Files\ARM\Licenses\rvds.dat;C:\Program Files\ARM\Licenses\rvds.dat
三. 烧写问题
1. 版本
FlashTool_v5.1332.01 -->no
FlashTool_v5.1420.00 -->ok
2 烧写过程
a. 运行flash tools, 点Scatter/ConfigFile按钮
弹出的对话框中选中
.\build\VITA61A_BT_11C\VITA61A_BT_11C_PCB01_gprs_MT6261_S00.MAUI_11C_W13_52_MP_V5.bin\VITA61A_BT_11C_BB.cfg
b. 点Format按钮
c. 板子接上usb
d. 首次连接时需要装驱动,驱动会自动安装,安装好之后再次拔插usb,此时FlashTools就会检测到MTK,然后就会进行烧写.
3 烧写出错:
not response --> 只是板子插usb不行,需要接上电池
4 烧写出错: S_DL_MAUI_FLASH_ID_NOT_MATCHED_WITH_TARGET(5095)
a.错误的解决方法:
D:\6261\custom\system\VITA61A_BT_11C_BB\custom_MemoryDevice.h
D:\6261\custom\system\VITA61A_BT_11C_BB\combo_flash_id.h
原先: {0xC2, 0x25, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00} -->no
修改: {0xC8, 0x80, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00} -->no
修改: {0xC8, 0x60, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00} -->yes
但是这样改用remake编译时没有问题,而用new编译时这个改动又还原回去了
b. 正确的修改方法-->改配置文件
D:\6261\custom\system\VITA61A_BT_11C_BB\custom_MemoryDevice.h
b.1 该文件中的第1处改动
-
#define MEMORY_DEVICE_TYPE SERIAL_FLASH
-
#define CS0_PART_NUMBER FAKE_SLT_26MHz_GD25LQ128 //MTK_INTERNAL_MX25U12835FZNI_10G_FAKE64Mbits
-
//#define CS1_PART_NUMBER FAKE_SLT_26MHz_GD25LQ128 //MTK_INTERNAL_MX25U12835FZNI_10G_FAKE64Mbits
-
-
#define COMBO_MEM_ENTRY_COUNT 1
-
#define COMBO_MEM01_CS0_PART_NUMBER FAKE_SLT_26MHz_GD25LQ128 //MTK_INTERNAL_MX25U12835FZNI_10G_FAKE64Mbits
-
#define COMBO_MEM01_CS1_PART_NUMBER FAKE_SLT_26MHz_GD25LQ128 //MTK_INTERNAL_MX25U12835FZNI_10G_FAKE64Mbits
-
-
//#define FLASH_ACCESS_TYPE ASYNC_ACCESS
-
#define FLASH_ACCESS_TYPE SYNC_ACCESS
-
#define RAM_ACCESS_TYPE SYNC_ACCESS
b.2 该文件中的第2处改动
-
#define NOR_BOOTING_NOR_FS_BASE_ADDRESS 0x00750000 //7.5M 这个是给固件留出的空间
-
#define NOR_BOOTING_NOR_FS_SIZE 0x00750000 //7.5M 这个是filesystem的空间
-
#define NOR_BOOTING_NOR_FS_FIRST_DRIVE_SECTORS 0 //这个是u盘的空间
b.3 在 D:\6261\tools\MemoryDeviceList\MemoryDeviceList_MT6261_Since11CW1352.xls中添加一行
FAKE_SLT_26MHz_GD25LQ128 (把L43行的FAKE_SLT_26MHz_GD25LQ32复制一下改一下名就行了)
其内容复制MemoryDeviceList_MT6250_Since11BW1212.xls
c. 错误的改动
-
c.1 D:\6261\make\VITA61A_BT_11C_GPRS.mak L2636 去掉combo_memory_support
-
#COMBO_MEMORY_SUPPORT = TRUE
-
COMBO_MEMORY_SUPPORT = FALSE
-
这会导致启动时报错:
-
Jump to ExtBL, 0x6060
-
MiniBL is
-
c.2 D:\6261\custom\system\VITA61A_BT_11C_BB\custom_MemoryDevice.h
-
#define COMBO_MEM_ENTRY_COUNT 0 //由1改为0时
-
编译会出错: 出现flash_opt.h not found
四. 调试
4.1 bootloader及bootloader_ext调试
SecureCRT中串口设置: 115200 8N1
4.2 OS下的调试
4.2.1 uart+catcher调试
a. CENON61D_3232_11C_GPRS.mak中的改动
D:\6216d\make\CENON61D_3232_11C_GPRS.mak中的改动
-
KAL_TRACE_OUTPUT = FULL
-
#KAL_TRACE_OUTPUT = NONE
-
-
PARTIAL_TRACE_LIB = drv custom peripheral bmt
-
#PARTIAL_TRACE_LIB = NONE
-
-
KAL_RECORD_BOOTUP_LOG = TRUE
-
#KAL_RECORD_BOOTUP_LOG = FALSE
-
-
KAL_DEBUG_LEVEL = SLIM_DEBUG_KAL
-
#KAL_DEBUG_LEVEL = RICH_DEBUG_KAL
-
#KAL_DEBUG_LEVEL = RELEASE_KAL
b.nvram_data_items.c中的改动
D:\6261\custom\common\hal\nvram\nvram_data_items.c
在结构体NVRAM_EF_PORT_SETTING_DEFAULT中
添加#define DEF_KAL_TRACE_OUTPUT_UART 0 // 4,99-->none,0-->uart1,1-->uart2,4-->usb
将其中的两个99改为DEF_KAL_TRACE_OUTPUT_UART
见下图:
4.2.2 usb+catcher调试
-
a. CENON61D_3232_11C_GPRS.mak中的改动同2.1
-
-
b. nvram_data_items.c中的改动同上2.1
-
D:\6261\custom\common\hal\nvram\nvram_data_items.c
-
在结构体NVRAM_EF_PORT_SETTING_DEFAULT中
-
添加#define DEF_KAL_TRACE_OUTPUT_UART 4 //这儿由0改为4 // 4,99-->none,0-->uart1,1-->uart2,4-->usb
-
将其中的两个99改为DEF_KAL_TRACE_OUTPUT_UART
-
-
c.catcher中usb设置filter时出错
-
Failed to send filter to L1 trace. Please see [View] ->[Catcher information]
-
用usb调试时,很容易出现上面这个问题
-
解决方法:
-
在catcher中设置了filter,然后确定时,catcher会去找usb的com口(这与FlashTools很类似),发现现在没有usb的com口,就会报错
-
当板子上电时,会枚举出一个usb的com口,若在此时正好点了filter的确定按钮,catcher也查找到了usb的com口,OK,完美!
-
所以点catcher中filter的确定按钮的时机很重要
4.3 注意usb与uart打印的切换
如果板子是以前是从usb打印的,再烧了一个串口打印的固件,这时候需要用flash tools执行一下Total Format.
五. 功能测试
5.1 打电话测试
a. 使用AT命令拨打语音电话12345的命令格式是ATD12345;
注意以;结尾,拨打成功后,返回OK
b. 可以在catcher中使用如下所示:
注意: catcher连接上板子之后send才起作用