久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Android源碼編譯后

 wanwanstudy 2012-03-07
在out/target/product/generic下生成的三個鏡像文件:ramdisk.img,,system.img,,userdata.img以及它們對應(yīng)的目錄樹root,system,,data,。ramdisk.img是根文件系統(tǒng),system.img包括了主要的包,、庫等文件,,userdata.img包括了一些用戶數(shù)據(jù),android加載這3個映像文件后,,會把 system和 userdata分別加載到 ramdisk文件系統(tǒng)中的system和 data目錄下,。

  三個鏡像文件及其三個目錄樹之間的生成關(guān)系是我們進行ROM制作的基礎(chǔ),,下面將做詳細(xì)介紹,。 Ramdisk鏡像是采用cpio打包,gzip壓縮的,。用file驗證:

  # file ramdisk.img

  輸出:

  # ramdisk.img: gzip compressed data, from Unix

  為了便于說明問題,,我們將ramdisk.img拷貝到其它一個目錄,然后按以下步驟將ramdisk.img還原為目錄樹:

  # mv ramdisk.img ramdisk.img.gz

  # gunzip ramdisk.img.gz

  # mkdir ramdisk

  #cd ramdisk

  # cpio –i –F ../ramdisk.img

  這樣,,就得到一個完整的ramdisk目錄,,與out/target/product/generic/root對比后,我們發(fā)現(xiàn)它們是一樣的內(nèi)容,。

  通過執(zhí)行以下的操作,,我們可由目錄樹再生成ramdisk鏡像

  # cd ramdisk

  # find . | cpio -o -H newc | gzip > ../ramdisk-new.img 這兩個鏡像都屬于yaffs2文件格式,生成方式是一樣的,。我們就以system.img為例來說明,。

  System.img >> system目錄樹 所需工具unyaffs, 下載地址

  # mkdir system

  # cd system

  # unyaffs ../system.img

  system目錄樹 >> system.img

  所需工具 mkyaffs2image,Android源碼編譯后會生成該工具,,在 out/host/linux-x86/bin 目錄下,。

  命令格式:

  # mkyaffs2image system/ system_new.img

  了解以上方法的意義在于,我們可以對鏡像文件鏡像修改,,定制,,以符合自己的需求。 網(wǎng)上有很多制作Android ROM的教程,這里羅列一些鏈接:

  北理工的陳罡寫的兩篇文章,,是我目前發(fā)現(xiàn)的最好的教程,,寫的非常詳細(xì) 這兩篇文章參考了國外論壇的幾個經(jīng)典教程: _Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images 國內(nèi)還有一篇文章寫的也不錯,這篇文章更側(cè)重于制作類似Patch的ROM包 這里基于自己的理解和測試,,總結(jié)了一些方法步驟,。 Android 的ROM包通常稱為update.zip包,你可以到www.hiapk.com上下載現(xiàn)成的.zip包,。要學(xué)習(xí)ROM包的制作,,我們可以從這樣一個zip包開始。解開zip包后,,通常有這樣一些內(nèi)容: boot.img 文件 這是編譯內(nèi)核源代碼生成的內(nèi)核映像,,然后與android源碼編譯出來的ramdisk.img一起通過mkbootimg工具創(chuàng)建出來的,圖省事的朋友也可以從網(wǎng)上其他的刷機包里面拷貝一個能用的出來即可,,基本上都差不多,。 META-INF 目錄 這個目錄是手工創(chuàng)建的,主要用來存放一個升級腳本update-script(這個腳本的內(nèi)容與system目錄中包含的文件有很大關(guān)聯(lián))以及簽名,。 system 目錄 這個目錄就是編譯android的平臺源代碼生成的 要創(chuàng)建自己的ROM,,我們通常會涉及到以下的一些工作:

  1. 編譯內(nèi)核生成內(nèi)核映像。但一般情況下,,我們沒有必要自己去編,,直接從刷機包里面取出一個就可以。譬如,,你要做一個2.2版本的升級包,。可以到網(wǎng)上找一個與自己機型相匹配的刷機包,,從里面取出相應(yīng)的kernel.img,。

  2. ramdisk.img的修改。ramdisk.img 是根文件系統(tǒng),Ugg boots,,里面包含了啟動配置腳本,。

  3. update-script的修改。

  4. System的修改,。

  我們先做個簡單的測試工作,,來為后面更復(fù)雜的工作做好鋪墊。測試內(nèi)容為:先對zip進行解包,,然后分別在ramdisk和system的根目錄下添加一個小文件,,接著,生成新的ROM,,并驗證ROM是否可用。

  詳細(xì)的步驟可以參考 html。這里要指出的是,,這篇文章以及網(wǎng)上許多類似網(wǎng)站提到的方法都是針對HTC G1或 Nexus one的,。而我在測試的時候,用的是HTC G3 Hero,。以上的方法導(dǎo)致的一個后果是,,重新打包后再燒錄,機器無法正常啟動,,adb shell也無法登陸,。后來在國外的一篇博客上看到了對此問題的說明,問題的根源很簡單,,從G3開始,,打包的時候需要指定“--base”參數(shù)。對于Hero,,參數(shù)為”--base 0x19200000”,,但對于其它型號的機器,”--base"要設(shè)定為多少,,需要參考內(nèi)核代碼的實現(xiàn),。

  解包打包可用兩個腳本完成unpack-bootimg.pl, repack-bootimg.pl。其中打包腳本用到的mkbootimg工具,,在out/host/linux-x86/bin目錄下,。unpack-bootimg.pl可直接將boot.img生成內(nèi)核鏡像boot.img-kernel和ramdisk目錄樹boot.img-ramdisk。repack-bootimg.pl可將boot.img-kernel和boot.img-ramdisk重新生成boot.img,。

  在解包后,,我們在ramdisk和system目錄下,各添加一個測試小文件(譬如叫mytest),。做完這些開始組包,,重新生成update.zip。到這里我們的工作并沒有完全結(jié)束,,還有最后的一步——簽名,。簽名需要用到簽名工具testsign.jar,這是一個基于java 1.6版本的工具,。在編譯Android源碼的時候,,我們強調(diào)要用java 1.5。在這里,,我們必須切換到1.6版本,。切換辦法見這里,。 1)重新生成boot.img

  將前面解包得到的boot.img-ramdisk 和 編譯源碼后out/target/product/generic/下的root目錄樹放在一個目錄下,然后用repack-bootimg.pl重新生成boot.img

  2) 創(chuàng)建一個目錄 myupdate,將上面生成的boot.img放到這個目錄下

  3)將編譯Android后,out/target/product/generic/生成的system目錄樹拷貝到myupdate目錄

  4)在myupdate目錄下創(chuàng)建update-script腳本目錄

  # mkdir -p META-INF/com/google/android

  5)刪除system/bin目錄下的“符號鏈接”,,創(chuàng)建update-script腳本

  update-script腳本的語法可以參考 這里 。研究原有的update-script腳本,我們可以大致看出update-script負(fù)責(zé)文件刪除拷貝,,權(quán)限設(shè)置,符號鏈接創(chuàng)建等工作,。我們可以在原有update-script的基礎(chǔ)上進行修改以得到我們自己的update-script,。這里,我們要注意的是,,要保證update-script的link創(chuàng)建成功,,必須把/system/bin下的link刪除。我們可以用一個腳本來做這個工作 delsymlink,。我修改后與自己編譯的Android2.2 system目錄樹相匹配的腳本,。

  6)重新打包并簽名

  7)自制ROM下載時報錯

  在試驗過程中,我經(jīng)常遇到如下的報錯

  Can't open/sdcard/download/update.hiapk

  問題原因:當(dāng) update-script 中有命令操作錯誤,,腳本就會停止,,并報這個錯誤,解決的辦法就是修正腳本,。你可以從這個錯誤前面的提示,,知道腳本哪一行出錯了。 很多時候,,你并不需要創(chuàng)建一個完整的ROM包,。你需要的只是,添加刪除或修改一些功能(譬如你僅想添加一個應(yīng)用,,或者你想添加busybox工具),。我們可以參考這里,來實現(xiàn)這個目的,。

  我用一個簡單的例子來說明這個過程,。該例子是在system目錄下添加一個mytest文件,同時創(chuàng)建一個指向這個文件的符合鏈接mylink,。以下是過程:

  1) 創(chuàng)建patch_update目錄,,并在該目錄下執(zhí)行

  # mkdir system

  # mkdir –p META-INF/com/google/android

  2) 在system目錄下生成mytest文件

  3)在 META-INF/com/google/android 創(chuàng)建如下的update-script

  show_progress 0.1 0

  copy_dir PACKAGE:system SYSTEM:

  symlink mytest SYSTEM:mylink

  set_perm 0 0 0755 SYSTEM:mytest

  4) 打包簽名

  如果前面的3步曲,你已經(jīng)很好的掌握了,,應(yīng)付你的日常工作應(yīng)該沒有太大的問題,。但要成為真正的ROM高手,你還有很多東西要修煉,。你要了解整個啟動過程,,內(nèi)核編譯,Android源碼的編譯及配置,,文件系統(tǒng)及啟動配置,。,。。

  HTC的官網(wǎng)上有一篇文章 這里 詳細(xì)介紹了鏡像包及燒機方法,。通常用兩種燒錄方式:recovery模式,,fastboot模式,。通過一些組合鍵,,可以進入燒錄模式。以HTC G3 Hero為例,,“Home + Power”同時按,,可以進入Recovery模式,“Back + Power”可以進入fastboot模式,。

  Recovery模式比較常用,,它相當(dāng)菜單界面的下載模式。直接把前面所述的update.zip文件放到SD卡上,,然后通過在機器上操作控制菜單,,就可完成燒錄。Fastboot是基于命令行的較低級的下載模式,,它可直接燒錄.img文件,。Fastboot工具也在out/host/linux-x86/bin目錄下。

  在我測試過程中,,發(fā)現(xiàn)fastboot模式無法燒錄,,當(dāng)我試圖燒錄system.img的時候,出現(xiàn)下面的出錯信息:

  # fastboot flash system system.img

  # writing 'system'... INFOsignature checking...

  FAILED (remote: signature verify fail)

  在網(wǎng)上查了之后,,發(fā)現(xiàn)這和簽名有關(guān)系,,SPL要重新刷一下才可,默認(rèn)是SPL-on,,即檢測簽名,,改成SPL-off,就不會出現(xiàn)這個問題,,目前沒有什么好辦法來處理這個問題,。好在recovery模式已經(jīng)能很好地滿足需求了,可以先放棄fastboot,。

  如果你通過recovery模式燒錄后,,發(fā)現(xiàn)系統(tǒng)無法正常啟動,沒有關(guān)系,,recovery還是可以進去的,。在recovery模式下,你可以通過adb shell登陸機器,??赡苣氵M去后,,發(fā)現(xiàn)SD卡并沒有掛接上來(執(zhí)行mount就可以查看掛載情況)。但recovry模式要求update.zip必須放在SD卡根目錄下,,怎么辦,?很簡單,執(zhí)行“mount –a”就可把SD卡區(qū)域掛接上來,。如果這招也不行,,還有一招,就是把userdata分區(qū)手動掛接到sdcard目錄,,這樣就騙過了recovery,。

  # mount /dev/mtdblock5 /sdcard

  然后,你再用adb push把新的update.zip拷貝到sdcard目錄,,重新進行燒錄,。一般來說,在執(zhí)行“Flash zip from sdcard”之前,,都要先進行Wipe操作,,以清除舊的用戶數(shù)據(jù)。

  如何更新recovery?

  可以參考 Hero更新成了recovery-RA-hero-v1.6.2-blue.img,。不過,,一般無特別的需求,最好不要更新recovery,。畢竟有一定風(fēng)險,,一不小心就成了板磚。

  知名的Android論壇: 國內(nèi):www.hiapk.com

  國外: 很多國內(nèi)論壇的文章都是參考或翻譯 的

  國內(nèi)一個很好的博客: ,,有很多對Android的研究專題

  國外一個很好的博客: ,,這個博客幫我解決了在燒錄 HTC G3 HERO的時候,自己打的ROM包燒錄后無法啟動的問題

  Android 文件系統(tǒng)

   itrd/

  

   ;a=blob;f=Documentation/filesystems/ramfs-rootfs-in itramfs.txt

   s/20090901/173312.html

  Android init腳本的語法

   =2237012

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多