在adb devices列表中的devices name 或使用 adb get-serialno得到的串口名称
修改文件:system\core\init\init.c
struct {
const char *src_prop;
const char *dest_prop;
const char *def_val;
} prop_map[] = {
{ "ro.boot.serialno", "ro.serialno", "0123456789ABCDEF", },
{ "ro.boot.mode", "ro.bootmode", "unknown", },
{ "ro.boot.baseband", "ro.baseband", "unknown", },
{ "ro.boot.bootloader", "ro.bootloader", "unknown", },
修改ro.serialno 的属性值 即可 0123456789ABCDEF 是默认的串号名称,修改这个值即可
例:
更改serialno为开机时间,
增加头文件 #include <time.h>
增加函数 static char* getSystemTime(){
time_t timer;
struct tm* t_tm;
char nowTimer[32];
time(&timer);
t_tm = localtime(&timer);
memset(nowTimer, 0, sizeof(char)*32);
sprintf(nowTimer,"%4d-%02d-%02d-%02d-%02d-%02d", t_tm->tm_year+1900, t_tm->tm_mon+1, t_tm->tm_mday, t_tm->tm_hour, t_tm->tm_min, t_tm->tm_sec);
return nowTimer;
}
修改init.c 函数
static int read_serialno(){
char serialno[32];
memset(serialno, 0, sizeof(char)*32);
memcpy(serialno, getSystemTime(), 32);
xlog_printf(ANDROID_LOG_WARN, LOG_TAG, "serial number=%s\n",serialno);
property_set("ro.boot.serialno", serialno);
}
修改函数 static void export_kernel_boot_props(void){
for (i = 0; i < ARRAY_SIZE(prop_map); i++) {
if(i == 0){
char serialno[32]={0};
memcpy(serialno, getSystemTime(), 32);
property_set(prop_map[i].dest_prop, serialno);
}else
{
pval = property_get(prop_map[i].src_prop);
property_set(prop_map[i].dest_prop, pval ?: prop_map[i].def_val);
}
}
mtk 使用 CONFIG_MTK_USB 宏使串口唯一(使用ic设备号)
文件:./mediatek/platform/mt6589/kernel/core/mt_devs.c
函数 init int mt6589_board_init(void)
#if defined(CONFIG_MTK_USB_UNIQUE_SERIAL)
key = get_devinfo_with_index(13);
key = (key << 32) | get_devinfo_with_index(12);
#else
key = 0;
#endif
可以使用下面的代码使只有再正常模式时串口唯一,meta模式或其他模式启动时串号相同以便以产线校准板子
#if defined(CONFIG_MTK_USB_UNIQUE_SERIAL)
if(get_boot_mode() == 0){ // NORMAL_BOOT =0
key = get_devinfo_with_index(13);
key = (key << 32) | get_devinfo_with_index(12);
}else{
key = 0;
}
#else
key = 0;
#endif