美文网首页Android
Android serialno使用指南,修改serialno号

Android serialno使用指南,修改serialno号

作者: 木猫尾巴 | 来源:发表于2017-07-08 09:59 被阅读2015次

    [TOC]

    serialno使用指南

    获取全部的连接号

    adb devices
    adb get-serialno
    

    获取某个设备的连接号,用于确认映射关系

    adb -s [serial] get-serialno
    

    如果修改了 serial 号需要重新连接才能生效

    adb kill-server
    adb devices
    

    多台设备使用 -s 参数连接对应的设备

    adb -s [serialno] shell
    # 以root方式挂载
    adb -s [serialno] root
    

    某些时候需要重启 adbd 服务,在终端模拟器应用上运行

    restart adbd
    

    如果无效使用

    start adbd
    stop adbd
    

    修改serialno

    也就是修改adb devices显示的连接码,或者连接设备时候使用的 -s 的入参

    修改的核心文件是

    adb shell cat /sys/class/android_usb/android0/iSerial
    

    /sys/class/android_usb/android0 文件里面有很多设置当前设备的信息的,可以通过修改这些文件来模拟设备
    修改前一定备份,防止出现不可挽回的损失

    修改前需要检查是否和当前adb get-serialno一致

    需要 root 挂载修改

    # 备份一份
    cp /sys/class/android_usb/android0/iSerial /sys/class/android_usb/android0/iSerial-bak
    # 这里使用mi4Test作为新的设备号
    echo "mi4test" > /sys/class/android_usb/android0/iSerial
    cat /sys/class/android_usb/android0/iSerial
    

    重启adb,然后查看修改过的设备serialno

    adb kill-server
    adb deivces
    

    ROM方式修改serialno

    控制生产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为开机时间

    在文件中修改system\core\init\init.c

    引入时间头文件

     #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;
    }
    

    修改read_serialno()函数

    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);
    }
    

    修改 export_kernel_boot_props函数

    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);
        }
    }
    

    然后通过这个ROM,serialno为开机时间,类似的可以获取设备IP加端口号来更新serialno

    MTK 设备使用ic设备号作为serialno

    宏文件在 /mediatek/platform/mt6589/kernel/core/mt_devs.c

    核心内容

    #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
    

    相关文章

      网友评论

        本文标题:Android serialno使用指南,修改serialno号

        本文链接:https://www.haomeiwen.com/subject/opudhxtx.html