为MTK andorid系统添加adb reboot factory命令

    此添加方法,通过重启命令的参数修改RTC模块的的一个端口的一位寄存器,待重新启动后通过读取改为的值来选择进入normal模式还是factory模式。

(1)mediatek/platform/mt6582/kernel/core/include/mach/mt_rtc_hw.h文件修改:

 添加代码:

           #define RTC_PDN1_FACTORY            (1U<<5) //将RTC_PDN1口的第五位设置成命令标志位

(2)mediatek/kernel/kernel/system.c文件修改:

         在函数void arch_reset(char mode, const char *cmd)的定义内添加:

        if(cmd && !strcmp(cmd,"factory")){

          rtc_mark_factory();

          }                                       //cmd即adb reboot 后面的参数,当参数为factory时,通过rtc_mark_factory()修改命令标志位。

(3)mediatek/kernel/include/mach/mtk_rtc.h文件修改:

添加代码:

          extern void rtc_mark_factory(void);

(4)mediatek/kernel/drivers/rtc/mtk_rtc_common.c文件修改:

添加代码:

          vodi rtc_mark_factory(void)

          {       unsigned long flags:

                   spin_lock_irqsave(&rtc)lock,flags);

                   hal_rtc_mark_mode("fact");

                   spin_unlock_irqrestore(&rtc_lock,flags);

          }

(5)mediatek/platform/mt6582/kernel/drivers/rtc/mtk_rtc_hal.c文件修改:

 在函数 void hal_rtc_mark_mode(const char *cmd)的定义中添加:

           if(!strcmp(cmd,"fact")){

             pdn1 = rtc_read(RTC_PDN1) & (~RTC_PDN1_FACTROY);

             rtc_write(RTC_PDN1,pdn1 |  RTC_PDN1_FACTORY);

           }   //真正修改标志位,置RTC_PDN1_BIT5标志位为1

 

以上5步,是命令发出后,手机重启前进行相关操作所涉及的修改

(6)mediatek/platform/mt6582/lk/facotry.c文件修改:

  在函数 bool factory_detection(void)函数的定义中添加:

            #if  1

                     if(Check_RTC_PDN1_bit5())

                    {

                             dprintf(INFO,"[FACTORY] reboot to factory mode \n");

                             g_boot_mode = FACTORY_BOOT;

                             Set_Clr_RTC_PDN1_bit5(false);

                             return TRUE;

                      }

            #endif                 //  确认RTC_PDN1_bit5标志位,进入factory mode

(7)mediatek/platform/mt6582/lk/include/platform/mt_rtc.h文件修改:

添加代码:

 extern void Set_Clr_RTC_PDN1_bit5(bool flag);

 extern void bool Check_RTC_PDN1_bit5(void);

(8)mediatek/platform/mt6582/lk/mt_rtc.c文件修改:

添加代码:

           void Set_Clr_RTC_PDN1_bit5(bool flag)

{           U16 pdn1;

             rtc_writeif_unlock();

            //use PDN BIT 5 for LK

            pdn1 = RTC_Read(RTC_PDN1);

            if (flag == true)

                   pdn1 = pdn1 | RTC_PDN1_FACTORY;

           else if (flag == false)

                  pdn1 = pdn1 & ~RTC_PDN1_FACTORY;}

            RTC_Write(RTC_PDN1,pdn1);

           rtc_write_trigger();

}

 

bool Check_RTC_PDN1_bit5(void)

{

            U16 pdn1;

            pdn1 = RTC_Read(RTC_PDN1);

            if(pdn1 & RTC_PDN1_FACTORY)

                              return true;

            else

                              return false;

}

 (9)最后,修改/mediatek/config/$project$/ProjectConfig.mk

添加代码:MTK_USER_ROOT_SWITCH=yes   、//打开重启开关


版权声明:本文为nbalichaoq原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。