adb shell
logcat
adb logcat Calculator:D *:S Calculator查找条件
adb shell logcat *:E > log.txt
使用adb shell提示adb server is out of date. killing...? //adb端口被占用了
adb nodaemon server
netstat -ano
findstr "5037"
tskill *****
单独加载apk 删除文件之前, 有些需要root才可删除文件
adb remount
rm system/app/Phone.apk
adb push C:\Users\Administrator\Desktop\Phone.apk system/app/ 存放文件
在程序中输出日志, 使用 android.util.Log 类.
该类提供了若干静态方法
Log.v(String tag, String msg);
Log.d(String tag, String msg);
Log.i(String tag, String msg);
Log.w(String tag, String msg);
Log.e(String tag, String msg);
分别对应 Verbose, Debug, Info, Warning,Error.
tag是一个标识,可以是任意字符串,通常可以使用类名+方法名, 主要是用来在查看日志时提供一个筛选条件.
输入##3646633##进入工模(原来是user模式)
然后在标签找到log and debugging中的mtklog,然后开始记录log
adb pull storage/sdcard0/mtklog/ C:\Users\Administrator\Desktop\mtklog
//工程模式log
adb pull /storage/sdcard0/mtklog C:\Users\Administrator\Desktop\mtklog
adb shell ;cat proc/ksmg打印内核信息
mtk 打印内核信息
adb pull /sdcard/mtklog/mobilelog/ xxxx
adb shell getevent 获取上报数据的打印
//串口打印(一种方法是 proc/mtprintk写1)
接一根线,插上usb供电
如果要后查看日志 请使用
adb logcat
关于adb的更多信息请查看官方网站.
当执行 adb logcat 后会以tail方式实时显示出所有的日志信息.
这时候我们通常需要对信息进行过滤,来显示我们需要的信息, 这时候我们指定的 tag就派上了用场.
adb logcat -s MyAndroid:I
使用技巧:
1.使用logcat &在后台运行
2.使用-d得到所有log
3.使用-f或者重定向(>和>>)输出到文件
4.使用-s设置过滤器,得到想要的log。
这时将只显示tag为MyAndroid,级别为I或级别高于I(Warning,Error)的日志信息.
其中表示log的component, tag (或者使用 * 表示所有) , priority 如下所示:
V Verbose
D Debug
I Info
W Warn
E Error
F Fatal
S Silent
事实上logcat的功能是由Android的类android.util.Log决定的,在程序中log的使用方法如下所示:
Log.v() -------------------- VERBOSE
Log.d() -------------------- DEBUG
Log.i() -------------------- INFO
Log.w() -------------------- WARN
Log.e() -------------------- ERROR
以上log的级别依次升高,DEBUG信息应当只存在于开发中,INFO, WARN,ERROR这三种log将出现在发布版本中。
单独编译一个模块, 然后使用adb单独加载apk
./mk mm packages/apps/Phone/
编译系统相关, apk, framework之类的
./mk systemimage
整个系统重新编译
./mk k76 new
********************./mk mm编译清除的错误**********************************
不同的工程模式或用户模式,会删除其他out目录,需要重新编译
所以要么一直用-o=TARGET_BUILD_VARIANT=user,要不不用
./mk -o=TARGET_BUILD_VARIANT=user k76 n ; ./mk -o=TARGET_BUILD_VARIANT=user mm xxxx
./mk k76 n ; ./mk mm xxxx
************************************************************************************************
./mk -o=TARGET_BUILD_VARIANT=user k76 n 用户模式
./mk -o=TARGET_BUILD_VARIANT=eng k76 n 工程模式
./mk -o=TARGET_BUILD_VARIANT=user k76 r
./mk -t k76 n 打印模式 debug 模式
./makeMtk -o=TARGET_BUILD_VARIANT=user m801 r k&&./mk bootimage
./mk r kernel && ./mk bootimage
./mk -o=TARGET_BUILD_VARIANT=user r kernel && ./mk -o=TARGET_BUILD_VARIANT=user bootimage
修改了引脚dct文件
./mk n pl lk kernel; && ./mk r bootimage
./mk nw8801t mma packages/apps/Launcher3 //第一次编译需要使用mma编译launcher3, 之后可以使用mm
修改了ProjectConfig.mk 不 需要整个工程重编
//launcher3还可以有配置的位置
mediatek\custom\nw6881\resource_overlay
\mediatek\custom\k76\cgen\inc\audio_ver1_volume_custom_default.h
修改codegen需要
1、 ./mk -o=TARGET_BUILD_VARIANT=user codegen
2、./mk -o=TARGET_BUILD_VARIANT=user n lk k bootimage
1: ./mk n(r) kernel; ./mk bootimage;当修改kernel相关代码时,要使用此命令,具体如下:
alps/kernel/
alps/mediatek/platform/mt65xx/kernel/
alps/mediatek/source/kernel/
alps/mediatek/customer/mt65xx/kernel/
alps/mediatek/customer/common/kernel/
alps/mediatek/customer/$porject_name$/kernel
......
2: ./mk n pl 当修改preloader相关代码时,要使用此命令,具体如下:
alps/mediatek/platform/mt65xx/preloader/
alps/mediatek/source/preloader/
alps/mediatek/customer/mt65xx/preloader/
alps/mediatek/customer/common/preloader/
alps/mediatek/customer/$porject_name$/kernle
......
3: ./mk uboot 当修改uboot相关代码时,要使用此命令,具体如下:
alps/mediatek/platform/mt65xx/uboot/
alps/mediatek/source/uboot/
alps/bootable/bootloader/uboot/
alps/mediatek/customer/mt65xx/uboot/
alps/mediatek/customer/common/buoot/
alps/mediatek/customer/$porject_name$/uboot/
......
4: ./mk systemimage 当修改system相关代码时使用此命令,具体如下:
alps/frameworks/
alps/packages/
alps/vendor/
alps/hardware/
alps/dalvik/
...........
5: ./mk recoveryimage 当修改recover相关代码时使用此命令,具体如下:
alps/bootable/recovery/
alps/mediatek/customer/$project_name$/recovery/
......
6: ./mk factoryimage: 当修改factory相关代码时使用此命令,具体如下:
alps/mediatek/customer/$project_name$/factory/
alps/mediatek/customer/common/factory/
alps/mediatek/source/factory/
......
7: ./mk secroimage 当修改secro相关代码时使用此命令,具体如下:
alps/mediatek/source/secro/
alps/mediatek/customer/$project_name$/secro/
Example:
./mk -t e1k emigen
: Generate EMI setting source code.
./mk -o=TARGET_BUILD_VARIANT=user e1k n
: Start a user mode full build.
./mk listp : List all available projects.
./mk e1k bootimage
: Build bootimage for e1k project.
./mk e1k bm_new k
: Build kernel for e1k project.
./makeMtk e1k c,bm_remake pl k
: Clean & Build preloader and kernel for e1k project.
./makeMtk e1k n k kernel/xxx/xxx
: Build(full build) kernel component/module
under the path "kernel/xxx/xxx" for e1k project.
./makeMtk e1k r dr Gallery
: Rebuild android module named Gallery for e1k project.
./makeMtk e1k mm packages/apps/Settings
: Change Directory to packages/apps/Settings and execute "mm"
注:通过mmm packages/providers/ContactsProvider/ 编译后的apk在 out/target/product/generic/system/app
这时候通过 adb install out/target/product/generic/system/app/xxx.apk 安装你刚修改过的apk就可以在模拟器上看到你修改的效果了。
adb push方式进去:
adb shell mount -o rw,remount -t ext3 /dev/block/mmcblk0p2 /system 挂载并获取写入权限
adb push xxx.apk /system/app
./mk snod 代替./mk systemimage 打包,可以加速
修改alps/build/core/main.mk:
subdir_makefiles :=\
$(shell build/tools/findleaves.py --prune=out --prune=.repo --prune=.git $(subdirs)
Android.mk)
修改为:
ifneq ($(MAKECMDGOALS),snod)
subdir_makefiles :=\
$(shell build/tools/findleaves.py --prune=out --prune=.repo --prune=.git $(subdirs)
Android.mk)
endif
新的flash, 需要download一个文件到emmc(如必须的分区信息)
之后可以直接用 Firmware->Upgrade
有些东西需要format才能解决(No valid PMT for storage device 8045)
format之后,第一次需要用download, 之后可以用Firmware->Upgrade
创建属于自己的项目
./mk_project.sh add nw7812
com=$1
project=$2
mode=d80 需要copy的项目
uboot lk && 开机第一屏:
mediatek/platform/mt6582/preloader/src/core/main.c
mediatek/platform/mt6582/lk/platform.c
mediatek/platform/mt6582/lk/mt_battery.c
大致流程
main==>bldr_pre_process==>platform_init=>mt65xx_bat_init(开机电压检测)
================================================查询命令 如jgrep resgrep ==============================================
首先需要 source build/envsetup.sh
jgrep 只查找java代码
resgrep 只查找资源
================================================activiry 生命周期 ==============================================
onstop是全屏activity被挡住,
onpause是半屏下拉菜单被挡住
====================================================================================================================
滑动锁屏状态下禁止下拉菜单 & 打电话禁止下拉菜单
滑动锁屏状态下状态栏可以下拉
是google 4.0 默认的设计。如果要禁止此功能,请修改KeyguardViewMediator.java的adjustStatusBarLocked()方法,将
frameworks/base/policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java
if (isSecure()
!ENABLE_INSECURE_STATUS_BAR_EXPAND) {
// showing secure lockscreen; disable expanding.
flags
= StatusBarManager.DISABLE_EXPAND;}修改为:
if (isSecure()
ENABLE_INSECURE_STATUS_BAR_EXPAND) {
模仿如下: packages\apps\Phone\src\com\android\phone\InCallScreen.java
import android.app.StatusBarManager;
private StatusBarManager mStatusBarManager;
public static final String STATUS_BAR_SERVICE = "statusbar";
protected void onCreate(Bundle icicle) {
mStatusBarManager = (StatusBarManager)this.getApplicationContext().getSystemService(Context.STATUS_BAR_SERVICE);
}
//禁止下拉
public void onWindowFocusChanged(boolean hasFocus) {
if(mStatusBarManager != null)
mStatusBarManager.disable(StatusBarManager.DISABLE_EXPAND);
if(mStatusBarManager != null)
mStatusBarManager.disable(StatusBarManager.DISABLE_NONE);
}
//恢复下拉 onstop是全屏activity被挡住, onpause是半屏下拉菜单被挡住
protected void onStop() {
if (DBG) log("onStop()...");
super.onStop();
if(mStatusBarManager != null)
mStatusBarManager.disable(StatusBarManager.DISABLE_NONE);
}
debug 调试模式
MTKLogger is running
MTK_MTKLOGGER_SUPPORT=no //关闭调试模式
MTK_ENGINEERMODE_APP=no //退出工程模式
./mk -o=TARGET_BUILD_VARIANT=user d88 n 用户模式
./mk -t d88 n 打印模式
**************修改了lcd分别率 步骤***********
1、开机logo
ProjectConfig.mk BOOT_LOGO=wsvga //wvga
2、显示屏
ProjectConfig.mk
LCM_HEIGHT=600
LCM_WIDTH=1024
mediatek\custom\common\kernel\lcm\TPG110\TPG110.c 把它替换了
3、touchpannel
mediatek\custom\k76\kernel\touchpanel\GSL2682\tpd_custom_gsl_GST.h 把它换了
**************增加TGP110******************************
printf("[LK/LCM] lcm_init() \n");
printk("[LCM] lcm_init() enter\n");
CLK_Monitor(clk_ckmon1,AD_SYS_26M_CK,0);
mt_set_gpio_mode(GPIO3, GPIO_MODE_01);
//CLK_Monitor(clk_ckmon1,AD_SYS_26M_CK,0);
MDELAY(20);
CUSTOM_KERNEL_MULTIBRIDGE=va7783
MTK_MULTIBRIDGE_SUPPORT=yes
************************mipi***************************
VSPW:Vertical sync pulse width,一个脉冲周期所占的像素点
VFPD:Vertical front porch delay 准备时间 所占的像素点
VBPD:Vertical back porch delay 结束时间 所占的像素点
HSPW:Hertical sync pulse width,一个脉冲周期所占的像素点
HFPD:Hertical front porch delay
HBPD:Hertical back porch delay
params->dsi.LANE_NUM = LCM_TWO_LANE;
lp模式发命令, hs发数据
DSI_clk_HS_mode
HSTX_CKLP_EN 这个变量设为0,就不会进 lp mode
编译的时候mediatek\custom\common\kernel\lcm -> copy mediatek\custom\common\lk\lcm
launcher是RGB666, 而,LCD是RGB888
rgb888输出转为rgb666
输出只需要将lcm_get_params()函数里面的LCM_DSI_FORMAT_RGB888修改为LCM_DSI_FORMAT_RG666
LCM_PACKED_PS_24BIT_RGB888修改为LCM_PACKED_PS_18BIT_RGB666
寄存器的0x17 的值修改为0x01 , 请知悉
VA7783_REG_WRITE(0x17, 0x00); =====> VA7783_REG_WRITE(0x17, 0x01);
static void lcm_init(void)
{
unsigned int i;
lcm_poweron(true);
lcd_reset(1);
MDELAY(10);
lcd_reset(0);
MDELAY(10);
lcd_reset(1);
MDELAY(50); //下面写命令时,需要一定的时间,测试可以用循环初始化 for(i = 0; i < 10; i++)
push_table(lcm_initialization_setting, sizeof(lcm_initialization_setting) / sizeof(struct LCM_setting_table), 1);
}
// Bit rate calculation
////1 Every lane speed
params->dsi.pll_div1=0; // div1=0,1,2,3;div1_real=1,2,4,4 ----0: 546Mbps 1:273Mbps
params->dsi.pll_div2=1; // div2=0,1,2,3;div1_real=1,2,4,4
params->dsi.fbk_div =10;//18 // fref=26MHz, fvco=fref*(fbk_div)*2/(div1_real*div2_real)
fbk_div一般不超过20
频率过高,过低,有可能出现截屏,上屏的图片,在下屏也有
**************mipi命令翻译**********************
MIPI command如下:
regw(0x01);//Reset
Delay 30ms
regw(0x80,0x47);
regw(0x81,0x40);
regw(0x82,0x04);
regw(0x83,0x77);
regw(0x84,0x0F);
regw(0x85,0x70);
regw(0x86,0x70);
data_array[0] = 0x47801500;
dsi_set_cmdq(&data_array, 1, 1);
MDELAY(1);
data_array[0] = 0x40811500;
dsi_set_cmdq(&data_array, 1, 1);
MDELAY(1);
data_array[0] = 0x04821500;
dsi_set_cmdq(&data_array, 1, 1);
MDELAY(1);
data_array[0] = 0x77831500;
dsi_set_cmdq(&data_array, 1, 1);
MDELAY(1);
data_array[0] = 0x0F841500;
dsi_set_cmdq(&data_array, 1, 1);
MDELAY(1);
data_array[0] = 0x70851500;
dsi_set_cmdq(&data_array, 1, 1);
MDELAY(1);
data_array[0] = 0x70861500;
dsi_set_cmdq(&data_array, 1, 1);
MDELAY(1);
***************************花屏****************************
一、lk花屏, “normal消失”到loading之间花屏
540_960分辨率花屏,与800-1280破解有关,需要还原
***************************闪屏****************************
调试寄存器vcom,适当的调电压值,合适即可
***************************亮屏慢****************************
en改为pwm控制
方法
1、dct里面把 gpio90配成 pwm模式
2、或, 硬件修改
头文件所在目录
mediatek\custom\nw6881\kernel\touchpanel\gsl2682
驱动所在地方
mediatek\custom\common\kernel\touchpanel\gsl2682
选择使用哪个tp
X:\nw6881\mediatek\config\nw6881\ProjectConfig.mk
CUSTOM_KERNEL_TOUCHPANEL=gsl2682
编译:./mk -o=TARGET_BUILD_VARIANT=user nw6881 n k && ./mk -o=TARGET_BUILD_VARIANT=user r bootimage
TPD_PROC_DEBUG//这个宏决定 调tp的 工程师是否能在线调试,烧录进去
kernel\drivers\input\touchscreen
k76\mediatek\custom\k76\kernel\touchpanel\GSL2682\tpd_custom_gsl2682.h
修改tp参数,分别率
#include "tpd_custom_gsl_ZHZY.h"
#include "tpd_custom_gsl_GST.h"
#include "tpd_custom_gsl_PB.h"
#include "tpd_custom_gsl_CYY.h"
#define TPD_CUSTOM_GSL_ZHZY 0
#define TPD_CUSTOM_GSL_GST 1
#define TPD_CUSTOM_GSL_PB 0
#define TPD_CUSTOM_GSL_CYY 0
TPD_CUSTOM_GSL_GST 1 使用的就是 tpd_custom_gsl_GST.h 文件的两个数组
static unsigned int gsl_config_data_id_GST[512]
static const struct fw_data GSLX680_FW_GST[]
它们的参数,决定了touchpannel的
并不是修改这些参数,下面的好像没有用到
#define TPD_X_RES 1024
#define TPD_Y_RES 760
*******************模拟近距离************************
tp模拟光感
psensor
tp 模拟光感, 通过TP 灵敏度 可以调整 到悬浮 感应, 1cm左右
光感关键字:proximity
光感配置
CUSTOM_KERNEL_ALSPS=ltr501_liteon#ltr501_liteon#gn_ltr559#ap3216x ap3216c#
修改mediatek\custom\common\kernel\touchpanel\GSL2682\gsl2682_driver.c
使用FAE工具
新建配置->当前配置->靠近关屏新和睡眠,打开
然后在 其它->靠近关屏 调试参数 帮助有说
上半部分生效 **************行平均中 全行->半行
adb 在线调试
按一下B,窗口就会出来
点启动,把.h文件拖进去就可以了
读取按键坐标:
一:直接读取,看打印
二:把xy反过来,读取坐标,只是读坐标,实际的xy并不变,xy还原
*****************************模拟近距离***************************
4.2的第二屏图片在system.img里面
修改开机logo
work_michael\k76\mediatek\config\k76\ProjectConfig.mk
# to choose which boot logo folder would be used, the boot logo folder path is mediatek/custom/common/uboot/logo/
BOOT_LOGO=wsvga //1024*600
BOOT_LOGO=wvga //800*480
目录mediatek/custom/common/uboot/logo/
./mk k76 lk kernel pl; ./mk bootimage
图片目录:mediatek\custom\common\lk\logo\wsvga
快速编译logo,使用linux命令复制,命名图片,不然windows缓存机制
BOOT_LOGO=wsvga
./mk -o=TARGET_BUILD_VARIANT=user n lk
生存的文件bootable\bootloader\lk\build-k76\custom\k76\lk\logo
packages\apps\Settings\src\com\android\settings\Settings.java
private void updateHeaderList(Listtarget) {
final boolean showDev = mDevelopmentPreferences.getBoolean(
DevelopmentSettings.PREF_SHOW,
android.os.Build.TYPE.equals("eng"));
改为final boolean showDev = true;
修改ddr, LPDDR2
\mediatek\custom\k76\preloader\inc\custom_MemoryDevice.h
mediatek\build\tools\TabletEmiList\MT6582\TabletMemoryDeviceList_MT6582.xls 读取的内存信息
当ddr的电压不合适时,有可能造成煲机死机
[DESCRIPTION]
近期emmc vendor陆续推出新的支援emmc 5.0的storage chip(emmc or emcp),如果在MT6589/72/82平台上换用emmc 5.0 storage chip后发现无法正常开机,请参考[SOLUTION]部分的说明。
[KEYWORD]
emmc5.0
[SOLUTION]
换用emmc5.0后无法正常开机主要有两方面原因:
(1) 89/72/82 MSDC本身不支援emmc 5.0 spec,在linux kernel driver上也没有考虑兼容emmc5.0的storage devcie,emmc 5.0 storage device的EXT_CSD_REV[192]的value升级为7,driver会判断为异常。通常在开机uart kernel log中会看到如下的错误提示:
[ 1.865257] (1)[5:kworker/u:0]mmc0: unrecognised EXT_CSD revision 7
[ 1.866085] (1)[5:kworker/u:0]mmc0: error -22 whilst initialising MMC card
如果是由于这个原因无法开机的话,请上PMS系统申请patch ALPS01031775.
(2) Samsung的emmc 5.0 storage device(比如KMN5X000ZM-B209)增大了boot1和boot2 area的size(均是4MB),而emmc 4.41,4.5时代所有厂商的emmc boot1+boo2+RPMB area都没有超过6MB,因此MTK的MBR partition liner start address的最大值default就被设定成6MB.
如果您在配置memory combo时,没有把新添加的emmc 5.0 storage device配置到alps\mediatek\build\tools\emigen\\MemoryDeviceList_.xls表格的“emmc_region” sheet中,那么最终计算出来的MBR start address就仍然为6MB,由于MBR分区必须要处于User area,因此这时就会出现访问地址的offset计算错误。通常在开机uart kernel log中会看到类似如下的错误提示:
[ 3.309425] (2)[62:mmcqd/0][MSDC] msdc0 -> Address offset in USER REGION(Capacity 14912 MB) is 0xffffe400 <- msdc_cal_offset() : L<3104> PID<0x3e>
[ 3.309449] (2)[62:mmcqd/0][MSDC] msdc0 -> XXX Address offset error(-7168),please check MBR start address!! <- msdc_cal_offset() : L<3106> PID<0x3e>
解决方法有两种:
a. 在alps\mediatek\build\tools\emigen\\MemoryDeviceList_.xls的“emmc_region” sheet添加新使用的这颗emmc 5.0 device的entry,并且保证数据无误,建议是直接从MTK official release的MDL表格中拷贝,或是直接使用MTK的MDL表格.
b. 直接修改alps/mediatek/config//mbr_addr.pl文件中的$MBR_Start_Address_KB的值,
$MBR_Start_Address_KB = 6*1024;
修改为:
$MBR_Start_Address_KB = 20*1024;
关于memory combo更多的背景知识请参考"[FAQ11482]【Storage】Flash 兼容(Combo)的实现及现状"这份FAQ。
MT6592以及之后的平台由于采用了新的partition address计算方法不会存在这个问题。
如果贵司是在已经量产的旧项目上新增使用emmc 5.0 device,那么这样修改软件后,会造成新发布的软件无法为已经上市并使用非emmc 5.0 device的机器做OTA升级,对于这种情况请参考以下的说明:
第一种方案是Samsung 回厂把boot1 size 从4M resize 成2M,这样与之前一样;
第二种是MTK 帮 Samsung 提供 workaround 的方法, 需要修改客制化preloader + 客制化MDT tool来完成resize 功能,
用workaround 的方法会增加客户成本和风险:
a. 需要客户在产线上多做一个下载工位,下载具有resize 功能的preloader ;
b. 如果发生resize 失败,可能memory 就报废了.
MTK建议使用方案一,方案二在大规模生产时chip resize fail 损坏的风险
若贵司确认要使用方案二,请先与 Samsung 谈好 fail chip 的处理方式,再反馈至 CR 确认使用方案二,MTK再提供相关协助。
1,mbr_addr.pl 中,$MBR_Start_Address_KB = 6144;(6*1024)要改为$MBR_Start_Address_KB = 20*1024;,
2,mmc.c if (card->ext_csd.rev > 7) //6改为7
砖头救星~emmc clk 对地短接
GPIO控制
mediatek\dct\MT6582.fig
gpio控制软件 mediatek\dct\DrvGen.exe
GPIO_YuSu.cmp cust_gpio_boot.h
--> DrvGen.exe --> codegen.dws ->
MT6575_NP.fig cust_gpio_usage.h
目录mediatek\custom\k76\kernel\dct\dct
gpio初始化mediatek/platform/mt6582/lk/mt_gpio_init.c
CUSTOM_HAL_FLASHLIGHT = constant_flashlight
CUSTOM_KERNEL_FLASHLIGHT = constant_flashlight
mediatek\custom\k76\kernel\flashlight\constant_flashlight\leds_strobe.c
#define FLASH_GPIO_ENF GPIO12
#define FLASH_GPIO_ENT GPIO13
mediatek\custom\nw7813\kernel\camera\camera\kd_camera_hw.c
注意:在kd_camera_hw.c中AVDD = 2.8v DVDD = 1.8V
上电电平
u32 pinSet[2][8]
//camera 包名和类名, camera所以gallery的范围了
launcher:packageName="com.android.gallery3d"
launcher:className="com.android.camera.CameraLauncher"
************************imagesensor的查找*******************************
nw8801t common mt6582(平台) 三个目录都会去找,优先级从高到低
*********************camera快速编译********************************
1、删除 kernel\mediatek\custom\out\hal\imgsensor和kernel\mediatek\custom\out\kernel\imgsensor
2、./mk r k && ./mk r bootimage
3、./mk mm mediatek/platform/mt6582/hardware/mtkcam/
4、./mk snod
或者
//修改应用
./mkr dr libcam.paramsmgr //没有修改型号的情况下使用
./mk snod
//修改内核
./mk r k && ./mk r bootimage
这条command,可以快速编译feature table的so文件:libcam.paramsmgr.so
**************************************************************
闪光灯开机亮:gpio初始化的问题
mediatek\platform\mt6582\lk\mt_gpio_init.c添加
void mt_gpio_set_default_chip(void)
{
.....................
#if 1 //Michael_Lee 2014_06_14
mt_set_gpio_mode(GPIO12,GPIO_MODE_00);
mt_set_gpio_dir(GPIO12,GPIO_DIR_OUT);
mt_set_gpio_out(GPIO12,GPIO_OUT_ZERO);
#endif
}
**************************************************************
*********************去掉闪光灯图标****************************
CUSTOM_HAL_LENS=dummy_lens
CUSTOM_KERNEL_LENS=dummy_lens
public void updateFocusUI() { //当上面的宏没用的时候,注释如下
//focusIndicator.showStart();//Michael_LeePP for white frame
************************camera********************
AVDD 2.8V
DOVDD 1.8V
DVDD 1.1V(500W PIXEL) 1.8V(200W PIXEL) 电压要求看规格书
RESET 和 pwdn引脚一直要注意对应的GPIO是否正确
reset脚位有可能分开,有可能一起
GPIO配置,有可能在kd_camera_hw.h, 也有可能在dct下面
#ifdef GC2235_MIPI_RAW 这个在ProjectConfig.mk里的, 小写即可
//一定要看摄像头pcb私印对不对,否则软件和摄像头对不上
***************************************************************
连拍出现绿照,72的KK版本连拍会绿屏的问题
少一个ioctl
***************************************************************
打开摄像头的三角形有问题
unfortunately, gallery stopped
感光度,三角形
和屏的分辨率, ro.sf.lcd_density有关
***************************************************************
14 SIM
14.1双卡、单卡版本切换:
Double SIM
GEMINI = yes
MTK_GEMINI_ENHANCEMENT= yes
MTK_SHARE_MODEM_SUPPORT= 2
MTK_SHARE_MODEM_CURRENT= 2
MTK_GEMINI_3G_SWITCH=yes
MTK_GEMINI_SMART_3G_SWITCH=1
==>
Single SIM
GEMINI = no
MTK_GEMINI_ENHANCEMENT= no
MTK_SHARE_MODEM_SUPPORT= 2
MTK_SHARE_MODEM_CURRENT= 1
MTK_GEMINI_3G_SWITCH=no
MTK_GEMINI_SMART_3G_SWITCH=0
修改机型
build\tools\buildinfo.sh
echo "ro.product.model=$PRODUCT_MODEL" //关于手机
echo "ro.product.brand=$PRODUCT_BRAND"
echo "ro.product.name=$PRODUCT_NAME"
echo "ro.product.device=$TARGET_DEVICE" //电脑显示的名称
echo "ro.product.manufacturer=$PRODUCT_MANUFACTURER"
persist.sys.timezone=Europe/Moscow //默认时区 不能有空格
ro.product.locale.language=ru //默认语言
ro.product.locale.region=RU
添加frameworks\base\data\sounds\bootanimation.zip
添加frameworks\base\data\sounds\newwavelabs/bootaudio.mp3
frameworks\base\data/sounds/Android.mk
添加
LOCAL_PATH := frameworks/base/data/sounds
TARGET_PATH := system/media/
PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/bootanimation.zip:$(TARGET_PATH)/bootanimation.zip \
$(LOCAL_PATH)/newwavelabs/bootaudio.mp3:$(TARGET_PATH)/bootaudio.mp3
bootanimation.zip的制作方式, 需要三个文件part0, part1, desc.txt(一定需要vim编写,不可以windows,因为没有头标识符)
desc.txt
600 1024 10 分别率 , 帧/s
p 1 0 part0 播放一次
p 0 0 part1 停留到开机
windows 压缩, 压缩格式zip, 压缩方式:存储
壁纸库
注意分辨率,还有图片大小
480_800
k76\packages\apps\Launcher2\res\drawable-nodpi 注意要成对添加wallpaper_road.jpg,wallpaper_road_small.jpg
k76\packages\apps\Launcher2\res\values\wallpapers.xml 添加数组
600_1024
k76\packages\apps\Launcher2\res\drawable-sw600-nodpi 注意要成对添加wallpaper_road.jpg,wallpaper_road_small.jpg
k76\packages\apps\Launcher2\res\values-sw600\wallpapers.xml 添加数组
800_1280
MTK_LIVEWALLPAPER_APP=no
packages\apps\Launcher3\res\drawable-xhdpi
packages\apps\Launcher3\res\values-xhdpi\wallpapers.xml
//默认壁纸
frameworks\base\core\res\res\drawable-nodpi
frameworks\base\core\res\res\drawable-sw600dp-nodpi
MTK_BQ24158_SUPPORT=yes
mediatek\platform\mt6582\kernel\drivers\power\bq24158.c
mediatek\platform\mt6582\kernel\drivers\power\bq24158.h
mediatek\platform\mt6582\kernel\drivers\power\charging_hw_bq24158.c
充电时候,如果线太长,会消耗一定的电压,导致充电电流小
mediatek\custom\k76\kernel\battery\battery\cust_charging.h
#define NON_STD_AC_CHARGER_CURRENT CHARGE_CURRENT_1400_00_MA 修改电压
mediatek\kernel\drivers\power\battery_common.c 电量处理
mediatek\kernel\include\mach\battery_common.h
#define SYSTEM_OFF_VOLTAGE 3400 //关机电压
if (BMT_status.bat_vol <= SYSTEM_OFF_VOLTAGE)
{
resetBatteryMeter = mt_battery_0Percent_tracking_check();
}
*****************************低电压开机********************
开关机不正常,低电压可以开机,低电闪屏,低电不关机
1、//低电压开机
MTK_DISABLE_POWER_ON_OFF_VOLTAGE_LIMITATION=no
mediatek\platform\mt6582\lk\mt_battery.c
void mt65xx_bat_init(void)
{
kal_int32 bat_vol;
// Low Battery Safety Booting
bat_vol = get_bat_sense_volt(1);
printf("[mt65xx_bat_init] check VBAT=%d mV with %d mV\n", bat_vol, BATTERY_LOWVOL_THRESOLD);
pchr_turn_on_charging();
if(g_boot_mode == KERNEL_POWER_OFF_CHARGING_BOOT && (upmu_get_pwrkey_deb()==0) ) {
printf("[mt65xx_bat_init] KPOC+PWRKEY => change boot mode\n");
g_boot_reason_change = true;
}
rtc_boot_check(false);
#ifndef MTK_DISABLE_POWER_ON_OFF_VOLTAGE_LIMITATION
if (bat_vol < BATTERY_LOWVOL_THRESOLD) //Michael_LeePP modify 20140704
//if (g_is_bat_low)
{
if(g_boot_mode == KERNEL_POWER_OFF_CHARGING_BOOT && upmu_is_chr_det() == KAL_TRUE)
{
printf("[%s] Kernel Low Battery Power Off Charging Mode\n", __func__);
g_boot_mode = LOW_POWER_OFF_CHARGING_BOOT;
return;
}
else
{
mt_disp_power(TRUE);//Michael_LeePP modify 20140704 显示低电量图片
mt_disp_show_low_battery();
mdelay(1000);
printf("[BATTERY] battery voltage(%dmV) <= CLV ! Can not Boot Linux Kernel !! \n\r",bat_vol);
#ifndef NO_POWER_OFF
mt6575_power_off();
#endif
while(1)
{
printf("If you see the log, please check with RTC power off API\n\r");
}
}
}
#endif
return;
}
2、//电池曲线不对,配置不对,导致低电不关机
k76\mediatek\custom\k76\kernel\battery\battery\cust_battery_meter_table.h
main ==> platform_init ==> mt65xx_bat_init
**********************************************************
应该是读取 adc_data里面的数字量data, 万用表量接在adc上的模拟电压 然后 公式 模拟电压/参考电压 = data/adc的bit 按照硬件的方式
比如 10bit的adc 参考电压为1.8v 则 你接0.9v恒压在adc的io上 通过adc转换的数字量应该是 1024 * 0.5 = 512 这个和你adc_data里面读到的树应该相等
**********************************************************
pmic读寄存器值换成电压不准确,读adc不正常
REG(0716)*4*1800/32700
解决方法: AUXADC_REF这个引脚=1.8V
**********************************************************
问题:充电电流冲着自动为0,然后充电图标还在
I2c的SCL和SDL上拉4.7k -> 1k电阻,消除iic干扰,防止iic出错,乱写寄存器
从BUG及波形来看,是因为寄存器得到了不同的指令,导致进入升压模式,如果换成1K,保证时钟和数据稳定,
芯片在读数时,就不会读错,不读错,就不会进入到升压模式,那充电自然就会进行;
**********************************************************
mediatek\frameworks\base\telephony\etc\apns-conf.xml
mediatek\frameworks\base\telephony\etc\spn-conf.xml
SPN(Secret Private Network),面向业务的内网安全解决方案,即加密虚拟网络
APN(Access Point Name),即“接入点名称”,用来标识GPRS的业务种类,
MCC=移动国家号码,由3位数字组成,唯一地识别移动用户所属的国家。我国为460。
MNC=移动网号,由两位数字组成,用于识别移动用户所归属的移动网。邮电部门GSM PLMN网为00,“中国联通公司”GSM PLMN网为01。
type =
{
default:默认网络连接,当激活时所有数据传输都使用该连接,不能与其他网络连接同时使用,
适用场合:绝大部分正常上网时可以使用
mms:彩信专用连接,此连接与default类似,用于与载体的多媒体信息服务器对话的应用程序,此连接能与default连接同时使用
适用场合:使用彩信服务时,必须有mms类型的接入点,不必选中,应用程序会自动使用此接入点
dun: Dial Up Networking拨号网络的简称,此连接与default连接类似,用于执行一个拨号网络网桥,使载体能知道拨号网络流
量的应用程序,此连接能与default连接同时使用
适用场合:需要使用运营商无线热点的,CMCC、ChinaNet等
supl: Secure User Plane Location“安全用户面定位”的简写,此连接与default类似,用于帮助定位设备与载体的安全
用户面定位服务器对话的应用程序,此连接能与default连接同时使用
适用场合:需要自动切换wap与net接入点的、需要把手机当临时AP的
hipri: 高优先级网络,与default类似,但路由设置不同。
只有当进程访问移动DNS服务器,并明确要求使用requestRouteToHost(int, int)才会使用此连接
}
cmwap和cmnet是GPRS网络的两种接入方式。其实上吧,是wap方式和net方式。cm是chinamobile。
CMWAP 和 CMNET 只是中国移动人为划分的两个GPRS接入方式。前者是为手机WAP上网而设立的,后者则主要是为PC、笔记本电脑、
PDA等利用GPRS上网服务。它们在实现方式上并没有任何差别,但因为定位不同,所以和CMNET相比,CMWAP便有了部分限制,资费
上也存在差别。
Vibrator 振动器,马达
frameworks\base\core\res\res\values\config.xml
0
12
#解锁有关,改为0解锁就没震动了
0
50
四键震动
20
70
菜单,返回,桌面,后台的震动, 可以改为5
软键盘按键振动
40
去除虚拟按键,home 返回
false
CUSTOM_KERNEL_ACCELEROMETER=stk8312 #mc3xxx #mc32x0 #mc3210#kxtik1004
文件夹 mediatek\custom\common\kernel\accelerometer
mediatek\custom\k76\kernel\accelerometer
static struct acc_hw cust_acc_hw = {
.i2c_num = 2, //第几路i2c
.direction = 4, //方向的选择, 如0(x,y,z),1(-y,x,z)..4(-x,y,-z),MTK_MT6575开发驱动部分介绍.pdf中有介绍
.power_id = MT65XX_POWER_NONE,
.power_vol= VOL_DEFAULT,
.firlen = 1,
};
//i2c的地址在Gsensor内部定义, 与总线I2C无关
static struct i2c_board_info __initdata i2c_stk831x={ I2C_BOARD_INFO(STK831X_DEV_NAME, 0x3D)};
[FAQ04906][USB] 如何修改USB存储在PC"我的电脑"中显示的label名称
**喇叭,通话音量,通话扬声器,音频,喇叭声音减小***************
\mediatek\custom\k76\cgen\inc\audio_ver1_volume_custom_default.h
#define VER1_AUD_VOLUME_SPH \
40,52,64,76,88,100,112,0,0,0,0,0,0,0,0,\
40,52,64,76,88,100,112,0,0,0,0,0,0,0,0,\
70,85,100,115,120,125,130,0,0,0,0,0,0,0,0,\ //VER1_AUD_VOLUME_SPH调试通话声音
40,52,64,76,88,100,112,0,0,0,0,0,0,0,0
可以用*#*#3646633#*#*
harware test --> audio --> loudspeaker mode 的sph 可以在线调试值
如果是播放音乐等使用扬声器的,就是普通模式(normal)-->media-->Level
在\mediatek\custom\nw7813\cgen\inc\audio_ver1_volume_custom_default.h中的VER1_AUD_VOLUME_MEDIA中第一个等级中更改。
VER1_AUD_VOLUME_MEDIA中四个等级分别对应Normal Mode,Headset Mode,Loudspeaker Mode,Headset_Loudspeaker Mode。
同理VER1_AUD_VOLUME_SPH中一样。
clock配置方法:
lcm driver中配置clock有不同的方式,曾经使用过的配置方法有如下几种:
Type1: 配置倍频与分频参数:dsi.pll_div1(倍频), dsi.pll_div2(分频)--- (适用于75/77等之前的平台)
Type2: 配置倍频与分频参数:dsi.pll_fbk_div(倍频), dsi.pll_div1 & dsi.pll_div2 (分频)---(适用于89/72等前
期版本)
Type3: 直接配置clock lane频率:dsi.PLL_CLOCK(前期配置成枚举值,后期将直接配置成对应的频率常数值)----(适
用于89/72/82...)
FPS计算方法:
BRPL(Bit Rate Per Lane) = FL(Frame length) * FPS/ LN (Lane Number)
Type1: BRPL = fref(26M)*(div1+1) * / (2*div2_real)
Type2: BRPL = fref(26M) X (fbk_div+1)*2/(div1_real*div2_real)
--------- div1=0,1,23 div1_real=1,2,4,4
Type3: BRPL = PLL_CLOCK * 2
Video Mode:
Frame Length(FL) = (Hsync+HBP+Hadr+HFP) * (Vsync+VBP+Vadr+VFP) * BPP
Command Mode:
Frame Length(FL) = Width * height * Bpp * (1+overhead)
其中Overhead = (Tlpx + Ths_prep + Ths_zero + Ths_trail +8) /(packet Size/LN) (一般经验值取0.2)
//计算dsi.PLL_CLOCK方法, pixcl clk / dot clk,上述公式的结果
//多点少点可以, 大概那个值就行了,建議值請使用 26 的倍數
dsi.PLL_CLOCK = pclk * 3;
1280*800图片地址
packages\apps\Settings\res\drawable-mdpi
图标引用查看
packages\apps\Settings\xml\settings_headers.xml
自定义主题
themes.xml
......
@style/MyActionBar
styles.xml
实现自定义style
@style/TextAppearance.Holo.Widget.ActionBar.Title.Own
parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title"> 打印
#000
mediatek\config\nw8801t\system.prop
ro.sf.lcd_density=200
====================================================================================================================
wifi里有个nvram worring信号满格的咋回事?
没写mac地址
理论上校准好了就没有了
====================================================================================================================
隐藏省电背光
frameworks\base\packages\SystemUI 里面查找
frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\PhoneStatusBar.java
private void prepareNavigationBarView() {
mNavigationBarView.reorient();
mNavigationBarView.getRecentsButton().setOnClickListener(mRecentsClickListener);
mNavigationBarView.getRecentsButton().setOnTouchListener(mRecentsPreloadOnTouchListener);
mNavigationBarView.getHomeButton().setOnTouchListener(mHomeSearchActionListener);
mNavigationBarView.getSearchLight().setOnTouchListener(mHomeSearchActionListener);
//#if 1 //luo add 2014
mNavigationBarView.getScreenshotButton().setVisibility(View.GONE); //++++++++++++隐藏
mNavigationBarView.getScreenshotButton().setOnTouchListener(mScreenshotPreloadOnTouchListener);//++++++++++++
//#endif luo add end
updateSearchPanel();
}
//频段的选择, 如2100+900M(硬件决定), 则12 + 58 具体在band表
CUSTOM_MODEM=discovery82_tb_kk_hspa_band1258
Band1 2100
Band2 1900
Band5 850
Band8 900
1258就是全频段的,但是只能当2100来用
编译
删了
//产生在out\target\product\nw8801m\obj\CUSTGEN\custom\modem
./mk -o=TARGET_BUILD_VARIANT=user update-modem
./mk -o=TARGET_BUILD_VARIANT=user snod
//里面有必装app, 如ISDB-T quickset
mediatek\binary\packages
TouchPanel显示区域内 按键配置 FAQ
***************************************
添加gms包
vendor\mediatek\nw7813\artifacts\out\target\product\nw7813 //里面的东西,编译还存在
添加gms包
[FAQ04300]如何预置APK
1、注意拷贝lib 到system/lib下, 如tmp.apk命名.rar, 然后拷贝armeabi-v7a下面的lib
2、直接拷贝app system/app下
android.mk,自动拷贝
//拷贝多个apk, 不可卸载
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) #apk1
# Module name should match apk name to be installed
LOCAL_MODULE := Google_Maps_8.1.0 //不允许有空格
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := platform
include $(BUILD_PREBUILT)
include $(CLEAR_VARS) #apk2
# Module name should match apk name to be installed
LOCAL_MODULE := com.vendors.gamesportal-oysters
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := platform
include $(BUILD_PREBUILT)
***************************************
一、触发方式
1、修改dct的中断
2、
mediatek\custom\nw7813\kernel\core\src\board.c
.cd_level = MSDC_CD_LOW,
*************************4.4.2系统外置SD卡无法使用的问题********************************
system/etc/permissions/platform.xml
源文件:frameworks\base\data\etc\platform.xml
< group gid="sdcard_rw" />
******************************internel storage******************************************
如何实现single partition storage or shared sdcard功能, Single partitioh即为shared sdcard功能,
此功能打开后会将sdcard与data分区合并,只能使用MTP来访问sdcard。
MTK_SHARED_SDCARD=yes//no->yes 合并内存
工程new
**********************
两个内存,分区,合成一个
一个是装东西的,一个是当T卡用的(内置t卡)
FAQ12170 如何去掉内置t卡
mediatek\config\xxxx\BoardConfig.mk设置大小
BOARD_MTK_ANDROID_SIZE_KB := 921600
BOARD_MTK_CACHE_SIZE_KB := 129024
BOARD_MTK_USRDATA_SIZE_KB := 997376
****************************************************************************
1、glonass 俄罗斯卫星
按照fap, 读不到ID, 强制写3332id
res = confirm_if_3332();
res=0;
===============================================快速替换工具=============================================================
快速替换
ctrl v 选中
大写 I 插入需要的值
按两次Esc退出即可
=================================================Launcher3=======================================================
热键,按键,桌面最底下快捷键,
packages\apps\Launcher3\res\xml\default_workspace.xml
mediatek\custom\xxxx\resource_overlay
launcher:packageName="com.android.camera" //adb shell pm list package
launcher:className="com.android.camera.Camera" //可以使用"查看包名.apk"查看这些参数
launcher:screen="4"
launcher:x="4"
这里的位置不能与中间按键重合,不然不会显示出来
//camera
launcher:packageName="com.android.gallery3d"
launcher:className="com.android.camera.CameraLauncher"
//google play store
launcher:packageName="com.android.vending"
launcher:className="com.android.vending.AssetBrowserActivity"
//查看包名,类名,使用eclipse ddms
拖动图标,如google play store会出现, 搜索"onLongClick"
cmp=com.android.vending/.AssetBrowserActivity
//launcher添加appwidget,原理是把launcher放入pri-app
launcher3/Android.mk
添加LOCAL_PRIVILEGED_MODULE := true
短信转mms数量,彩信,the SMS message to an MMS message
4
====================================================================================================================
82KK 插USB就关机
打开一个宏就可以啦
AP和BP 与 modem有关,不同的modem不一样
AP 在(out\target\product\xxxx\obj\CODEGEN\cgen)
BP 在(mediatek\custom\common\modem\xxx)
注意:板子需要加电池(否则容易写不进去,usb供电没做好,需要加外部RTC)
====================================================================================================================
8127A-D有破解分辩率
TRACE32工具
/frameworks/base/wifi/java/android/net/wifi/wifimanager.java
calculateSignalLevel为计算信号等级函数,MAX_RSSI和MIN_RSSI分别为最强和最弱信号强度等级的
信号强度阀值。
====================================================================================================================
MTK 65XX系列通过USB OTG添加Ethernet RJ45有线网卡支持
====================================================================================================================
内置t卡预置资源:
1、通过fat.img挂载进去
2、recovery的时候,如下
[FAQ11640]【sdcard-FAT filesystem】打开
shared sdcard(single partition storage)功能
后,如何在内置T卡中预制资源?
[FAQ10734]开启了MTK_SHARED_SDCARD之后;恢复
出厂设置如何保留预置资源?
bootable\recovery\recovery.cpp
recovery_restore_special("/sdcard/", "/system/data/"); //Michael_LeePP for maplayer
==================================================================================================================