Èç¹ûÄÜÈÃAndroidϵͳԴÂëÔÚÕæÊµÉ豸ÉÏÅÜÅÜ¿´Ð§¹û£¬ÄǸöàºÃ¡£Õâ²»¾ÍÊÇ´«ËµÖеÄË¢ROMÂð£¿Ë¢ROMÕâ¸ö»°ÌâÊÇÀÏÂÞÒÔǰһֱ±ÜÃâ̸µÄ£¬ÒòΪ¾õµÃûÓÐÈ«ÃæÁ˽âAndroidϵͳǰ¾Í̸ROMÊDz»ÍêÕûµÄ¡£Ð´ÍêÁË101ƪÎÄÕºó£¬ÀÏÂÞ¾õµÃÎÄÕ¸Ã̸̸Õâ¸ö»°ÌâÁË£¬²¢ÇÒÑ¡ÔñCMÕâ¸öÓдú±íÐÔµÄROMÀ´Ì¸£¬Ä¿±êÊǼÓÉî´ó¼Ò¶ÔAndroidϵͳµÄÁ˽⡣
˵ÆðË¢ROMµÄ¶¯»ú£¬³ýÁËÉÏÃæËµµÄÓÃÀ´¿´AndroidϵͳԴÂëÔÚÕæÊµÉ豸ÉϵÄÔËÐÐЧ¹û£¬»¹ÓкܶàÖµµÃ˵µÄ¡£»ØÏëÆðPCʱ´ú£¬ÎÒÃǶÔÎÒÃÇ×Ô¼ºÓµÓеÄÉ豸£¨µçÄÔ£©£¬»ù±¾ÉÏÄÜ×öµÄ¾ÍÊÇÔÚÉÏÃæÖØ×°ÏµÍ³¡£Õâ¸öϵͳÊdz§ÉÌ×öºÃ¸øÎÒÃǵģ¬ÀïÃæÓÐʲôÎÒÃǾÍÓÃʲô£¬²»ÄÜËæÐÄËùÓûµØ¶¨ÖÆ¡£µ±È»£¬Èç¹ûÄãÓõÄÊÇLinuxϵͳ£¬ÄãÊÇ¿ÉÒÔËæÐÄËùÓûµØ¶ÔËü½øÐж¨ÖƵġ£²»¹ý¿ÉϧµÄÊÇ£¬ÎÒÃǵÄÅ®ÉñÓõͼÊÇWindowsϵͳ¡£ÄãºÍÅ®Éñ˵ÄãÏëҪʲôÑùµÄLinuxϵͳ£¬ÎÒ¸øÄã¶¨ÖÆÒ»¸ö£¬Ëý»á²»ÖªµÀÄã˵µÄÊÇʲô¡ª¡ªËýÐèÒªµÄÊÇÒ»¸ö²»»áÖж¾µÄÓÖÅܵÿìµÄWindowsϵͳ¶øÒÑ¡£ÏÖÈç½ñËäÈ»ºÜ¶àÅ®ÉñÓõÄÊÇÈÔÈ»ÊÇÎÒÃDz»ÄÜËæÐÄËùÓû¶¨ÖƵÄiOSϵͳ£¬µ«ÊÇÔÚÒÆ¶¯É豸ÉÏ£¬iOSϵͳ±Ï¾¹²»ÄÜ×öµ½WindowsÔÚPCÄÇÑùµÄÒ»¼Ò¶À´ó¡ª¡ªÎÒÃÇ»¹Óв»ÉÙÅ®ÉñÊÇÓÃAndroidϵͳµÄ¡£ËùÒÔ£¬Èç¹ûÄãÏÖÔÚºÍÅ®Éñ˵£¬ÎÒ¿ÉÒÔ°ïÄãË¢Ò»¸öרÊôµÄ¾«¼òAndroidϵͳ£¬ÀïÃæÃ»ÓÐÒ»¶ÑÄã²»ÐèÒªµÄԤװÈí¼þ£¬»áÈÃÄãµÄÊÖ»úÅܵúܿ죬ÄÇÅ®ÉñµÃÓжà³ç°ÝÄã°¡¡£
µ±È»£¬Ë¢ROMµÄ¶¯»ú²»ÄÜÖ»ÊÇΪÁËÈÃÅ®Éñ³ç°Ý£¬×÷Ϊһ¸ö³ÌÐòÔ³£¬ÎÒÃǵÄÊ×ÒªÈÎÎñÊÇά»¤ÓîÖæºÍƽ¡£Ôõôά»¤ÄØ£¿ÖÁÉÙ³ÌÐòÓÐBUG²»Äܲ»¸Ä°É¡£Äã²»¸ÄµÄ»°£¬ÀϰåÊDz»»á·Å¹ýÄãµÄ¡£µ«ÊÇ£¬Åöµ½ÄÇЩºÜ¼¬ÊÖµÄBUG£¬Ôõô°ìÄØ£¿ÀýÈ磬ÄãÊÇÒ»¸öAndroidÓ¦Óÿª·¢Õߣ¬µ÷ÓÃÒ»¸öAPI½Ó¿ÚµÄʱºò£¬×ÜÊÇÅ׳öÒ»¸öÒì³££¬¶øÕâ¸öÒì³£²»¸úµ½APIÄÚ²¿ÊµÏÖÈ¥¿´¿´ÊµÔÚÊDz»ÖªµÀʲôÔÒòÔì³ÉµÄ¡£Õâʱºò£¬Èç¹ûÄãÊÖÍ·ÉÏÓÐÕâ¸öÊÖ»úµÄϵͳԴ´úÂ룬ÕÒÕâ¸öAPIÄÚ²¿ÊµÏֵĵط½£¬¼ÓÒ»Á½Ðе÷ÊÔ´úÂ룬ÔÙ±àÒë»ØÊÖ»úÉÏÈ¥ÅÜ£¬ÊDz»ÊǾͺÜÈÝÒ×¶¨Î»ÎÊÌâÁËÄØ£¿
ËùÒÔ˵£¬»áË¢ROM£¬²»Ö»ÊÇ¿ÉÒÔ»ñµÃÅ®Éñ³ç°Ý£¬»¹¿ÉÒÔά»¤ÊÀ½çºÍƽ£¬×÷Ϊһ¸öAndroid¿ª·¢Õߣ¬Ä㻹ÓÐʲôÀíÓɲ»È¥Ñ§Ï°Ë¢ROMÄØ£¿¼ÈÈ»Äã¾ö¶¨Ñ§Ï°Ë¢ROMÁË£¬ÄÇÄã¾ÍµÃÏȸãÇå³þÁ½¸öÎÊÌ⣺1.
ʲôÊÇË¢ROM£»2. ÔõôѧϰˢROM¡£
ÔڻشðµÚÒ»¸öÎÊÌâ֮ǰ£¬ÎÒÃÇÏÈÀ´¿´¿´AndroidÉ豸´ÓÓ²¼þµ½ÏµÍ³µÄ½á¹¹£¬Èçͼ1Ëùʾ£º

ͼ1 Androidϵͳ¼Ü¹¹
×îµ×²ãµÄÊǸ÷ÖÖÓ²¼þÉ豸£¬ÍùÉÏÒ»²ãÊÇBootloader¡£BootloaderÊÇʲô¸ÅÄîÄØ£¿ÎÒÃǶ¼ÖªµÀ£¬PCÖ÷°åÉÏÓÐһС¶Î³ÌÐò½Ð×öBIOS£¬Ö÷°å¼ÓµçʱËüÊǵÚÒ»¸öÅÜÆðÀ´µÄ³ÌÐò£¬¸ºÔð³õʼ»¯Ó²¼þ£¬ÒÔ¼°½«OSÆô¶¯ÆðÀ´¡£ÔÚǶÈëʽÊÀ½çÀÊÖ»úÒ²ÊÇÊôÓÚǶÈëʽÉ豸£©£¬Ò²ÓÐһС¶ÎÀàËÆBIOSµÄ³ÌÐò£¬²»¹ýËü²»½ÐBIOS£¬¶øÊǽÐBootloader¡£Ê¹ÓÃ×î¹ã·ºµÄBootloaderÊÇÒ»¸ö½ÐubootµÄ³ÌÐò£¬ËüÖ§³Ö·Ç³£¶àµÄÌåϵ½á¹¹¡£¾¹ý±àÒëºó£¬uboot»áÉú³ÉÒ»¸öuboot.bin¾µÏñ£¬½«Õâ¸ö¾µÏñÉÕµ½É豸ÉϵÄÒ»¸öÌØ¶¨·ÖÇøÈ¥£¬¾Í¿ÉÒÔ×÷ΪBootloaderʹÓÃÁË¡£
BootloaderÖ§³Ö½»»¥Ê½Æô¶¯£¬Ò²¾ÍÊÇÎÒÃÇ¿ÉÒÔÈÃBootloader³õʼ»¯Íê³ÉÓ²¼þÖ®ºó£¬²»ÊÇÂíÉÏÈ¥Æô¶¯OS£¬¶øÊÇÍ£ÁôÔÚµ±Ç°×´Ì¬£¬µÈ´ýÓû§ÊäÈëÃüÁî¸æËßËü½ÓÏÂÀ´¸Ã¸Éʲô¡£ÕâÖÖÆô¶¯Ä£¿é¾Í³ÆÎªFastbootģʽ¡£¶ÔÓÚAndroidÉ豸À´Ëµ£¬ÎÒÃÇ¿ÉÒÔͨ¹ýadb
reboot bootloaderÃüÁîÀ´ÈÃËüÖØÐÂÆô¶¯²¢ÇÒ½øÈëµ½FastbootģʽÖÐÈ¥¡£
ÔÚÌÖÂÛFastbootģʽ֮ǰ£¬ÎÒÃÇÏÈÁ˽âÒ»ÏÂǶÈëʽÉ豸µÄROM½á¹¹£¨NAND flashÖ®ÀàµÄоƬ£©¡£Í¨³££¬Ò»¸öÄܹ»Õý³£Æô¶¯µÄǶÈëʽÉ豸µÄROM°üº¬ÓÐÒÔÏÂËĸö·ÖÇø£º
1. Bootloader·ÖÇø£¬Ò²¾ÍÊÇ´æ·Åuboot.binµÄ·ÖÇø
2. BootloaderÓÃÀ´±£´æ»·¾³±äÁ¿µÄ·ÖÇø
3. Kernel·ÖÇø£¬Ò²¾ÍÊÇ´æ·ÅOSÄں˵ķÖÇø
4. Rootfs·ÖÇø£¬Ò²¾ÍÊÇ´æÈëϵͳµÚÒ»¸ö½ø³Ìinit¶ÔÓ¦µÄ³ÌÐòµÄ·ÖÇø
µ±É豸´¦ÓÚFastbootģʽʱ£¬ÎÒÃÇ¿ÉÒÔͨ¹ýÁíÍâÒ»¸ö¹¤¾ßfastbootÀ´ÈÃÉ豸ִÐÐÖ¸¶¨µÄÃüÁî¡£¶Ô¸ã»úÕßÀ´Ëµ£¬×î³£ÓõÄÃüÁî¾ÍÊÇË¢Èë¸÷ÖÖ¾µÏñÎļþÁË£¬ÀýÈ磬ÍùKernel·ÖÇøºÍRootfs·ÖÇøË¢ÈëÖ¸¶¨µÄ¾µÏñ¡£
¶ÔÓÚAndroidÉ豸À´Ëµ£¬µ±Ëü´¦ÓÚFastbootģʽʱ£¬ÎÒÃÇ¿ÉÒÔ½«Ò»¸ö°üº¬ÓÐKernelºÍRootfsµÄRecovery.img¾µÏñͨ¹ýfastboot¹¤¾ßË¢Èëµ½Ò»¸ö³ÆÎªÉ豸ÉÏÒ»¸ö³ÆÎªRecoveryµÄ·ÖÇøÈ¥¡£Õâ¸ö¹ý³Ì¾ÍÊÇË¢RecoveryÁË£¬ËüÒ²ÊÇÊôÓÚË¢ROMµÄÒ»ÖÖ¡£ÓÉÓÚRecovery·ÖÇø°üº¬ÓÐKernelºÍRootfs£¬Òò´Ë½«Recovery.imgË¢Èëµ½É豸ºó£¬ÎÒÃǾͿÉÒÔÈÃÉ豸Õý³£µØÆô¶¯ÆðÀ´ÁË¡£ÕâÖÖÆô¶¯·½Ê½¾Í³ÆÎªRecoveryģʽ¡£
¶ÔÓÚAndroidÉ豸À´Ëµ£¬ÎÒÃÇ¿ÉÒÔͨ¹ýadb reboot recoveryÃüÁîÀ´ÈÃËü½øÈëµ½RecoveryģʽÖÐÈ¥¡£
µ±É豸´¦ÓÚRecoveryģʽʱ£¬ÎÒÃÇ¿ÉÒÔ×öÐ©Ê²Ã´ÄØ£¿´ð°¸ÊÇÈ¡¾öÓÚË¢ÈëµÄRecovery.imgËù°üº¬µÄRootfsËù°üº¬µÄ³ÌÐò¡£¸üÈ·ÇеØËµ£¬ÊÇÈ¡¾öÓÚRootfs¾µÏñÀïÃæµÄinit³ÌÐò¶¼×öÁËЩʲôÊÂÇé¡£²»¹ý¹ËÃû˼Ò壬Recovery¾ÍÊÇÓÃÀ´»Ö¸´ÏµÍ³µÄÒâ˼£¬Ò²°üº¬ÓиüÐÂϵͳµÄÒâ˼¡£ÕâÀïËù˵µÄϵͳ£¬ÊÇÓû§Õý³£Ê¹ÓõÄϵͳ£¬ÀïÃæ°üº¬ÓÐAndroidÔËÐÐʱ¿ò¼Ü£¬Ê¹µÃÎÒÃÇ¿ÉÒÔÔÚÉÏÃæ°²×°ºÍʹÓø÷ÖÖAPP¡£
Óû§Õý³£Ê¹ÓÃAndroidÉ豸ʱµÄϵͳ£¬Ö÷ÒªÊǰüº¬ÓÐÁ½¸ö·ÖÇø£ºSystem·ÖÇøºÍBoot·ÖÇø¡£System·ÖÇø°üº¬ÓÐAndroidÔËÐÐʱ¿ò¼Ü¡¢ÏµÍ³APPÒÔ¼°Ô¤×°µÄµÚÈý·½APPµÈ£¬¶øBoot·ÖÇø°üº¬ÓÐKernelºÍRootfs¡£Ë¢Èëµ½System·ÖÇøºÍBoot·ÖÇøµÄÁ½¸ö¾µÏñ³ÆÎªsystem.imgºÍboot.img£¬ÎÒÃÇͨ³£½«ËüÃÇ´ò°üºÍѹËõΪһ¸özipÎļþ£¬ÀýÈçupdate.zip£¬²¢ÇÒ½«ËüÉÏ´«µ½AndroidÉ豸ÉϵÄsdcardÉÏÈ¥¡£ÕâÑùµ±ÎÒÃǽøÈëµ½Recoveryģʽʱ£¬¾Í¿ÉÒÔÔÚRecovery½çÃæÉÏÓÃÎÒÃÇ֮ǰÉÏ´«µ½sdcardµÄzip°üÀ´¸üÐÂÓû§Õý³£Ê¹ÓÃAndroidÉ豸ʱËùÓõÄϵͳÁË¡£Õâ¸ö¹ý³Ì¾ÍÊÇͨ³£Ëù˵µÄË¢ROMÁË¡£
²»ÖªµÀ´ó¼Ò¿´Ã÷°×ÁËûÓУ¿¹ãÒåÉϵÄË¢ROM£¬Êµ¼ÊÉϰüº¬¸üÐÂRecoveryºÍ¸üÐÂÓû§Õý³£Ê¹ÓõÄϵͳÁ½¸öÒâ˼£»¶øÏÁÒåÉϵÄË¢ROM£¬Ö»ÊǸüÐÂÓû§Õý³£Ê¹ÓõÄÄǸöϵͳ¡£¸üÐÂRecoveryÐèÒª½øÈëµ½FastbootģʽÖУ¬¶ø¸üÐÂÓû§Õý³£Ê¹ÓõÄÄǸöϵͳÐèÒª½øÈëµ½RecoveryģʽÖС£AndroidÉ豸ÔÚÆô¶¯µÄ¹ý³ÌÖУ¬ÔÚĬÈÏÇé¿öÏ£¬Ò»µ©BootloaderÆô¶¯Íê³É£¬¾Í»áÖ±½ÓÆô¶¯Óû§Õý³£Ê¹ÓõÄÄǸöϵͳ£¬¶ø²»»á½øÈëµ½Recoveryģʽ£¬»òÕßÍ£ÁôÔÚBootloaderÖУ¬Ò²¾ÍÊÇÍ£ÁôÔÚFastbootģʽÖС£Ö»ÓÐͨ¹ýÌØ¶¨µÄÃüÁÀýÈçadb
reboot recoveryºÍadb reboot bootloader£¬»òÕßÌØ¶¨µÄ°´¼ü£¬ÀýÈçÔÚÉ豸Æô¶¯¹ý³ÌÖÐͬʱ°´×¡ÒôÁ¿¼õС¼üºÍµçÔ´¿ª¹Ø¼ü£¬²ÅÄÜÈÃÉ豸½øÈëµ½Recoveryģʽ»òÕßFastbootģʽÖС£
Òò´Ë£¬Ò»¸öÍêÕûµÄË¢ROM¹ý³Ì£¬°üº¬ÒÔÏÂÁ½¸ö²½Ö裺
1. ÈÃÉ豸½øÈëµ½Fastbootģʽ£¬Ë¢ÈëÒ»¸örecovery.img¾µÏñ
2. ÈÃÉ豸½øÈëµ½Recoveryģʽ£¬Ë¢ÈëÒ»¸ö°üº¬system.img¾µÏñºÍboot.img¾µÏñµÄzip°ü
²»¹ýÐèҪעÒâµÄÊÇ£¬system.img¾µÏñºÍboot.img¾µÏñ²»Ò»¶¨ÊÇÖ»ÓÐÔÚRecoveryģʽ²ÅÄÜË¢È룬ÔÚFastbootģʽÏÂÒ²ÊÇ¿ÉÒÔË¢ÈëµÄ£¬¾ÍÏñÔÚFastbootģʽÖÐË¢Èërecovery.img¾µÏñÒ»Ñù£¬Ö»²»¹ýÔÚRecoveryģʽÏÂË¢ÈëËüÃǸüÓѺÃһЩ¡£Ëµµ½ÕâÀ¾Í²»µÃ²»ËµÁíÍâÒ»¸ö¸ÅÄ¾ÍÊÇËùνµÄBootloaderËø¡£ÔÚËø¶¨BootloaderµÄÇé¿öÏ£¬ÎÒÃÇÊÇÎÞ·¨Ë¢Èë·Ç¹Ù·½µÄrecovery.img¡¢system.imgºÍboot.img¾µÏñµÄ¡£ÕâÊǸú³§ÉÌʵÏÖµÄBootloaderÏà¹ØµÄ£¬ËüÃÇ¿ÉÒÔͨ¹ýÒ»¶¨µÄËã·¨£¨ÀýÈçÇ©Ãû£©À´Ñé֤ҪˢÈëµÄ¾µÏñÊÇ·ñÊǹٷ½·¢²¼µÄ¡£ÔÚÕâÖÖÇé¿öÏ£¬±ØÐëÒª¶ÔBootloader½øÐнâËø£¬ÎÒÃDzſÉÒÔË¢Èë·Ç¹Ù·½µÄ¾µÏñ¡£
ºÃÁË£¬ÒÔÉϾͻشðÁËʲôÊÇË¢ROMÕâ¸öÎÊÌ⣬½ÓÏÂÀ´ÎÒÃÇÒª»Ø´ðµÄÊÇÈ糣ѧϰˢROMÕâ¸öÎÊÌâ¡£
Ç°ÃæÎÒÃÇÌáµ½ÁËË¢ROMµÄÁ½¸ö²½Ö裬ʵ¼ÊÉÏÎÒÃÇ»¹ÉÙÁËÒ»¸öÖØÒªµÄ²½Ö裬ÄǾÍÊÇÏÈÒªÖÆ×÷recovery.img¡¢system.imgºÍboot.img¡£ÓÐÈË¿ÉÄÜ»á˵£¬ÍøÉϲ»ÊǺܶàÏֳɵÄË¢»ú°üÂð£¿Ö±½ÓÄùýÀ´Óò»¾ÍÊÇÐÐÁËÂ𣿵«ÊDZðÍüÁËÇ°ÃæÎÒÃÇËù˵µÄË¢ROM¶¯»ú£ºËæÐÄËùÓûµØ¶¨ÖÆ×Ô¼ºµÄϵͳ¡£È¥ÄñðÈËÖÆºÃµÄË¢»ú°ü¾ÍʧȥÁËËæÐÄËùÓû¶¨ÖƵÄÄÜÁ¦¡£ÄǾÍÖ»ÄÜ×Ô¼ºÈ¥±àÒëAOSPÔ´ÂëÉú³ÉË¢»ú°üÁË¡£
È»¶ø£¬´ÓÁ㿪ʼ´ÓAOSPÔ´ÂëÖбàÒë³öÄÜÔÚ×Ô¼ºÊ¹ÓõÄÊÖ»úÉÏÔËÐеÄϵͳ£¬¿É²»ÊÇÒ»¼þÈÝÒ×µÄÊÂÇé¡£²»¹ý£¬ºÃÔÚÓкܶàÏֳɵĻùÓÚAOSPµÄµÚÈý·½¿ªÔ´ÏîÄ¿£¬¿ÉÒÔ±àÒë³öÀ´ÔÚĿǰÊг¡Éϴ󲿷ֵÄÊÖ»úÉÏÔËÐС£ÆäÖУ¬×îÖøÃûµÄ¾ÍÊÇCyanogenModÁË£¬¼ò³ÆCM¡£¹úÄڴ󲿷ֵĵÚÈý·½Androidϵͳ£¬¶¼ÊÇ»ùÓÚCMÀ´¿ª·¢µÄ£¬°üÀ¨MIUIºÍ´¸×Ó¡£
Ñ¡ÔñCMÀ´½²½âË¢ROMµÄ¹ý³ÌÊDZ¾ÎĵÄÖ÷Ìâ¡£²»¹ýµ¥¾ÍË¢ROMÕâ¸ö¹ý³ÌÀ´Ëµ£¬CM¹ÙÍøÉÏÒѾÓкÜÏêϸµÄ¹ý³Ì£¬°üÀ¨´ÓCMÔ´Âë±àÒë³öÊÊÓÃÌØ¶¨»úÐ͵ÄË¢»ú°ü£¬ÒÔ¼°½«±àÒë³öÀ´µÄË¢»ú°üË¢µ½ÊÖ»úÀïÃæÈ¥µÄ¹ý³Ì¡£Òò´Ë£¬±¾ÎIJ»Êǵ¥´¿µØ½²½âË¢ROM¹ý³Ì£¬¶øÊÇÒª½áºÏÔÀíÀ´½²½âË¢ROM¹ý³ÌµÄ¹Ø¼ü²½Ö裬À´´ïµ½°ïÖú´ó¼Ò¸ü½øÒ»²½µØÀí½âAndroidµÄÄ¿µÄ¡£
ÒªÕæÕý×öµ½Àí½âCM ROMµÄË¢»úÔÀí£¬³ýÁËÒª¶ÔAndroidϵͳ±¾ÉíÓÐÒ»¶¨µÄÈÏʶ֮Í⣬»¹ÊìÁ·ÕÆÎÕAndroidµÄÔ´Âë¹ÜÀíϵͳºÍ±àÒëϵͳ¡£Òò´Ë£¬ÔÚ¼ÌÐøÔĶÁÏÂÃæµÄÄÚÈÝ֮ǰ£¬Ï£Íû¿ÉÒÔÏÈÔĶÁÇ°ÃæAndroidÔ´´úÂë²Ö¿â¼°Æä¹ÜÀí¹¤¾ßRepo·ÖÎöºÍAndroid±àÒëϵͳ¼òÒª½éÉܺÍѧϰ¼Æ»®ÕâÁ½¸öϵÁеÄÎÄÕ¡£½ÓÏÂÀ´ÎÒÃǾͿªÊ¼½²½âCM
ROMµÄË¢»ú¹ý³ÌºÍÔÀí¡£
ÎÒÃÇÊ×ÏÈÊÇҪ׼±¸ºÃ»·¾³ÒÔ¼°ÊÖ»ú¡£ÕâÊDZ¾´Î²Ù×÷ËùÓõĻ·¾³ÒÔ¼°ÊÖ»ú£º
1. Ubuntu 13.04
2. CM-10.1
3. OPPO Find 5
Ò²¾ÍÊÇ˵£¬ÎÒÃǽ«ÔÚUbuntu 13.04ÉÏΪOPPO Find 5ÖÆ×÷CM-10.1µÄRecoveryºÍROM¡£
²»¹ýÏȱð¼±×ÅÖÆ×÷×Ô¼ºµÄROM¡£ÎªÁ˱£Ö¤½ÓÏÂÀ´µÄ²½Öè¿ÉÒÔ˳ÀûÖ´ÐУ¬ÎÒÃÇÊ×Ïȳ¢ÊÔË¢Ò»ÏÂCM¹Ù·½¶ÔÓ¦°æ±¾µÄRecoveryºÍROMµ½ÎÒÃǵÄOPPO
Find 5ÊÖ»úÉÏ¡£Èç¹ûÒ»ÇÐÕý³££¬¾Í˵Ã÷ÎÒÃÇʹÓÃCMµÄÔ´ÂëÀ´ÖÆ×÷µÄRecoveryºÍROMÒ²ÊÇ¿ÉÒÔÔËÐÐÔÚOPPO
Find 5Éϵġ£
ÊʺÏOPPO Find 5µÄCM¹Ù·½RecoveryÏÂÔØµØÖ·£ºhttp://download2.clockworkmod.com/recoveries/recovery-clockwork-6.0.4.6-find5.img¡£¼ÙÉèÎÒÃÇÏÂÔØºÃÖ®ºó£¬±£´æÔÚ±¾µØµÄ·¾¶Îª$CM/recovery-clockwork-6.0.4.6-find5.img¡£
ÊʺÏOPPO Find 5µÄCM¹Ù·½10.1.3°æ±¾ROMÏÂÔØµØÖ·£ºhttp://download.cyanogenmod.org/get/jenkins/42498/cm-10.1.3-find5.zip¡£¼ÙÉèÎÒÃÇÏÂÔØºÃÖ®ºó£¬±£´æÔÚ±¾µØµÄ·¾¶Îª$CM/cm-10.1.3.find5.zip¡£
×¢Ò⣬ÓÉÓÚÎÒÃǼƻ®ÓÃCM-10.1Ô´ÂëÀ´ÖÆ×÷×Ô¼ºµÄROM£¬ËùÒÔÎÒÃÇÔÚÏÂÔØCM¹Ù·½ROM£¬Ò²ÒªÏÂÔØ¶ÔÓ¦10.1°æ±¾µÄ¡£
ÔÚË¢RecoveryºÍROMµÄ¹ý³ÌÖУ¬ÎÒÃÇÐèÒª½èÖúÓÚAndroid SDKÀïÃæµÄfastbootºÍadb¹¤¾ß£¬Òò´Ë£¬ÎªÁË·½±ãÖ´ÐÐÕâЩÃüÁÎÒÃÇÏȽ«ÕâЩ¹¤¾ßµÄĿ¼¼ÓÈëµ½PATH»·¾³±äÁ¿È¥¡£¼ÙÉèÎÒÃÇÏÂÔØµÄAndroid
SDK±£´æÔÚĿ¼$ASDKÖУ¬ÄÇô´ò¿ªÒ»¸öÖÕ¶Ë£¬Ö´ÐÐÒÔÏÂÃüÁî¼´¿É£º
$ export PATH=$ASDK/platform-tools:$PATH |
ÏÈË¢Recovery£¬²½ÖèÈçÏÂËùʾ£º
1. ±£³ÖOPPO Find 5ÔÚÕý³£¿ª»ú״̬£¬²¢ÇÒͨUSBÁ¬½Óµ½½«ÓÐUbuntu
13.04µÄµçÄÔÉÏ¡£
2. »¹ÊÇÔڸղŴò¿ªµÄÖÕ¶ËÉÏ£¬²¢ÇÒ½øÈëµ½±£´ærecovery-clockwork-6.0.4.6-find5.imgµÄĿ¼$CM¡£
3. Ö´ÐÐÒÔÏÂÃüÁîÈÃOPPO Find 5ÖØÆô£¬²¢ÇÒ½øÈëFastbootģʽ¡£
4. ¿ÉÒÔ¿´µ½OPPO Find 5Í£ÁôÔÚFastboot½çÃæÉÏ£¬Ö´ÐÐÒÔÏÂÃüÁîÈ·±£fastboot¹¤¾ßÄܹ»Á¬½Óµ½OPPO
Find 5¡£
Èç¹ûÄܹ»Á¬½Ó£¬ÄÇôÉÏÊöÃüÁ»áÊä³öÒ»´®±êʶOPPO Find 5µÄID¡£
5. Ë¢ÈëÎÒÃǸղÅÏÂÔØµÄRecovery¡£
$ fastboot flash recovery recovery-clockwork-6.0.4.6-find5.img |
6. ÌáʾˢÈë³É¹¦ºó£¬Ö´ÐÐÒÔÏÂÃüÁîÕý³£ÖØÆôÊÖ»ú¡£
Èç¹ûÒ»ÇÐÕý³££¬ÊÖ»ú½«½øÈëµ½ÔÀ´µÄϵͳÖС£
¼ÌÐøÔÚÉÏÊö´ò¿ªµÄÖÕ¶ËÉÏ£¬Ë¢CM-10.1.3 ROM£¬²½ÖèÈçÏÂËùʾ£º
1. ½«ÏÂÔØºÃµÄcm-10.1.3.find5.zipÉÏ´«ÖÁOPPO
Find 5µÄsdcardÉÏ
$ adb push cm-10.1.3.find5.zip /sdcard/cm-10.1.3.find5.zip |
2. Ö´ÐÐÒÔÏÂÃüÁîÈÃOPPO Find 5ÖØÆô£¬²¢ÇÒ½øÈëRecoveryģʽ¡£
½øÈëµ½Recoveryģʽºó£¬ÎÒÃǽ«¿´µ½ÏÔʾµÄRecovery°æ±¾ºÅΪ6.0.4.6£¬Õâ±íÃ÷ÎÒÃÇÏÖÔÚ½øÈëµÄ¾ÍÊǸղÅÎÒÃÇË¢ÈëµÄRecovery¡£
3. ÔÚË¢ÈëеÄROMǰ£¬ÎÒÃÇÏȱ¸·Ýһϵ±Ç°µÄROM£¬ÒÔ·ÀÍòһˢ»úʧ°Ü£¬¿ÉÒÔ½øÐлָ´¡£ÔÚRecovery½çÃæÖУ¬Í¨¹ýÒôÁ¿Ôö´ó/¼õС¼ü£¬Ñ¡ÖС°backup
and restore¡±Ñ¡Ï°´ÏµçÔ´¼ü£¬½øÈëÏÂÒ»¸ö½çÃæ£¬Í¬ÑùÊÇͨ¹ýÒôÁ¿Ôö´ó/¼õС¼ü£¬Ñ¡ÖС°backup¡±£¬°´ÏµçÔ´¼ü£¬¾Í¿ÉÒÔ¶Ôµ±Ç°ÏµÍ³½øÐб¸·ÝÁË¡£
4. ±¸·ÝÍê³ÉÖ®ºó£¬ÎÒÃÇ»¹ÒªÇå³ýÊÖ»úÉϵÄÊý¾Ý£¬»Ö¸´ÖÁ³ö³§ÉèÖ᣻ص½Recovery½çÃæÖУ¬Í¨¹ýÒôÁ¿Ôö´ó/¼õС¼ü£¬Ñ¡ÖÐ"wipe
data/factory reset"£¬°´ÏµçÔ´¼ü£¬È·ÈϺ󼴿ɽøÐÐÇå³ýÊý¾Ý£¬²¢ÇÒ»Ö¸´ÖÁ³ö³§ÉèÖá£
5. Çå³ýÊý¾ÝÍê³ÉÖ®ºó£¬Ôٻص½Recovery½çÃæÉÏ£¬Í¨¹ýÒôÁ¿Ôö´ó/¼õС¼ü£¬Ñ¡ÖС°install zip¡±Ñ¡Ï°´ÏµçÔ´¼ü£¬½øÈëÏÂÒ»¸ö½çÃæ£¬Í¬ÑùÊÇͨ¹ýÒôÁ¿Ôö´ó/¼õС¼ü£¬Ñ¡ÖС°choose
zip from sdcard¡±£¬°´ÏµçÔ´¼ü£¬ÕÒµ½Ç°ÃæÎÒÃÇÉÏ´«ÖÁsdcardµÄcm-10.1.3.find5.zip£¬È·ÈÏÖ®ºó¾Í¿ÉÒÔ½øÐÐË¢»úÁË¡£
6. Ë¢»úÍê³Éºó£¬Ôٻص½Recovery½çÃæÉÏ£¬Í¨¹ýÒôÁ¿Ôö´ó/¼õС¼ü£¬Ñ¡ÖС°reboot system
now¡±Ñ¡Ï°´ÏµçÔ´¼ü£¬Õý³£Æô¶¯ÏµÍ³¡£
Èç¹ûÒ»ÇÐÕý³££¬ÊÖ»ú½«½øÈëµ½¸Õ²ÅË¢ÈëµÄCM-10.1.3ϵͳÖС£
ÏÖÔÚÎÒÃǾͿÉÒÔÈ·¶¨OPPO Find 5¿ÉÒÔÕý³£ÔËÐÐCM-10.1.3µÄϵͳÁË¡£½ÓÏÂÀ´¼¤¶¯ÈËÐĵÄʱ¿Ì¾ÍÒª¿ªÊ¼ÁË£¬ÎÒÃǽ«Òª×Ô¼ºÏÂÔØºÍ±àÒëCM-10.1Ô´Â룬²¢ÇÒ½«±àÒë³öÀ´µÄRecoveryºÍROMË¢Èëµ½OPPO
Find 5È¥¡£Í¬Ê±£¬ÔÚ½ÓÏÂÀ´µÄ²½ÖèÖУ¬ÎÒÃǻὫÏà¹ØµÄÔÀí½²Çå³þ£¬ÒÔ±ãÎÒÃÇ¿ÉÒÔ¸üºÃµØÀí½âAndroidϵͳµÄ½á¹¹£¬ÕâÒ²ÊDZ¾ÎĵÄÖØµãÖ®Ò»¡£ÒÔϼÙÉèÎÒÃǽ«CM-10.1Ô´Âë±£´æÔÚĿ¼$CMSOURCEÖУ¬²¢ÇÒÒѾ°´ÕÕAndroid¹ÙÍøÎĵµµÄÒªÇó³õʼ»¯ºÃAndroidµÄÔ´Âë±àÒë»·¾³£¬¼´ÔÚÎÒÃǵÄUbuntu»úÆ÷Éϰ²×°ÁËÒªÇóµÄÈí¼þ£¬ÏêÇéÇë²Î¿¼£ºhttp://source.android.com/source/initializing.html¡£
1. ½øÈëµ½$CMSOURCEĿ¼ÖС£
2. ½«µ±Ç°Ä¿Â¼³õʼΪCM-10.1·ÖÖ§Ô´ÂëµÄGit²Ö¿â¡£
$ repo init -u git://github.com/CyanogenMod/android.git -b cm-10.1 |
3. ÏÂÔØCM-10.1·ÖÖ§Ô´Âë¡£
ÒÔÉÏÁ½²½¶¼ÊǹØÓÚAndroidÔ´Âë²Ö¿âµÄ֪ʶ£¬¿ÉÒԲο¼AndroidÔ´´úÂë²Ö¿â¼°Æä¹ÜÀí¹¤¾ßRepo·ÖÎöÒ»ÎÄ£¬ÕâÀï²»ÔÙÏêÊö¡£
4. ½øÈëµ½$CMSOURCEĿ¼ÏµÄvendor/cm×ÓĿ¼ÖУ¬²¢ÇÒÖ´ÐÐÀïÃæµÄget-prebuilts½Å±¾£¬ÓÃÀ´»ñµÃһЩԤ±àÒëµÄAPP¡£
´ò¿ª$CMSOURCE/vendor/cm/get-prebuiltsÎļþ£¬ËüµÄÄÚÈÝÈçÏÂËùʾ£º
BASEDIR=`dirname $0` mkdir -p $BASEDIR/proprietary # Get Android Terminal Emulator (we use a prebuilt so it can update from the Market) curl -L -o $BASEDIR/proprietary/Term.apk -O -L
http://jackpal.github.com/Android-Terminal-Emulator/downloads/Term.apk unzip -o -d $BASEDIR/proprietary $BASEDIR/proprietary/Term.apk lib/* |
ÎÒÃÇ¿ÉÒÔ·¢ÏÖ£¬Êµ¼ÊÉÏÕâÀïÖ»ÊÇÈ¥ÏÂÔØÒ»¸ö½Ð×öAndroid Terminal
EmulatorµÄAPP£¬µØÖ·ÊÇhttp://jackpal.github.com/Android-Terminal-Emulator/downloads/Term.apk¡£Õâ¸öAPP×îÖÕ»á°üº¬ÔÚÎÒÃÇ×Ô¼º±àÒë³öÀ´µÄROM¡£ËüÓÃÀ´AndroidÊÖ»úÉÏÄ£Äâ³öÒ»¸öÖÕ¶ËÀ´£¬È»ºóÎÒÃǾͿÉÒÔÏñÔÚLinuxÖ÷»úÉÏÒ»ÑùÖ´ÐÐһЩ³£ÓõÄLinuxÃüÁî¡£ÊDz»ÊǺܿáÄØ£¿ÔÀ´AndroidÊÖ»ú²»µ¥Ö¹¿ÉÒÔÔËÐÐÎÒÃdz£¼ûµÄAPP£¬»¹¿ÉÒÔÔËÔËÎÒÃdz£ÓõÄLinuxÃüÁî¡£¹ØÓÚÕâ¸öAndroid
Terminal EmulatorµÄ°²×°ºÍ½éÉÜ£¬²Î¿ÉÒÔÕâÀhttps://github.com/jackpal/Android-Terminal-Emulator¡£´ËÍ⣬Õâ¸öAndroid
Terminal Emulator»¹¿ÉÒÔÅäºÏÁíÍâÒ»¸ö·â×°ÁËbusyboxµÄkbox¹¤¾ß£¬ÓÃÀ´ÔÚAndroidÊÖ»úÉÏ»ñµÃ¸ü¶àµÄLinux³£ÓÃÃüÁkboxµÄ°²×°ºÍ½éÉÜ£¬¿ÉÒԲο¼ÕâÀhttp://kevinboone.net/kbox2_install.html
5. »Øµ½$CMSOURCEĿ¼ÖУ¬½«build×ÓĿ¼ÏµÄenvsetup.sh½Å±¾¼ÓÔØµ½µ±Ç°ÖÕ¶ËÀ´¡£
$ source build/envsetup.sh |
²Î¿¼Android±àÒëϵͳ»·¾³³õʼ»¯¹ý³Ì·ÖÎöÒ»ÎÄ£¬envsetup.sh½Å±¾¼ÓÔØµ½µ±Ç°Öն˺ó£¬ÎÒÃǾͿÉÒÔ»ñµÃһϵÁÐÓëAndroid±àÒëϵͳÏà¹ØµÄÃüÁÀýÈçlunch/m/mm/mmm£¬ÒÔ¼°ÏÂÒ»²½ÒªÖ´ÐеÄbreakfastÃüÁî¡£
6. ΪOPPO Find 5ÏÂÔØÏà¹ØµÄÔ´Âë¡£
ÔÚAndroid±àÒëϵͳ¼òÒª½éÉܺÍѧϰ¼Æ»®Õâ¸öϵÁеÄÎÄÕÂÖУ¬ÎÒÃÇÌáµ½£¬ÔÚ±àÒëAndroidµÄ¹Ù·½Ô´Âë֮ǰ£¬ÎÒÃÇÐèÒªÖ´ÐÐÒ»¸ölunchÃüÁîÀ´ÎªÎÒÃǵÄÄ¿±êÉ豸³õʼ»¯±àÒë»·¾³¡£Õâ¸ölunchÃüÁîÊÇÓÉAndroid¹Ù·½Ô´ÂëµÄenvsetup.sh½Å±¾ÌṩµÄ¡£CMÐÞ¸Äenvsetup.sh½Å±¾£¬¶îÍâÌṩÁËÒ»¸öbreakfastÃüÁÓÃÀ´´ÓÍøÉÏѰÕÒÖ¸¶¨µÄÉ豸Ïà¹ØµÄÔ´Â룬ÒÔ±ãÎÒÃÇ¿ÉÒÔΪ¸ÃÉ豸±àÒë³öÄÜÔËÐеÄROMÀ´¡£
´ò¿ªenvsetup.shÎļþ£¬²é¿´breakfastµÄʵÏÖ£º
function breakfast() { target=$1 CM_DEVICES_ONLY="true" unset LUNCH_MENU_CHOICES add_lunch_combo full-eng for f in `/bin/ls vendor/cm/vendorsetup.sh 2> /dev/null` do echo "including $f" . $f done unset f if [ $# -eq 0 ]; then # No arguments, so let's have the full menu lunch else echo "z$target" | grep -q "-" if [ $? -eq 0 ]; then # A buildtype was specified, assume a full device name lunch $target else # This is probably just the CM model name lunch cm_$target-userdebug fi fi return $? } |
º¯ÊýbreakfastÖ÷ÒªÊÇ×öÁËÒÔÏÂÁ½¼þÊÂÇé¡£
µÚÒ»¼þÊÂÇéÊǼì²évendor/cmĿ¼ÏÂÊÇ·ñ´æÔÚÒ»¸övendorsetup.shÎļþ¡£Èç¹û´æÔڵϰ£¬¾Í½«Ëü¼ÓÔØµ½µ±Ç°ÖÕ¶ËÀ´¡£×¢Ò⣬ÕâÀïÊÇͨ¹ýlsÃüÁîÀ´¼ì²éÎļþendor/cm/vendorsetup.shÊÇ·ñ´æÔڵġ£Èç¹û²»´æÔڵϰ£¬±ê×¼Êä³ö¾ÍΪ¿Õ£¬¶ø´íÎóÐÅÏ¢»áÖØ¶¨ÏòÖÁ/dev/null¡£Èç¹û´æÔڵϰ£¬×Ö·û´®¡°endor/cm/vendorsetup.sh¡±¾Í»áÊä³öµ½±ê×¼Êä³öÀ´£¬Ò²¾ÍÊDZäÁ¿fµÄÖµ»áµÈÓÚ¡°endor/cm/vendorsetup.sh¡±¡£
½ÓÏÂÀ´ÎÒÃǾͿ´¿´Îļþendor/cm/vendorsetup.shµÄÄÚÈÝ£º
for combo in $(curl -s https://raw.github.com/CyanogenMod/hudson/master/cm-build-targets
| sed -e 's/#.*$//' | grep cm-10.1 | awk {'print $1'}) do add_lunch_combo $combo done |
ËüËù×öµÄ¹¤×÷¾ÍÊǽ«https://raw.github.com/CyanogenMod/hudson/master/cm-build-targetsµÄÄÚÈÝÏÂÔØ»ØÀ´£¬²¢ÇÒÈ¥µôÆäÖеĿÕÐУ¬×îºó½«º¬ÓÐ"cm-10.1"µÄÐеĵÚ1ÁÐÈ¡³öÀ´£¬²¢ÇÒͨ¹ýadd_lunch_comboÃüÁÆä¼ÓÈëµ½Android±àÒëϵͳµÄlunch²Ëµ¥È¥¡£
´Óhttps://raw.github.com/CyanogenMod/hudson/master/cm-build-targetsÏÂÔØ»ØÀ´µÄÊǹٷ½CMËùÖ§³ÖµÄ»úÐÍÁÐ±í£¬¸ñʽΪcm_<product>-<variant>
<version>£¬ÒÔÏÂÁгöµÄÊDz¿·ÖÄÚÈÝ£º
# CM build target list # <lunchcombo> <branch> [period: "D"aily, "W"eekly or "M"onthly] # Absence of a period indicates Daily (the default) cm_a700-userdebug cm-11.0 cm_acclaim-userdebug cm-11.0 cm_amami-userdebug cm-11.0 cm_anzu-userdebug jellybean M cm_apexqtmo-userdebug cm-11.0 cm_aries-userdebug cm-11.0 cm_captivatemtd-userdebug cm-11.0 ...... |
Óɴ˿ɼû£¬Ö´Ðнű¾endor/cm/vendorsetup.shÖ®ºó£¬cm-10.1ËùÖ§³ÖµÄ»úÐ;ͻáÔö¼Óµ½lunch²Ëµ¥ÖÐÈ¥¡£
»Øµ½º¯ÊýbreakfastÖУ¬ËüËù×öµÄµÚ¶þ¼þÊÂÇéÊǼì²éÖ´Ðк¯ÊýÊÇ·ñ´øÓвÎÊý£¬¼´±äÁ¿targetµÄÖµÊÇ·ñµÈÓÚ¿Õ¡£Èç¹û±äÁ¿targetµÄÖµ²»µÈÓÚ¿Õ£¬²¢ÇÒËüµÄÖµÊÇ<product>-<variant>µÄÐÎʽ£¬ÄÇô¾ÍÖ±½ÓÒÔËüΪ²ÎÊý£¬µ÷ÓÃlunchº¯Êý¡£·ñÔòµÄ»°£¬¾ÍÒÔcm_$target-userdebugΪ²ÎÊý£¬µ÷ÓÃlunchº¯Êý¡£
ÔÚÕâÒ»²½ÖУ¬ÎÒÃǵ÷ÓÃbreakfastº¯Êýʱ£¬´«½øÀ´µÄ²ÎÊýΪfind5£¬²»ÊÇ<product>-<variant>µÄÐÎʽ£¬Òò´Ë£¬º¯Êýbreakfast×îºó»áÒÔcm_find5-userdebugΪ²ÎÊý£¬µ÷ÓÃlunchº¯Êý¡£
º¯ÊýlunchµÄʵÏÖÎÒÃÇÔÚÇ°ÃæÒ»ÆªÎÄÕÂAndroid±àÒëϵͳ»·¾³³õʼ»¯¹ý³Ì·ÖÎöÒѾ·ÖÎö¹ýÁË£¬²»¹ýµ±Ê±·ÖÎöµÄÊÇAOSP¹Ù·½°æ±¾µÄʵÏÖ£¬CM¶ÔÆä½øÐÐÁËһЩÐ޸ģ¬Ôö¼ÓÁËһЩCM×ÔÓеÄÂß¼£¬ÏÂÃæÎÒÃǾͿ´¿´ÕâЩÐ޸ģº
function lunch() { ...... local product=$(echo -n $selection | sed -e "s/-.*$//") check_product $product if [ $? -ne 0 ] then # if we can't find a product, try to grab it off the CM github T=$(gettop) pushd $T > /dev/null build/tools/roomservice.py $product popd > /dev/null check_product $product else build/tools/roomservice.py $product true fi ...... } |
ÕâÀïµÄ±äÁ¿selectionµÄÖµ¾ÍµÈÓÚÎÒÃÇ´«½øÀ´µÄ²ÎÊý"cm_find5-userdebug"£¬Í¨¹ýsedÃüÁ"cm_find5"ÌáÈ¡³öÀ´£¬²¢ÇÒ¸³Öµ¸ø±äÁ¿product¡£½ÓÏÂÀ´µ÷ÓÃcheck_productº¯ÊýÀ´¼ì²éµ±Ç°µÄCMÔ´ÂëÖÐÊÇ·ñÖ§³Öfind5Õâ¸öÉ豸¡£
Èç¹û²»Ö§³ÖµÄ»°£¬ÄÇôËüµÄ·µ»ØÖµ¾Í²»µÈÓÚ0£¬¼´#?²»µÈÓÚ0£¬ÄÇô½ÓÏÂÀ´¾Í»áͨ¹ýbuild/tools/roomservice.pyµ½CMÔ´Âë·þÎñÆ÷È¥¼ì²éÊÇ·ñÖ§³Öfind5Õâ¸öÉ豸¡£Èç¹ûCMÔ´Âë·þÎñÆ÷Ö§³Öfind5Õâ¸öÉ豸µÄ»°£¬ÄÇôbuild/tools/roomservice.py¾Í»á½«Óëfind5Ïà¹ØµÄÔ´ÂëÏÂÔØ»ØÀ´¡£ÕâʱºòÎÒÃǾͻᷢÏÖ±¾µØCMÔ´ÂëĿ¼ÖжàÁËÒ»¸ödevice/oppo/find5Ŀ¼¡£ÀïÃæ´æ·ÅµÄ¶¼ÊDZàÒëfind5µÄROMʱËùÒªÓõÄÎļþ¡£
ÁíÒ»·½Ã棬Èç¹ûµ±Ç°µÄCMÔ´ÂëÖÐÒѾ֧³Öfind5Õâ¸öÉ豸£¬ÄÇôº¯ÊýlunchÒ²»áµ÷ÓÃbuild/tools/roomservice.pyÈ¥CMÔ´Âë·þÎñÆ÷¼ì²éµ±Ç°CMÔ´ÂëĿ¼ÖÐfind5É豸ÒÀÀµµÄÆäËüÔ´ÂëÊÇ·ñÓиüУ¬»òÕßÊÇ·ñÓÐеÄÒÀÀµ¡£Èç¹ûÓеϰ£¬¾Í½«ÕâЩÒÀÀµ¸üÐÂÏÂÔØ»ØÀ´¡£
½Å±¾build/tools/roomservice.pyµÄÏêϸÄÚÈÝÕâÀï¾Í²»·ÖÎöÁË£¬ÏÂÃæÖ÷ÒªÊǽâÊÍÒ»ÏÂÓëAndroidµÄÔ´Âë²Ö¿â¹ÜÀí¹¤¾ßRepoÏà¹ØµÄÂß¼¡£¹ØÓÚAndroidµÄÔ´Âë²Ö¿â¹ÜÀí¹¤¾ßRepoµÄÏêϸ·ÖÎö£¬¿ÉÒԲο¼AndroidÔ´´úÂë²Ö¿â¼°Æä¹ÜÀí¹¤¾ßRepo·ÖÎöÒ»ÎÄ¡£
CMÔ´Âë·þÎñÆ÷·ÅÔÚgithubÉÏ£¬µØÖ·Îªhttp://github.com/CyanogenMod£¬ÉÏÃæ±£´æµÄÊÇCMÐ޸ĹýµÄAOSP¹¤³Ì¡¢CMÖ§³ÖµÄÉ豸Ïà¹ØÔ´Â빤³Ì£¨ÏÂÔØ»ØÀ´·ÅÔÚdevice/<manufacturer>/<device>Ŀ¼ÖУ©£¬ÒÔ¼°CMÖ§³ÖµÄÉ豸¶ÔÓ¦µÄÄÚºËÔ´Â빤³Ì£¨ÏÂÔØ»ØÀ´·ÅÔÚkernel/<manufacturer>/<device>Ŀ¼ÖУ©¡£
½Å±¾build/tools/roomservice.py»á¸ù¾Ý´«½øÀ´µÄµÚÒ»¸ö²ÎÊý£¬µ½CMÔ´Âë·þÎñÉϼì²éÊÇ·ñ´æÔÚÏàÓ¦µÄ¹¤³Ì¡£ÔÚÎÒÃÇÕâ¸ö³¡¾°ÖУ¬´«¸øbuild/tools/roomservice.pyµÄµÚÒ»¸ö²ÎÊýΪcm_find5¡£ÕâʱºòÇ°ÃæµÄcm_»á±»È¥µô£¬È»ºóµ½CMÔ´Âë·þÎñÉϼì²éÊÇ·ñ´æÔÚÒ»¸öandroid_device_<manufacturer>_find5µÄ¹¤³Ì¡£Èç¹û´æÔڵϰ£¬ÄÇô¾Í»á½«ËüÏÂÔØ»ØÀ´£¬±£´æÔÚdevice/<manufacturer>/find5Ŀ¼ÖС£ÕâÀïµÄ<manufacturer>¶ÔÓ¦µÄ¾ÍÊÇoppoÁË¡£
ÏÂÔØ»ØÀ´µÄÉ豸Ïà¹ØÔ´Âëʵ¼ÊÉÏÊÇ×÷ΪÊÇÒ»¸öGit²Ö¿âÀ´¹ÜÀíµÄ£¬Òò´Ë£¬½Å±¾build/tools/roomservice.py»¹ÐèÒª½«¸ÃGit²Ö¿âÄÉÈëµ½Repo²Ö¿âÈ¥¹ÜÀí£¬ÒÔ±ãÒÔºóÖ´ÐÐrepo
syncÃüÁîʱ£¬¿ÉÒÔͬʱ¶ÔÕâЩÉ豸Ïà¹ØµÄÔ´Âë½øÐиüС£
´ÓAndroidÔ´´úÂë²Ö¿â¼°Æä¹ÜÀí¹¤¾ßRepo·ÖÎöÒ»ÎÄ¿ÉÒÔÖªµÀ£¬Repo²Ö¿â±£´æÔÚ.repoĿ¼ÖУ¬¶øËüËù¹ÜÀíµÄGit²Ö¿âÓÉ.repo/manifest.xmlÎļþÃèÊö¡£Îļþ.repo/manifest.xmlʵ¼ÊÉÏÖ»ÊÇÒ»¸ö·ûºÅÁ´½Ó£¬ËüÁ´½ÓÖÁ.repo/manifests/default.xmlÎļþ¡£Ä¿Â¼.repo/manifestsʵ¼ÊÉÏÒ²ÊÇÒ»¸öGit²Ö¿â£¬ÓÃÀ´ÃèÊöµ±Ç°µÄCMÔ´ÂëĿ¼¶¼ÊÇÓÉÄÄЩ¹¤³Ì¹¹³ÉµÄ£¬²¢ÇÒÕâЩ¹¤³ÌÊÇÀ´×ÔÓÚÄÄЩGitÔ¶³Ì²Ö¿âµÄ¡£
Èç¹û°´ÕÕ±ê×¼µÄRepo²Ö¿â¹ÜÀí·½·¨£¬´ÓCMÔ´Âë·þÎñÆ÷ÉÏÏÂÔØ»ØÀ´É豸Ïà¹ØÔ´ÂëÖ®ºó£¬Ó¦¸ÃÍù.repo/manifests/default.xmlÎļþÔö¼ÓÏàÓ¦µÄÃèÊö£¬ÒÔºórepo¹¤¾ß¿ÉÒÔ¶ÔÕâЩÉ豸Ïà¹ØµÄÔ´Âë½øÐйÜÀí¡£µ«ÊÇ£¬ÓÉÓÚRepo²Ö¿âÊÇÓɹٷ½Î¬»¤µÄ£¬µ±ÎÒÃÇÔÚ±¾µØÍù.repo/manifests/default.xmlÔö¼ÓÁËеÄÄÚÈÝÖ®ºó£¬Ï´ÎÖ´ÐÐrepo
syncÃüÁîʱ£¬.repo/manifests/default.xmlµÄÄÚÈÝÓֻᱻ»Ö¸´ÖÁÐÞ¸ÄǰµÄÑù×Ó£¬Òò´Ë£¬ÐÞ¸Ä.repo/manifests/default.xmlÎļþÊDz»Êʺϵġ£CM²ÉÓÃÁíÍâÒ»¸ö°ì·¨£¬ÄǾÍÊÇÔÚ.repoĿ¼ÏÂÁíÍâ´´½¨Ò»¸ölocal_manifestsĿ¼£¬ÔÚÀïÃæ¿ÉÒÔËæÒâÔö¼ÓÈÎÒâÃüÃûµÄxmlÎļþ£¬Ö»ÒªÕâЩxmlÎļþµÄ¹æ·¶Óë.repo/manifests/default.xmlÎļþµÄ¹æ·¶Ò»Ö¼´¿É¡£Ö´ÐÐrepo
syncÃüÁîʱ£¬Ëü¾Í»áͬʱ´Ó.repo/manifests/default.xmlºÍ.repo/local_manifestsĿ¼ÏµÄxmlÎļþÖжÁÈ¡µ±Ç°¶¼ÓÐÄÄЩԴÂ빤³ÌÐèÒª¸üС£
ʵ¼ÊÉÏ£¬ÔÚ.repo/local_manifestsĿ¼ÏµÄxmlÎļþ£¬³ýÁË¿ÉÒÔÃèÊöÐÂÔöµÄ¹¤³ÌÖ®Í⣬»¹¿ÉÒÔÃèÊöҪɾ³ýµÄ¹¤³Ì¡£ÀýÈ磬Èç¹ûÎÒÃDz»Ï뽫ijһ¸öϵͳ¹¦ÄÜ»òÕßϵͳAPP±àÒëµ½ÎÒÃÇ×Ô¼ºÖÆ×÷µÄROMÈ¥£¬ÄÇô¾Í¿ÉÒÔÔÚ.repo/local_manifestsĿ¼ÏÂÔö¼ÓÒ»¸öxmlÎļþ£¬ÀïÃæÃèÊöÎÒÃÇÐèҪɾ³ý¶ÔÓ¦µÄ¹¤³Ì¡£ÕâÑù£¬µ±ÎÒÃÇ´Ó·þÎñÆ÷ÏÂÔØ»ØÀ´ÏàÓ¦µÄ¹¤³ÌÖ®ºó£¬ËüÃǾͻáÔÚ±¾µØÖб»É¾³ý¡£ÕâÑù¾Í×öµ½Á˺ܺõ͍֯»¯±àÒ룬¶øÇÒÓÖ²»»áÓë¹Ù·½µÄÔ´Âë½á¹¹²úÉú³åÍ»¡£¹ØÓÚCMµÄLocal
Manifests»úÖÆ£¬¿ÉÒԲο¼¹Ù·½Îĵµ£ºhttp://wiki.cyanogenmod.org/w/Doc:_Using_manifests¡£
½Å±¾build/tools/roomservice.py½«ÏÂÔØ»ØÀ´µÄÉ豸Ïà¹ØÔ´ÂëÄÉÈëµ½Repo²Ö¿â¹ÜÀíµÄ°ì·¨¾ÍÊÇÔÚ.repo/local_manifestsĿ¼Ï´´½¨Ò»¸öroomservice.xmlÎļþ¡£ÀýÈ磬µ±ÎÒÃÇ´ÓCMÔ´Âë·þÎñÆ÷ÏÂÔØ»ØÀ´find5Ïà¹ØµÄÉ豸ԴÂëÖ®ºó£¬¾Í¿ÉÒÔ¿´µ½ÔÚroomservice.xmlÎļþÖп´µ½ÏàÓ¦µÄÒ»ÐÐÄÚÈÝ£º
<?xml version="1.0" encoding="UTF-8"?> <manifest> ...... <project name="CyanogenMod/android_device_oppo_find5" path="device/oppo/find5" remote="github" /> ...... </manifest> |
Õâ±íÃ÷±¾µØµÄdevice/oppo/find5Ŀ¼ÊÇÀ´×ÔÓÚÔ¶³Ì²Ö¿âgithubµÄ£¬²¢ÇÒÏà¶Ô·¾¶ÎªCyanogenMod/android_device_oppo_find5¡£
ºÃÁË£¬ÏÖÔÚÎÒÃÇÖÕÓÚ½«OPPO Find 5Ïà¹ØµÄÉ豸ԴÂëÏÂÔØ»ØÀ´ÁË£¬µ«ÊÇÔÚ±àÒë֮ǰ¡£ÐèÒª´ÓOPPO Find
5ÉÏÌáȡһЩÉ豸Ïà¹ØµÄ˽ÓÐÎļþ¡£
7. ±£³ÖOPPO Find 5¿ª»ú״̬£¬²¢ÇÒͨ¹ýUSBÁ¬½Óµ½Ubuntu
13.04ÉÏ£¬½øÐе½$CMSOURCE/device/oppo/find5Ŀ¼ÖÐ,Ö´ÐÐÒÔÏÂÃüÁîÌáÈ¡É豸˽ÓÐÎļþ¡£
½Å±¾extract-files.shµÄÄÚÈÝÈçÏÂËùʾ£º
#!/bin/sh VENDOR=oppo DEVICE=find5 BASE=../../../vendor/$VENDOR/$DEVICE/proprietary rm -rf $BASE/* for FILE in `cat proprietary-blobs.txt | grep -v ^# | grep -v ^$ | sed -e 's#^/system/##g'`; do DIR=`dirname $FILE` if [ ! -d $BASE/$DIR ]; then mkdir -p $BASE/$DIR fi adb pull /system/$FILE $BASE/$FILE done ./setup-makefiles.sh |
Ê×ÏÈÊÇ´´½¨Ò»¸övendor/oppo/find5/proprietaryĿ¼£¬½Ó×ÅÊǶÁÈ¡Îļþproprietary-blobs.txtÖеÄÿһÐУ¬²¢ÇÒ½«Ã¿Ò»ÐÐËùÃèÊöµÄÎļþ´ÓÉ豸ÉϵÄ/systemĿ¼ÖлñÈ¡³öÀ´£¬±£´æÔÚvendor/oppo/find5/proprietary¶ÔÓ¦µÄ×ÓĿ¼ÏÂÃæ£¬×îºóÔÙÖ´ÐÐÁíÍâÒ»¸ö½Å±¾setup-makefiles.sh¡£
Îļþdevice/oppo/find5/proprietary-blobs.txt²¿·ÖµÄÄÚÈÝÈçÏÂËùʾ£º
/bin/btnvtool /bin/ds_fmc_appd /bin/efsks /bin/hci_qcomm_init /bin/ks /bin/mm-qcamera-daemon /bin/mpdecision /bin/netmgrd /bin/nv_tee /bin/qcks /bin/qmuxd ...... |
ÕâÀïÁгöµÄÎļþ·¾¶¶¼ÊÇÏà¶ÔÓÚÉ豸ÉϵÄ/systemĿ¼µÄ£¬²¢ÇÒ¶¼ÊÇÉè±¸ÌØ¶¨µÄ¡¢²»¹«¿ªÔ´ÂëµÄ£¬Òò´Ë£¬ÎÒÃÇÐèÒª´ÓÉ豸ÉÏ»ñÈ¡³öÀ´¡£
ÔÙÀ´¿´½Å±¾setup-makefiles.shµÄÄÚÈÝ£º
#!/bin/sh VENDOR=oppo DEVICE=find5 OUTDIR=vendor/$VENDOR/$DEVICE MAKEFILE=../../../$OUTDIR/$DEVICE-vendor-blobs.mk (cat << EOF) > $MAKEFILE # Copyright (C) 2013 The CyanogenMod Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This file is generated by device/$VENDOR/$DEVICE/setup-makefiles.sh PRODUCT_COPY_FILES += \\ EOF LINEEND=" \\" COUNT=`cat proprietary-blobs.txt | grep -v ^# | grep -v ^$ | wc -l | awk {'print $1'}` for FILE in `cat proprietary-blobs.txt | grep -v ^# | grep -v ^$ | sed -e 's#^/system##g' -e 's#^/##g'`; do COUNT=`expr $COUNT - 1` if [ $COUNT = "0" ]; then LINEEND="" fi echo " $OUTDIR/proprietary/$FILE:system/$FILE$LINEEND" >> $MAKEFILE done (cat << EOF) > ../../../$OUTDIR/$DEVICE-vendor.mk # Copyright (C) 2013 The CyanogenMod Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This file is generated by device/$VENDOR/$DEVICE/setup-makefiles.sh # Pick up overlay for features that depend on non-open-source files DEVICE_PACKAGE_OVERLAYS := vendor/$VENDOR/$DEVICE/overlay \$(call inherit-product, vendor/$VENDOR/$DEVICE/$DEVICE-vendor-blobs.mk) EOF (cat << EOF) > ../../../$OUTDIR/BoardConfigVendor.mk # Copyright (C) 2013 The CyanogenMod Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This file is generated by device/$VENDOR/$DEVICE/setup-makefiles.sh USE_CAMERA_STUB := false EOF |
Õâ¸ö½Å±¾Ö÷Òª¾ÍÊÇÓÃÀ´ÔÚvendor/oppo/find5Ŀ¼ÏÂÉú³ÉÁ½¸öÎļþ£ºfind5-vendor-blobs.mkºÍBoardConfigVendor.mkÎļþ¡£ÕâÁ½¸öÎļþ¶¼ÊǽÓÏÂÀ´ÎªOPPO
Find 5±àÒëROMʱҪÓõ½µÄ¡£
Éú³ÉµÄfind5-vendor-blobs.mkµÄ²¿·ÖÄÚÈÝÈçÏÂËùʾ£º
PRODUCT_COPY_FILES += \ vendor/oppo/find5/proprietary/bin/btnvtool:system/bin/btnvtool \ vendor/oppo/find5/proprietary/bin/ds_fmc_appd:system/bin/ds_fmc_appd \ vendor/oppo/find5/proprietary/bin/efsks:system/bin/efsks \ vendor/oppo/find5/proprietary/bin/hci_qcomm_init:system/bin/hci_qcomm_init \ vendor/oppo/find5/proprietary/bin/ks:system/bin/ks \ ...... |
ʵ¼ÊÉϾÍÊÇͨ¹ýPRODUCT_COPY_FILES±äÁ¿¸æËß±àÒëϵͳ£¬Òª½«¸Õ²Å´ÓÉ豸ÉÏ»ñÈ¡»ØÀ´µÄÎļþ´ò°üµ½±àÒë³öÀ´µÄROMµÄsystem·ÖÇøÀïÃæÈ¥¡£
Éú³ÉµÄÎļþBoardConfigVendor.mkÖ»ÓÐ1ÐУ¬ÈçÏÂËùʾ£º
ÔÚ±àÒëÉãÏñÍ·Ïà¹ØµÄ¿âÎļþʱ£¬¾Í»áµ½ÕâÀﶨÒåµÄUSE_CAMERA_STUB±äÁ¿¡£
µ½Ä¿Ç°ÎªÖ¹£¬ÎÒÃǾͷֱð´ÓCMÔ´Âë·þÎñÆ÷ºÍÄ¿±êÉ豸ÉÏ»ñÈ¡µ½Á˱àÒëOPPO
Find 5µÄROMËùÐèÒªµÄÉ豸Ïà¹ØµÄÎļþÁË£¬½ÓÏÂÀ´¾Í¿ÉÒÔ¿ªÊ¼±àÒëCMÔ´ÂëÁË¡£
8. »Øµ½$CMSOUCEĿ¼ÖУ¬ÎªOPPO Find 5±àÒëROM¡£
ÃüÁîbrunchÒ²ÊÇÓÉbuild/envsetup.sh½Å±¾ÌṩµÄ£¬ËüµÄʵÏÖÈçÏÂËùʾ£º
function brunch() { breakfast $* if [ $? -eq 0 ]; then mka bacon else echo "No such item in brunch menu. Try 'breakfast'" return 1 fi return $? } |
º¯Êýbrunch×öÁËÁ½¼þÊÂÇ飺ִÐÐbreakfastÃüÁîºÍÖ´ÐÐmka baconÃüÁî¡£
Ç°ÃæÎÒÃDz»ÊÇÒѾִÐйýbreakfastÃüÁîÁËÂð£¿ÕâÀïΪʲôÓÖÒªÔÙÖ´ÐÐÒ»´ÎÄØ£¿´ÓÇ°ÃæµÄ·ÖÎö¿ÉÒÔÖªµÀ£¬º¯ÊýbreakfastÔÚÖ´ÐеĹý³ÌÖУ¬»áµ÷Óú¯Êýlunch£¬¶øº¯ÊýlunchÓÖ»áµ÷Óú¯Êýcheck_productÀ´¼ì²éÄ¿±êÉ豸ÊÇ·ñ´æÔÚ¡£ÒòΪÔÚǰһ²½ÖУ¬ÎÒÃÇÒѾ½«Ä¿±êÉ豸Ïà¹ØµÄÔ´ÂëÏÂÔØ»ØÀ´ÁË£¬Òò´ËÕâʱºòÄ¿±êÉ豸Êǿ϶¨´æÔڵġ£µ±Ä¿±êÉ豸´æÔÚµÄʱºò£¬º¯Êýlunch»áͨ¹ýbuild/tools/roomservice.py½Å±¾¼ì²éÄ¿±êÉ豸Ïà¹ØµÄÔ´ÂëÊÇ·ñÒÀÀµÓÐÆäËü¹¤³Ì£¬²¢ÇÒÕâЩ¹¤³ÌÊÇ·ñÒѾÏÂÔØ»ØÀ´ÁË¡£Èç¹ûÓÐÒÀÀµµÄ¹¤³Ì£¬²¢ÇÒÕâЩ¹¤³Ì»¹Ã»ÓÐÏÂÔØ»ØÀ´£¬ÄÇô¾ÍÐèÒª½«ËüÃÇÏÂÔØ»ØÀ´¡£
µ±Ä¿±êÉ豸´æÔÚµÄʱºò£¬º¯ÊýlunchÖ´ÐÐbuild/tools/roomservice.py½Å±¾µÄÐÎʽΪ£º
build/tools/roomservice.py $product true |
´«µÝ¸øbuild/tools/roomservice.pyµÚ¶þ¼þ²ÎÊýΪtrue£¬±íʾҪ´¦ÀíµÄÊÇÄ¿±êÉ豸$productÒÀÀµµÄ¹¤³Ì¡£
½Å±¾build/tools/roomservice.pyÊÇÈçºÎÖªµÀÄ¿±êÉ豸ÓÐûÓÐÒÀÀµµÄ¹¤³ÌµÄÄØ£¿ÔÀ´£¬ÔÚÏÂÔØ»ØÀ´µÄÉ豸ԴÂëÖУ¬ÓÐÒ»¸öcm.dependenciesÎļþ£¬ÀïÃæÃèÊöÁË×Ô¼ºËùÒÀÀµµÄ¹¤³Ì¡£ÀýÈ磬device/oppo/find5/cm.dependenciesµÄÄÚÈÝÈçÏÂËùʾ£º
[ { "repository": "android_kernel_oppo_find5", "target_path": "kernel/oppo/find5", "branch": "cm-10.1" } ] |
ÉÏÃæÃèÊöµÄÊÇOPPO Find 5ËùʹÓõÄÄÚºËÔ´Â룬ËüÀ´×ÔÓÚCMÔ´Âë·þÎñÆ÷ÉϵÄandroid_kernel_oppo_find5²Ö¿âµÄcm-10.1·ÖÖ§£¬ÏÂÔØ»ØÀ´ºó±£´æÔÚkernel/oppo/find5Ŀ¼ÖС£ÕâÒâζ×ÅÎÒÃÇͨ¹ýCMÔ´Âë±àÒë³öÀ´µÄROMËùʹÓõÄÄÚºËÒ²ÊÇÓÉÎÒÃÇ×Ô¼º±àÒë³öÀ´µÄ¡£
ΪÁËÒÔºóÖ´ÐÐrepo syncÃüÁîͬ²½±¾µØÔ´Âëʱ£¬Ò²¿ÉÒÔ½«É豸ԴÂëÒÀÀµµÄ¹¤³ÌҲͬʱͬ²½»ØÀ´£¬ÎÒÃÇÐèÒª½«ÕâЩÒÀÀµ¹¤³ÌÒ²ÄÉÈëµ½Repo²Ö¿âÖÐÈ¥£¬Òò´Ë£¬µ±ÔÙ´ÎÖ´ÐйýbreakfastʹÃüÖ®ºó¡£ÎÒÃǾͿÉÒÔÔÚ.repo/local_manifests/roomservice.xmlÎļþÖз¢ÏÖÒÔÏÂÁ½ÐÐÄÚÈÝ£º
<?xml version="1.0" encoding="UTF-8"?> <manifest> ...... <project name="CyanogenMod/android_device_oppo_find5" path="device/oppo/find5" remote="github" /> <project name="CyanogenMod/android_kernel_oppo_find5" path="kernel/oppo/find5" remote="github" revision="cm-10.1" /> ...... </manifest> |
»Øµ½º¯ÊýbrunchÖУ¬Ëü½ÓÏÂÀ´Ö´ÐеÄÃüÁîmkaÒ²ÊÇÓÉbuild/envsetup.sh½Å±¾ÌṩµÄ£¬ÈçÏÂËùʾ£º
function mka() { case `uname -s` in Darwin) make -j `sysctl hw.ncpu|cut -d" " -f2` "$@" ;; *) schedtool -B -n 1 -e ionice -n 1 make -j$(cat /proc/cpuinfo | grep "^processor" | wc -l) "$@" ;; esac } |
Ëüʵ¼ÊÉÏÊÇͨ¹ýÒ»¸ö½Ð×öschedtoolµÄ¹¤¾ßÀ´µ÷ÓÃmake¹¤¾ß¶ÔÔ´Âë½øÐбàÒë¡£ÎÒÃÇÖªµÀ£¬±àÂëAndroidÔ´ÂëÊÇÒ»¸öÂþ³¤µÄ¹ý³Ì£¬¶øÏÖÔڵĻúÆ÷¶¼ÊǶàºËµÄ£¬ÎªÁ˼ӿìÕâ¸ö±àÒë¹ý³Ì£¬ÐèÒª½«»úÆ÷µÄËùÓкËÒÔ¶¼³ä·ÖÀûÓÃÆðÀ´¡£¹¤¾ßschedtoolËù×öµÄÊÂÇé¾ÍÊdzä·ÖµØÀû»úÆ÷µÄ¶àºËÌØÐÔÀ´Ö´ÐÐmakeÃüÁʹµÃÎÒÃÇ¿ÉÒÔ¾¡¿ì½áÊø±àÒë¹ý³Ì¡£
¹ØÓÚAndroidÔ´ÂëµÄ±àÒëÏêϸ¹ý³Ì£¬¿ÉÒԲο¼Android±àÒëϵͳ¼òÒª½éÉܺÍѧϰ¼Æ»®Õâ¸öϵÁеÄÎÄÕ£¬ÕâÀïÖ»½øÐмòÒªµÄ˵Ã÷¡£
´ÓAndroid±àÒëϵͳ¼òÒª½éÉܺÍѧϰ¼Æ»®Õâ¸öϵÁÐÒ»ÎÄ¿ÉÒÔÖªµÀ£¬AndroidµÄ±àÒëϵͳÊÇÓɺܶàµÄmkÎļþ×é³ÉµÄ£¬Ã¿Ò»¸ömkÎļþ¶¼ÊÇÒ»¸öMakefile½Å±¾Æ¬¶Î¡£ÔÚ±àÒ뿪ʼ֮ǰ£¬ÕâЩmkÎļþ»á×éºÏÔÚÒ»Æð£¬ÐγÉÒ»¸öºÜ´óµÄMakefileÎļþ£¬È»ºóÔÙ¸ù¾ÝÕâ¸öºÜ´óµÄMakefileÎļþµÄÖ¸Áî¶ÔÔ´Âë½øÐбàÒë¡£
ÓÉÕâЩmkÎļþ×é³ÉµÄMakefileÎļþÄÚÈÝ¿ÉÒÔ³éÏóΪËĸö²ã´Î£¬Èçͼ2Ëùʾ£º

ͼ2 Android±àÒëϵͳ²ã´Î
×îÏÂÃæÒ»²ãÃèÊöµÄÉ豸CPUµÄÌåϵ¼Ü¹¹£¨Architecture£©£¬AndroidÉ豸֧³Öarm¡¢x86ºÍmipsÈýÖÖCPUÌåϵ¼Ü¹¹¡£ÔÙÍùÉÏÒ»²ãÃèÊöµÄÊÇÉ豸ËùʹÓõÄоƬ£¨Board£©£¬ÀýÈçÓõÄÊǸßͨµÄоƬ£¬»¹ÊÇÈýÐǵÄоƬ£¬µÈµÈ£¬ÓëÕâЩоƬÏà¹ØµÄÔ´Îļþ´æ·ÅÔÚhardwareĿ¼Ï¡£½ÓÏÂÀ´ÔÙÍùÉϵÄÒ»²ãÊÇÉ豸£¨Device£©£¬ÃèÊöµÄÊǾßÌåµÄÓ²¼þÉ豸¡£×îÉÏÃæµÄÒ»²ãÊDzúÆ·£¨Product£©£¬ÃèÊöµÄÊÇÔÚÓ²¼þÉ豸ÉÏÔËÐеÄÈí¼þÄ£¿é¡£
ÔÚÕâÒ»²½ÖУ¬ÎÒÃÇͨ¹ýbrunchÃüÁî±àÒëCMÔ´Âëʱ£¬Ö¸¶¨µÄΨһ²ÎÊýÊÇfind5£¬ÄÇôAndroid±àÒëϵͳÊÇÈçºÎ¸ù¾ÝÕâ¸ö²ÎÊýÀ´ÕÒ°üº¬ÉÏÊöËĸö²ã´ÎµÄmkÎļþΪOPPO
Find 5±àÒë³öÄÜÕý³£ÔËÐеÄROMµÄÄØ£¿
ÔÚÎÒÃÇÖ´ÐÐbreakfast»òÕßbrunchÃüÁîµÄ¹ý³ÌÖУ¬»áµ÷ÓÃÁíÍâÒ»¸öº¯Êýcheck_product¡£¸ù¾ÝAndroid±àÒëϵͳ»·¾³³õʼ»¯¹ý³Ì·ÖÎöÒ»ÎÄ£¬º¯Êýcheck_product»áͨ¹ýÁíÍâÒ»¸öº¯Êýget_build_var¼ÓÔØbuild/core/config.mkÎļþ¡£Îļþbuild/core/config.mkÓÖ»á¼ÌÐø¼ÓÔØÁíÍâÒ»¸öÎļþbuild/core/envsetup.mk¡£×îºó£¬Îļþbuild/core/envsetup.mkÓÖ»á¼ÓÔØÁíÍâÒ»¸öÎļþbuild/core/product_config.mk¡£
ÔÚbuild/core/product_config.mkÎļþµÄ¼ÓÔØ¹ý³ÌÖУ¬ÓÐÒÔϵÄÒ»¶ÎÂß¼£º
ifneq ($(strip $(TARGET_BUILD_APPS)),) # An unbundled app build needs only the core product makefiles. all_product_configs := $(call get-product-makefiles,\ $(SRC_TARGET_DIR)/product/AndroidProducts.mk) else ifneq ($(CM_BUILD),) all_product_configs := $(shell ls device/*/$(CM_BUILD)/cm.mk) else # Read in all of the product definitions specified by the AndroidProducts.mk # files in the tree. all_product_configs := $(get-all-product-makefiles) endif # CM_BUILD endif |
µ±ÎÒÃDZàÒëµÄÊÇÕû¸öAndroidÔ´Âëʱ£¬±äÁ¿TARGET_BUILD_APPSµÄÖµµÈÓÚ¿Õ¡£Õâʱºò¾Í»áÅжÏÊÇ·ñÉèÖÃÁËÒ»¸öÃû³ÆÎªCM_BUILDµÄ»·¾³±äÁ¿¡£Èç¹ûÉèÖÃÁ˵ϰ£¬ÄÇô½ÓÏÂÀ´¾Í»á¼ÓÔØdevice/*/$(CM_BUILD)Ŀ¼ÏµÄcm.mkÎļþÀ´»ñµÃÄ¿±ê²úÆ·ÅäÖÃÎļþ¡£·ñÔò£¬Ê×ÏÈ»áͨ¹ýµ÷ÓÃÁíÍâÒ»¸öº¯Êýget-all-product-makefilesÀ´»ñµÃ/device/*/*Ŀ¼ÏµÄËùÓÐÃû³ÆÎªAndroidProducts.mkµÄÎļþ£¬½Ó×ÅÔÙÔÚÕâЩAndroidProducts.mkÎļþÖж¨ÒåµÄPRODUCT_MAKEFILES±äÁ¿À´»ñµÃÄ¿±ê²úÆ·ÅäÖÃÎļþ¡£
»·¾³±äÁ¿CM_BUILDµÄÖµÊÇÔÚº¯Êýcheck_productÖÐÉèÖõ쬲¢ÇÒÖ»ÓÐÔÚCMÔ´ÂëÖбàÒëʱ²Å»áÉèÖá£ÔÚAOSPÔ´Âë±àÒëʱ£¬ÊDz»»áÉèÖû·¾³±äÁ¿CM_BUILDµÄ¡£CM°æ±¾µÄcheck_productº¯ÊýʵÏÖÈçÏÂËùʾ£º
function check_product() { T=$(gettop) if [ ! "$T" ]; then echo "Couldn't locate the top of the tree. Try setting TOP." >&2 return fi if (echo -n $1 | grep -q -e "^cm_") ; then CM_BUILD=$(echo -n $1 | sed -e 's/^cm_//g') if [ `uname` == "Darwin" ]; then export BUILD_NUMBER=$((date +%s%N ; echo $CM_BUILD; hostname) | openssl sha1 | cut -c1-10) else export BUILD_NUMBER=$((date +%s%N ; echo $CM_BUILD; hostname) | sha1sum | cut -c1-10) fi else CM_BUILD= fi export CM_BUILD CALLED_FROM_SETUP=true BUILD_SYSTEM=build/core \ TARGET_PRODUCT=$1 \ TARGET_BUILD_VARIANT= \ TARGET_BUILD_TYPE= \ TARGET_BUILD_APPS= \ get_build_var TARGET_DEVICE > /dev/null # hide successful answers, but allow the errors to show } |
´ÓÕâÀï¾Í¿ÉÒÔ¿´³ö£¬»·¾³±äÁ¿CM_BUILDµÄֵʵ¼ÊÉϾÍÊÇÄ¿±êÉ豸µÄÃû³Æ¡£ÀýÈç£¬Ç°ÃæÎÒÃÇÖ´ÐÐbreakfastÃüÁîʱ£¬Í¨¹ýº¯Êýlunchµ÷ÓÃcheck_productº¯Êýʱ£¬´«½øÀ´µÄ²ÎÊýΪΪcm_find5£¬º¯Êýcheck_product»á½«find5ÌáÈ¡³öÀ´£¬²¢ÇÒ¸³Öµ¸ø»·¾³±äÁ¿CM_BUILD¡£ÕâÑùÔÚ¼ÓÔØbuild/core/product_config.mkÎļþʱ£¬ÕÒµ½µÄ²úÆ·ÅäÖÃÎļþ¾ÍΪdevice/*/find5/cm.mkÎļþ¡£ÔÚdeviceĿ¼ÖУ¬Ö»ÓÐoppo×ÓĿ¼°üº¬ÓÐfind5Õâ¸öĿ¼£¬Òò´Ë×îÖÕ¼ÓÔØµÄʵ¼ÊÉÏÊÇdevice/oppo/find5/cm.mkÎļþ¡£
ÎÞÂÛÊÇͨ¹ý»·¾³±äÁ¿CM_BUILDÀ´Ö±½Ó»ñµÃµÄÄ¿±ê²úÆ·ÅäÖÃÎļþ£¬»¹ÊÇͨ¹ýAndroidProducts.mkÎļþ¼ä½Ó»ñµÃµÄÄ¿±ê²úÆ·ÅäÖÃÎļþ£¬»ñµÃµÄÄ¿±ê²úÆ·ÅäÖÃÎļþ¶¼»áÖ±½Ó»òÕß¼ä½ÓµØÍ¨¹ý±äÁ¿PRODUCT_COPY_FILESºÍPRODUCT_PACKAGESÀ´É豸Ҫ°üº¬µÄÈí¼þÄ£¿é¡£
ÒÔdevice/oppo/find5/cm.mkΪÀý£¬ËüµÄ²¿·ÖÄÚÈÝÈçÏÂËùʾ£º
...... # Inherit device configuration $(call inherit-product, device/oppo/find5/full_find5.mk) ## Device identifier. This must come after all inclusions PRODUCT_DEVICE := find5 PRODUCT_NAME := cm_find5 PRODUCT_BRAND := Oppo PRODUCT_MODEL := Find 5 PRODUCT_MANUFACTURER := Oppo ...... |
³ý¶¨ÁËһЩÉ豸Ïà¹ØµÄ±äÁ¿Ö®Í⣬Ëü»¹»á¼ÓÔØÁíÍâÒ»¸öÎļþdevice/oppo/find5/full_find5.mk£¬ºóÕߵIJ¿·ÖÄÚÈÝÈçÏÂËùʾ£º
# Inherit from hardware-specific part of the product configuration $(call inherit-product, device/oppo/find5/device.mk) $(call inherit-product-if-exists, vendor/oppo/find5/find5-vendor.mk) |
ÔÚÎļþdevice/oppo/find5/device.mkÖУ¬ÎÒÃǾͿÉÒÔ¿´µ½PRODUCT_COPY_FILESºÍPRODUCT_PACKAGESµÄ¶¨Ò壺
PRODUCT_PACKAGES := \ lights.msm8960 PRODUCT_PACKAGES += \ charger_res_images \ charger # Vold and Storage PRODUCT_COPY_FILES += \ device/oppo/find5/configs/vold.fstab:system/etc/vold.fstab # Live Wallpapers PRODUCT_PACKAGES += \ LiveWallpapers \ LiveWallpapersPicker \ VisualizationWallpapers \ librs_jni ...... |
¶øÎļþvendor/oppo/find5/find5-vendor.mk»á¼ÓÔØÁíÍâÒ»¸öÎļþvendor/oppo/find5/find5-vendor-blobs.mk£¬ÈçÏÂËùʾ£º
...... $(call inherit-product, vendor/oppo/find5/find5-vendor-blobs.mk) ...... |
»ØÒäÇ°ÃæµÄµÚ7²½£¬ÎļþÎļþvendor/oppo/find5/find5-vendor-blobs.mkÊÇÎÒÃÇÖ´ÐÐextract-files.sh½Å±¾µÄʱºòÉú³ÉµÄ£¬ÀïÃæÍ¨¹ý±äÁ¿PRODUCT_COPY_FILES¸æËß±àÒëϵͳ½«´ÓÉ豸ÉÏ»ñµÃµÄ˽ÓÐÎļþ´ò°üµ½ÒªÖÆ×÷µÄROMÈ¥¡£
ÒÔÉϾÍÊÇProduct¼¶±ðµÄÅäÖÃÐÅÏ¢µÄ»ñÈ¡¹ý³Ì£¬½ÓÏÂÀ´ÎÒÃÇÔÙ¿´Device¡¢BoardºÍArchitecture¼¶±ðµÄÅäÖÃÐÅÏ¢µÄ»ñÈ¡¹ý³Ì¡£
º¯Êýcheck_product»áͨ¹ýÁíÍâÒ»¸öº¯Êýget_build_varÀ´¼ÓÔØbuild/core/config.mkÎļþµÄ¹ý³ÌÖУ¬»áÔÚÄ¿±ê²úÆ·¶ÔÓ¦µÄÉ豸Ŀ¼ÖÐÕÒµ½Ò»¸öÃû³ÆÎªBoardConfig.mkÎļþ£¬ÈçÏÂËùʾ£º
...... board_config_mk := \ $(strip $(wildcard \ $(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)/BoardConfig.mk \ device/*/$(TARGET_DEVICE)/BoardConfig.mk \ vendor/*/$(TARGET_DEVICE)/BoardConfig.mk \ )) ...... |
ÉÏÊöMakefile½Å±¾Æ¬¶Î»áÔÚbuild/target/board¡¢device/*¡¢vendor/*Ŀ¼ÖÐѰÕÒÒ»¸öÃû³ÆÎª$(TARGET_DEVICE)µÄ×ÓĿ¼£¬²¢ÇÒÔÚÕÒµ½µÄ×ÓĿ¼ÀïÃæ¼ÓÔØÒ»¸öÃû³ÆÎªBoardConfig.mkÎļþ£¬À´»ñµÃDevice¡¢BoardºÍArchitecture¼¶±ðµÄÅäÖÃÐÅÏ¢¡£
±äÁ¿TARGET_DEVICEÖ¸ÏòµÄ±ãÊÇÄ¿±êÉ豸µÄÃû³Æ¡£ÔÚÎÒÃÇÕâ¸ö³¡¾°ÖУ¬ËüµÄÖµ¾ÍµÈÓÚfind5£¬Òò´Ë£¬×îÖÕ»ñµÃµÄDevice¡¢BoardºÍArchitecture¼¶±ðµÄÅäÖÃÐÅÏ¢¾ÍÊÇÀ´×ÔÓÚdevice/oppo/find5/BoardConfig.mkÎļþ£¬ËüµÄ²¿·ÖÄÚÈÝÈçÏÂËùʾ£º
TARGET_CPU_ABI := armeabi-v7a TARGET_CPU_ABI2 := armeabi ...... TARGET_ARCH := arm ...... # Bluetooth BOARD_HAVE_BLUETOOTH := true BOARD_HAVE_BLUETOOTH_QCOM := true BLUETOOTH_HCI_USE_MCT := true ...... TARGET_BOARD_PLATFORM := msm8960 ...... # Wifi BOARD_HAS_QCOM_WLAN := true BOARD_WLAN_DEVICE := qcwcn ...... # Display TARGET_QCOM_DISPLAY_VARIANT := caf USE_OPENGL_RENDERER := true ...... # GPS BOARD_HAVE_NEW_QC_GPS := true ...... # Camera COMMON_GLOBAL_CFLAGS +=
-DDISABLE_HW_ID_MATCH_CHECK -DQCOM_BSP_CAMERA_ABI_HACK -DNEW_ION_API ...... # Audio BOARD_USES_ALSA_AUDIO:= true TARGET_QCOM_AUDIO_VARIANT := caf TARGET_USES_QCOM_MM_AUDIO := true TARGET_USES_QCOM_COMPRESSED_AUDIO := true BOARD_AUDIO_CAF_LEGACY_INPUT_BUFFERSIZE := true ...... |
´ÓÕâÀï¾Í¿ÉÒÔ¿´µ½¸÷ÖÖDevice¡¢BoardºÍArchitecture¼¶±ðµÄÅäÖÃÐÅÏ¢¡£ÀýÈ磬CPUÌåϵ¼Ü¹¹ÓÉTARGET_ARCH¡¢TARGET_CPU_ABIºÍTARGET_CPU_ABI2À´ÃèÊö¡£Ð¾Æ¬ÀàÐÍÓÉTARGET_BOARD_PLATFORMÀ´ÃèÊö£¬¶øÉ豸ÐÅÏ¢µÄÃèÊöÔò°üÀ¨Bluetooth¡¢Wifi¡¢Display¡¢GPS¡¢CameraºÍAudioµÈ¡£
ÔÚBoardConfig.mkÎļþÖÐÅäÖõıàÒëÐÅÏ¢ÊÇÔÚʲôʱºòÓõ½µÄÄØ£¿ÒÔÏÂÎÒÃǾÍÒÔTARGET_BOARD_PLATFORMΪÀý£¬ËµÃ÷ÕâЩÅäÖÃÐÅÏ¢ÔÚ±àÒëµÄ¹ý³ÌÖÐÊÇÈçºÎʹÓõġ£ÔÚAndroidÔ´ÂëÖУ¬hardwareĿ¼°üº¬¸÷ÖÖоƬÏà¹ØµÄÄ£¿éÔ´Âë¡£ÔÚÕâЩģ¿éµÄ±àÒë½Å±¾ÖУ¬¾Í»á¸ù¾ÝTARGET_BOARD_PLATFORMµÄÖµÀ´ÎªÖ¸¶¨µÄоƬ±àÒë³öÕýÈ·µÄÄ£¿éÀ´¡£
ÀýÈ磬¼ÙÉèÎÒÃÇʹÓõÄÊǸßͨоƬ£¬ÔÚËüµÄCamera HAL2Ä£¿éÔ´ÂëĿ¼hardware/qcom/camera/QCamera/HAL2/coreÖж¨ÒåµÄAndroid.mkÎļþÓÐÈçϵÄÄÚÈÝ£º
...... LOCAL_CFLAGS += -DCAMERA_ION_HEAP_ID=ION_CP_MM_HEAP_ID # 8660=SMI, Rest=EBI LOCAL_CFLAGS += -DCAMERA_ZSL_ION_HEAP_ID=ION_CP_MM_HEAP_ID LOCAL_CFLAGS+= -DHW_ENCODE LOCAL_CFLAGS+= -DUSE_NEON_CONVERSION ifeq ($(TARGET_BOARD_PLATFORM),msm8960) LOCAL_CFLAGS += -DCAMERA_GRALLOC_HEAP_ID=GRALLOC_USAGE_PRIVATE_MM_HEAP LOCAL_CFLAGS += -DCAMERA_GRALLOC_FALLBACK_HEAP_ID=
GRALLOC_USAGE_PRIVATE_IOMMU_HEAP LOCAL_CFLAGS += -DCAMERA_ION_FALLBACK_HEAP_ID=ION_IOMMU_HEAP_ID LOCAL_CFLAGS += -DCAMERA_ZSL_ION_FALLBACK_HEAP_ID=
ION_IOMMU_HEAP_ID LOCAL_CFLAGS += -DCAMERA_GRALLOC_CACHING_ID=0 else ifeq ($(TARGET_BOARD_PLATFORM),msm8660) LOCAL_CFLAGS += -DCAMERA_GRALLOC_HEAP_ID=
GRALLOC_USAGE_PRIVATE_CAMERA_HEAP LOCAL_CFLAGS += -DCAMERA_GRALLOC_FALLBACK_HEAP_ID=
GRALLOC_USAGE_PRIVATE_CAMERA_HEAP # Don't Care LOCAL_CFLAGS += -DCAMERA_ION_FALLBACK_HEAP_ID=ION_CAMERA_HEAP_ID # EBI LOCAL_CFLAGS += -DCAMERA_ZSL_ION_FALLBACK_HEAP_ID=
ION_CAMERA_HEAP_ID LOCAL_CFLAGS += -DCAMERA_GRALLOC_CACHING_ID=0 else LOCAL_CFLAGS += -DCAMERA_GRALLOC_HEAP_ID=
GRALLOC_USAGE_PRIVATE_ADSP_HEAP LOCAL_CFLAGS += -DCAMERA_GRALLOC_FALLBACK_HEAP_ID=
GRALLOC_USAGE_PRIVATE_ADSP_HEAP # Don't Care LOCAL_CFLAGS += -DCAMERA_GRALLOC_CACHING_ID=
GRALLOC_USAGE_PRIVATE_UNCACHED #uncached endif ...... |
ÉÏÊöMakefile½Å±¾Æ¬¶Î»á¸ù¾ÝTARGET_BOARD_PLATFORMµÄÖµ²»Í¬¶øÉèÖò»Í¬µÄLOCAL_CFLAGSÖµ£¬ÒÔ±ã¿ÉÒÔΪĿ±êÉ豸±àÒë³öÕýÈ·µÄHALÄ£¿éÀ´¡£
ÕâÒ»²½Ö´ÐÐÍê³ÉÖ®ºó£¬Ò²¾ÍÊDZàÒëÍê³ÉÖ®ºó£¬ÎÒÃǾͿÉÒÔÔÚout/target/product/find5Ŀ¼Öп´µ½Á½¸öÎļþ£ºrecovery.imgºÍcm-10.1-xxxxxxxx-UNOFFICIAL-find5.zip¡£ÆäÖУ¬recovery.imgÊÇRecoveryÎļþ£¬¶øcm-10.1-xxxxxxxx-UNOFFICIAL-find5.zipÊÇROMÎļþ¡£ÓÐÁËÕâÁ½¸öÎļþÖ®ºó£¬ÎÒÃǾͿÉÒÔ²ÎÕÕÇ°ÃæµÄ½éÉÜ£¬½«ËüÃÇË¢ÈëÎÒÃǵÄOPPO
Find 5ÊÖ»úÉÏÈ¥ÁË¡£µ±Ë¢ÈëÍê³É£¬²¢ÇÒ¿ÉÒÔÕý³£ÔËÐÐÖ®ºó£¬ÏÖÔÚÎÒÃǵÄÊÖ»úÉÏÃæÔËÐеÄRecoveryºÍROM¶¼ÊÇÎÒÃÇ×Ô¼ºÇ×ÊÖ´òÔìµÄÁË£¡
ÖÁ´Ë£¬ÎÒÃǾͽéÉÜÍê³ÉCMµÄË¢»ú¹ý³ÌºÍÔÀíÁË£¬ÊDz»ÊǾõµÃ×Ô¼ºÇ×ÊÖÈ¥±àÒëÒ»¸öROMÊÇÒ»¼þºÜÈÝÒ×µÄÊÂÄØ£¿Æäʵ²»È»¡£ÎÒÃÇÉÏÃæ±àÒëµÄROMÖ®ËùÒÔÕâôÇáËÉ£¬ÊÇÒòΪCMÒѾΪÎÒÃÇ×öÁ˺ܶàµÄ¹¤×÷£¬ÄǾÍÊÇÒѾÔÚCMÔ´Âë·þÎñÆ÷ÉÏ×¼±¸ºÃÁËËùÓÐÉ豸Ïà¹ØµÄÔ´Â룬Ҳ¾ÍÊÇÎÒÃÇÏÂÔØ»ØÀ´Ö®ºó´æ·ÅÔÚdeviceĿ¼ÏµÄÔ´Âë¡£Èç¹ûÎÒÃÇÊÖÍ·ÉÏÓÐÒ»²¿CM¹Ù·½²»Ö§³ÖµÄÊÖ»ú£¬ÄÇôCMÔ´Âë·þÎñÆ÷ÉÏÊÇûÓжÔÓ¦µÄÉ豸ԴÂë´æÔڵģ¬ÕâʱºòÎÒÃǾÍÐèÒª×Ô¼ºÈ¥¿ª·¢¶ÔÓ¦µÄÉ豸ԴÂëÁË¡£ÕâÊÇÒ»¸ö¼è¿àµÄ¹ý³Ì£¬ÐèÒª²»Í£µÄµ÷ÊÔ¡¢µ÷ÊÔ¡¢ÔÙµ÷ÊÔ£¬Ò²ÐíÒª»¨Éϼ¸ÖÜ£¬ÉõÖÁÒ»¸öÔÂÀ´Íê³ÉÕâ¸ö¹¤×÷¡£µ±È»£¬Õâ¸ö¹ý³ÌÒ²ÊÇÓÐһЩ¾ÑéºÍ¼¼ÇÉ¿ÉÒԲο¼µÄ£¬¾ßÌå¿ÉÒԲο¼CMÎĵµ£ºhttp://wiki.cyanogenmod.org/w/Doc:_porting_intro¡£ÕâÀï¾Í²»ÔÙÏêÊö¡£
×îºó£¬±¾ÎÄÖ®ËùÒÔÑ¡ÔñCMÕâ¸öµÚÈý·½ROMºÍÔ´ÂëÀ´½²½â£¬ÊÇÒòΪCM¹Ù·½ÌṩÁ˺ÜÈ«ÃæµÄ×ÊÁϹ©ÎÒÃÇȥѧϰÈçºÎ»ùÓÚAOSPÔ´ÂëÀ´ÖÆ×÷ROM£¬ÕâÑù¿ÉÒÔʹÎÒÃÇÉÙ×ߺܶàÍä·£¡ÁíÍ⣬ÉÏÃæËùÊöµÄROM¹ý³Ì¶¼ÊDzο¼ÁËCM¹Ù·½ÎĵµµÄ¡£¸ü¶àµÄCMË¢ROM½Ì³Ì£¬¿ÉÒԲο¼£ºhttp://wiki.cyanogenmod.org/w/Development¡£¸ü¶àÐÅÏ¢Ò²¿ÉÒÔ¹Ø×¢ÀÏÂÞµÄÐÂÀË΢²©£ºhttp://weibo.com/shengyangluo¡£
|