Android 产åä¸ï¼å
æ ¸æ ¼å¼æ¯Linuxæ åçzImageï¼æ ¹æ件系ç»éç¨ramdiskæ ¼å¼ãè¿ä¸¤è
å¨Androidä¸æ¯ç´æ¥å并å¨ä¸èµ·åå为boot.img,ä¼æ¾å¨ä¸ä¸ªç¬ç«ååºå½ä¸ãè¿ä¸ªååºæ ¼å¼æ¯Androidèªè¡å¶å®çæ ¼å¼ã
Androidå¼åæ¶ï¼ææ åçåæ³æ¯éæ°ç¼è¯äºå
æ ¸åæ ¹æ件系ç»ï¼ç¶åè°ç¨Androidç»çå½ä»¤è¡æ件mkbootimg(out/host/linux-x86/bin/)æ¥æå
ã
å¨å¶ä½ææºROMæ¶ï¼ææ¶ä¼åç¬ç¼è¯å
æ ¸ææ½åºæ ¹æ件è¿è¡ä¿®æ¹å
容ï¼æ¯å¦æåªç¼è¯å
æ ¸ï¼å
¶ä½çå°æ¹ä¸åãè¿æ ·éæ°å®è£
巨大çAndroidå¼åç¯å¢å®å¨ä¸åç®ãå æ¤å¾å¤boot.img解å
å·¥å
·è¢«äººå¼ååºæ¥ï¼è¿ä¸äºå·¥å
·é½æ¯æå
æ ¸åæ ¹æ件系ç»ä»ä¸ä¸ªç°æçboot.imgæ½ååºæ¥ï¼ä¿®ååå次æå
è¿åã
ä¸.常è§ç解å
å·¥å
·
å 为boot.imgçæ ¼å¼æ¯è¾ç®åï¼å®ä¸»è¦å为ä¸å¤§åï¼æçå¯è½æååï¼
å æ¤å¾å¤äººå¼ååæå·¥å
·ï¼ææ¯linux shellèæ¬ï¼æ¯å¦repack-zImageï¼ä¹æ人éç¨perl,è¿æCè¯è¨ç¼åç unbootimgï¼
æ使ç¨çæ¯å¨æºç ä½ç½®system/core/mkbootimg/ ä¸ç mkbootimgã为äºç®åï¼èç¹å·¥åæä¸mkbootimgä¸æå
å·¥å
·å解å
å·¥å
·ä»¥åæå
å«çlibmincrptyåºæ½åºæ¥ï¼å¹¶ä¸éåä¸ä¸ªMakefile,ä½ä¸ºå¼æºé¡¹ç®ã
使ç¨è
åªéè¦å¨linuxï¼éå®è£
gcc,make,ä¸è¬æ¯æ é
ï¼æwindowsï¼éè¦å®è£
mingwï¼çå½ä»¤è¡æ§è¡make,å³å¯äº§çå¯æ§è¡æ件mkbootimg ï¼unpackbootimgã
äº.解/æå
å·¥å
·ä½¿ç¨
解å
å·¥å
·ï¼unpackbootimg
常è§æ ¼å¼
unpackbootimg -i .\tmp\boot.img -o .\out
è¿ä¸å¥å½ä»¤è¡è¡¨ç¤ºæboot.img解å
ï¼æææ件è¾åºå°outç®å½ä¸
å®ä¼è§£ååºå¦ä¸æ件ï¼
boot.img-zImage (å
æ ¸æ件ï¼
boot.img-ramdisk.gz (æ ¹æ件系ç»æå
æ件ï¼
boot.img-cmdline (mkbootimg cmdlineåæ°)
boot.img-pagesize (mkbootimg pagesizeåæ°)
boot.img-base (mkbootimg baseåæ°)
æå
å·¥å
·ï¼mkbootimg ï¼Androidèªå¸¦ï¼
常è§çå½ä»¤æ ¼å¼ï¼
./mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel zImage --ramdisk boot/boot.img-ramdisk.gz -o boot.img --base 02e00000
è¿å¥å«ä¹æ¯æå
æ ¸æ件zImageåbootç®å½ä¸çæ ¹æ件å缩å
boot.img-ramdisk.gzæå
æboot.img.
å
¶ä¸cmdlineåbaseçå¼åæ¥æºäºunpackbootimgçç»æ
追é®æ¹èµ·æ¥å¥½éº»ç¦ãããç®äºï¼å头å说å§ï¼ä½æ¯å¸®æççè¿ä¸ªãJava éé¢AudioRecord.read(int audioData, int offset, int size) ä¸é´é£ä¸ªoffsetå°åºæ¯ä»ä¹ææï¼æè§æä¸å°ç¹