綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[教學] 翻譯一個源代碼編譯G1ROM的教程,很好很入門

[複製連結] 查看: 2348|回覆: 5|好評: 0
跳轉到指定樓層
樓主
278755328 | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2011-2-20 10:44

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
http://www.johandekoning.nl/
Android 1.5 HTC – 開發環境
June 7th, 2009
去年我買了一台Android開發版手機,希望能夠成為首批使用這個了不起的手機和操作系統的用戶。Android開發手機使我們能夠用自己編譯的Android版本來稍定制手機,那麼為什麼不用源代碼開始編譯/構造自己的Android操作系統呢。
編譯/構造Android1.5版本的第一個步驟是建立開發環境,在http://source.android.com/download上有一個詳細的描述。這裡將我實際的操作過程一步一步的描述出來。
安裝Ubuntu
我在虛擬機上安裝的Ubuntu,用的版本是8.04,因為這是Google用的開發環境,用8.10有一些問題。
這裡不解釋如何安裝Ubuntu,這實在太簡單直接(甚至比安裝Vista還容易。)
Ubuntu安裝好以後用
apt-get update
apt-get upgrade
更新安裝好的軟件包版本
Required packaged
需要安裝的包
為了用git拉源代碼和build Android, 必須安裝如下包,通過sudo apt-get install <包名稱>來安裝需要的軟件包。
‧        git-core
‧        gnupg (this package was already installed)
‧        sun-java5-sdk (don』t use java 6 because this will result in errors during build)
‧        flex
‧        bison
‧        gperf
‧        libsdl-dev
‧        libesd0-dev (the last 0 is a zero)
‧        libwxgtk2.6-dev
‧        build-essential
‧        zip (already installed)
‧        curl
‧        libncurses5-dev
‧        zlib1g-dev
‧        valgrind (this packge is optional)
可以通過組合apt-get命令來一次性的安裝多個包
sudo apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev valgrind
http://source.android.com/download 推薦Ubuntu 8.10用戶安裝新版的libreadline. 我發現其實8.04版本也需要這個軟件,不然的餓話repo會出錯。
sudo apt-get install libreadline5-dev
注意:android網站上用了不同的軟件包名稱,lib32readline5-dev,但是這個包不存在。
Java環境
這裡我們要用Java 5,可能您的Ubuntu安裝上已經有了Java 6,用下面的命令檢查Java版本
update-java-alternatives -l
在我的機器上輸出的是:
java-1.5.0-sun 53 /usr/lib/jvm/java-1.5.0-sun
If multiple versions are installed, use update-java-alternatives -s to change the default Java Environment. For example
如果機器上安裝了多個版本,用 update-java-alternatives –s命令切換缺省的Java版本
update-java-alternatives -s java-1.5.0-sun
Java安裝位置必須通過$JAVA_HOME變量設置,編輯您的用戶主目錄下的.bashrc文件,在結尾部分增加以下內容:
export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun-1.5.0.16
當然Java安裝路徑可能有差別,依賴於不同的小版本號,我的機器上是1.5.0.16。請檢查您的Java安裝路徑。
Start a new terminal and check if $JAVA_HOME is working and pointing to the right location
啟動一個新的控制台,檢查$JAVA_HOME環境變量是否正確設置
echo $JAVA_HOME
You can also check if the correct Java version is used by running the command java –version
同時用java –version檢查您用的Java版本是正確的
java -version
預期的輸出:
java version "1.5.0_16"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_16-b02)
Java HotSpot(TM) Client VM (build 1.5.0_16-b02, mixed mode, sharing)
下一步
通過安裝Ubuntu和相關的軟件包,安裝配置Java環境,準備好所有這些工作以後,下一步就是通過git下載源代碼,build您自己的Android版本了。我將在下一個blog中介紹如何拖正確的代碼版本。任何問題請通過下面的反饋部分提出來。
「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)
收藏收藏1 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
沙發
 樓主| 278755328 | 收聽TA | 只看該作者
發表於 2011-2-20 10:45
Android 1.5 HTC – 獲取源代碼
June 7th, 2009
Note (24 june 2009): contributed a patch to the Android Source (change 10501) for updating the extact-files.sh and AndroidBoard.mk scripts which where outdated for the proprietary files. This simplifies the process of getting the source a little bit.
Note (9 june 2009): I updated this blogpost to make wifi and the led light of your Android Dev Phone working inside your own build.
上一篇blog介紹了如何建立正確的開發環境。下一步是拖下代碼並加上適當的補丁以便能夠成功build。http://source.android.com/download上有git代碼的部分,但是我會給出更詳細的描述,包括讓您的版本能支持Android開發手機。
Installing repo
安裝repo
Open a terminal inside Ubuntu and make sure that you are inside your home directory
新開一個Ubuntu控制台:
cd ~
mkdir bin
在您的配置文件~/.bashrc結尾部分增加下面一行
export PATH=$PATH:~/bin
保存文件,推出控制台,打開一個新的控制台,檢查bin目錄是否正確加入到路徑中:
echo $PATH
用curl下載repo腳本,修改為可執行文件
curl http://android.git.kernel.org/repo > ~/bin/repo
chmod a+x ~/bin/repo
Repo初始化
Android源代碼的主目錄約定為用戶目錄下的mydroid
cd ~
mkdir mydroid
cd mydroid
在mydroid目錄下執行repo,註明android源代碼在遠程服務器上的目錄,通過運行
repo init -u git://android.git.kernel.org/platform/manifest.git
您得到的是Android的主版本。問題是主版本更新很快,不是很穩定有很多實驗性的代碼,所以我通過特定的分支拖一個穩定的1.5版本
repo init -u git://android.git.kernel.org/platform/manifest.git -b android-1.5r2
Repo可能需要您的用戶名和email地址,最好用您的Google賬號,以後提交您的代碼更新會有用。
Repo腳本執行成功會輸出如下信息
repo initialized in /home/jcdekoning/mydroid
到現在我們只是配置了repo工具,還沒有開始下載真正的代碼,在mydroid目錄下,您會發現一個隱藏的.repo目錄
Repo configuration changes for Android Dev Phone
針對Andoid開發手機對repo配置的修改
現在當然可以下載源代碼,但是我們必須針對Android開發手機(Dream,G1)對源代碼做必要的更改,Google網站上有一篇文章(http://source.android.com/documentation/building-for-dream),但是已經過時了。
在.repo目錄下,我們需要增加一個新的文件local_manifest.xml. 該文件包含開發手機需要的三個額外項目,同時會提出主版本的內核項目,因為HTC用了一個特殊的內核版本, local_manifest.xml文件的內容:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remove-project name="kernel/common"/>
  <project path="kernel" name="kernel/msm" revision="refs/heads/android-msm-2.6.27"/>
  <project path="vendor/htc/dream" name="platform/vendor/htc/dream-open" revision="cupcake"/>
  <project path="hardware/msm7k" name="platform/hardware/msm7k" revision="refs/heads/master"/>
</manifest>
終於可以下載代碼了
repo sync
坐下來,放鬆,喝點咖啡,當然您也可以看看我的其他blog文章,repo需要的時間實在太他媽長了。
Proprietary binaries
專有二進制代碼
部分不開源的Dream特有代碼必須從安裝1.5cupcake版本的開發手機中提取出來,這些文件不是源代碼樹的一部分,但在開發手機上是必須的。在您的mydroid目錄中會發現/vendor/htc/dream目錄,其中有一個extract-files.sh腳本文件,通過調用adb命令用實際的設備中提取文件。不幸的是,這個文件也是過時的。
通過打上下述補丁更新extract-files.sh腳本和AndroidBoard.mk工程文件
repo download platform/vendor/htc/dream-open 10501
通過連上您的Android手機,在Ubuntu中執行下述腳本提取相關文件
./extract-files.sh
有的時候虛擬機上的Ubuntu連接終端不是很可靠,您可以考慮extract-files.sh腳本的另外一種方式
用unyaffs從HTC官方image中提取
如果您正確執行了extract-files.sh,請跳過這一節
Android採用了yaffs文件系統,通過下載unyaffs工具可以從Android映像文件中提取您需要的任何文件。
http://code.google.com/p/unyaffs/ 下載unyaffs工具,然後
cd ~/bin
chmod a+x unyaffs

下載官方cupcake image文件http://www.htc.com/www/support/android/adp.html ,注意版本是Android 1.5,下載system image (signed-dream_devphone_userdebug-img-148830.zip). 在您的主目錄下創建htc目錄存放下載的zip文件(mkdir ~/htc)。請不要更改目錄名,不然要修改一系列的腳本。
Zip文件找那個包含下述映像
‧        boot.img
‧        recovery.img
‧        system.img
‧        userdata.img
在我們完成編譯以後也會生成這幾個image文件,用unyaffs工具解包system.img文件
cd ~/htc
sudo ~/bin/unyaffs system.img
接下來編輯一個 htc-copy.sh腳本,存儲在~/htc,內容如下
#!/bin/sh

mkdir -p ~/mydroid/vendor/htc/dream/proprietary
cp ~/htc/etc/AudioFilter.csv ~/mydroid/vendor/htc/dream/proprietary/AudioFilter.csv
cp ~/htc/etc/AudioPara4.csv ~/mydroid/vendor/htc/dream/proprietary/AudioPara4.csv
cp ~/htc/etc/gps.conf ~/mydroid/vendor/htc/dream/proprietary/gps.conf
cp ~/htc/etc/firmware/brf6300.bin ~/mydroid/vendor/htc/dream/proprietary/brf6300.bin
cp ~/htc/bin/akmd ~/mydroid/vendor/htc/dream/proprietary/akmd
cp ~/htc/lib/libhtc_ril.so ~/mydroid/vendor/htc/dream/proprietary/libhtc_ril.so
cp ~/htc/lib/libaudioeq.so ~/mydroid/vendor/htc/dream/proprietary/libaudioeq.so
cp ~/htc/lib/libqcamera.so ~/mydroid/vendor/htc/dream/proprietary/libqcamera.so
cp ~/htc/lib/libgps.so ~/mydroid/vendor/htc/dream/proprietary/libgps.so
cp ~/htc/lib/libhgl.so ~/mydroid/vendor/htc/dream/proprietary/libhgl.so
cp ~/htc/lib/libOmxCore.so ~/mydroid/vendor/htc/dream/proprietary/libOmxCore.so
chmod 755 ~/mydroid/vendor/htc/dream/proprietary/akmd

cp ~/htc/lib/libhtc_acoustic.so ~/mydroid/vendor/htc/dream/proprietary/libhtc_acoustic.so
cp ~/htc/lib/libjni_pinyinime.so ~/mydroid/vendor/htc/dream/proprietary/libjni_pinyinime.so
cp ~/htc/lib/libmm-adspsvc.so ~/mydroid/vendor/htc/dream/proprietary/libmm-adspsvc.so
cp ~/htc/lib/libOmxH264Dec.so ~/mydroid/vendor/htc/dream/proprietary/libOmxH264Dec.so
cp ~/htc/lib/libOmxMpeg4Dec.so ~/mydroid/vendor/htc/dream/proprietary/libOmxMpeg4Dec.so
cp ~/htc/lib/libOmxVidEnc.so ~/mydroid/vendor/htc/dream/proprietary/libOmxVidEnc.so
cp ~/htc/lib/libopencorehw.so ~/mydroid/vendor/htc/dream/proprietary/libopencorehw.so
cp ~/htc/lib/libpvasf.so ~/mydroid/vendor/htc/dream/proprietary/libpvasf.so
cp ~/htc/lib/libpvasfreg.so ~/mydroid/vendor/htc/dream/proprietary/libpvasfreg.so
cp ~/htc/lib/libspeech.so ~/mydroid/vendor/htc/dream/proprietary/libspeech.so
cp ~/htc/lib/hw/lights.goldfish.so ~/mydroid/vendor/htc/dream/proprietary/lights.goldfish.so
cp ~/htc/lib/hw/sensors.trout.so ~/mydroid/vendor/htc/dream/proprietary/sensors.trout.so
cp ~/htc/etc/wifi/Fw1251r1c.bin ~/mydroid/vendor/htc/dream/proprietary/Fw1251r1c.bin
cp ~/htc/etc/wifi/tiwlan.ini ~/mydroid/vendor/htc/dream/proprietary/tiwlan.ini

cp ~/htc/lib/modules/wlan.ko ~/mydroid/vendor/htc/dream/wlan.ko
cp ~/htc/lib/hw/lights.msm7k.so ~/mydroid/vendor/htc/dream/proprietary/lights.msm7k.so
cp ~/htc/etc/AudioPreProcess.csv ~/mydroid/vendor/htc/dream/proprietary/AudioPreProcess.csv
執行htc-copy.sh腳本將官方ROM中的文件拷貝到源代碼目錄~/mydroid/vendor/htc/dream。
chmod a+x htc-copy.sh
./htc-copy.sh
到~/mydroid/vendor/htc/dream/proprietary目錄下檢查文件是否拷貝正確。
What』s next?
下一步
源代碼和補丁都正確到位了,下一步就是build Linux內核和Android了
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

板凳
 樓主| 278755328 | 收聽TA | 只看該作者
發表於 2011-2-20 10:46
Android 1.5 HTC – 編譯
June 8th, 2009
Building內核
如下:
cd ~/mydroid/kernel
export ARCH=arm
export CROSS_COMPILE=arm-eabi-
export PATH=$PATH:~/mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin
cp arch/arm/configs/msm_defconfig .config
make oldconfig && make
build成功以後將會生成如下文件 ~/mydroid/arch/arm/boot/zImage. 該文件將會在Androidbuild過程中用到。
修改HTC工程
我們需要SdkSetup使得接電話正常(用於將手機至於provisioned狀態)並讓home(房子)鍵工作,但是這個軟件缺省沒有發佈,所以我們必須修改htc_dream.mk文件。修改~/mydroid/vendor/htc/dream/ htc_dream.mk文件,在開始部分加入一下內容
PRODUCT_PACKAGES :=
Calculator
Email
ImProvider
SdkSetup
VoiceDialer
Building Android
cd ~/mydroid
創建配置文件~/mydroid/buildspec.mk,該文件包含以下兩行
TARGET_PRODUCT:=htc_dream
TARGET_PREBUILT_KERNEL:=kernel/arch/arm/boot/zImage
現在可以開始了
make
What』s next?
下一步
燒雞,祈禱不要變磚
Blogpost in the Building Android 1.5 serie
‧        Building Android 1.5 – Build environment
‧        Building Android 1.5 – Getting the source
‧        Building Android 1.5 – Building the source
‧        Building Android 1.5 – Flashing the phone
‧        Building Android 1.5 – Google Apps and audio files
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

地板
 樓主| 278755328 | 收聽TA | 只看該作者
發表於 2011-2-20 10:46
Android 1.5 HTC – 燒機
July 3rd, 2009
通過上面三篇文章的學習,各位應該已經生成了燒機需要的Andoid影響文件。現在我們有一些必要的準備工作,以確保燒機成功
注1:燒機將會抹掉手機上的所有數據(不包括SD卡),電話、短信什麼的。當然可能保留userdata分區不寫,但這經常會導致一些奇怪的結果,所以我們盡量備份數據,然後將userdata區一併重寫
注2:一般而言燒機不會讓您的手機變磚,即使您的build不工作至少可以啟動bootloader。什麼事都有萬一,所以我不能對您的手機的損壞負責。要清楚您到底在做什麼,除了一步步的指導,我會試圖給您足夠的信息,讓您知道為什麼要這樣做。有什麼問題請在Android Platform Forum  (http://groups.google.com/group/android-platform)提問。
基帶Radio image
基帶Radio image負責通信模塊工作,也是不開源的所以得從HTC網站下載 (http://www.htc.com/www/support/android/adp.html).
我們的build基於cupcake版本,所以您必須用1.5版本的Radio image。老的版本是不兼容的
通過手機菜單確認您的手機基帶版本,主畫面:menu/設置/關於手機/Baseband版本應該是62.50s.20.17H_2.22.19.16I (just like the download name ota-radio-2_22_19_26I),如果不對,請升級您的基帶版本(按照 http://www.htc.com/www/support/android/adp.html指導來,非常簡單)
   
About phone screen
Fastboot
燒機過程需要fastboot工具,用我們剛剛編譯生成的版本~/mydroid/out/host/linux-x86/bin
cp ~/mydroid/out/host/linux-x86/bin/fastboot/ ~/bin
(中文註:不建議用Windows版本,我總用不起來,Mac就算了) If you are a Windows user, you should use the fastboot executable provided by HTC. I don』t know if building the source on Mac OS X is as clear as on Ubuntu (it should be possible to compile the source) and that the fastboot version can be used.
Ubuntu中連接手機
In a previous blog post I explained how to connect your device with Ubuntu which runs within VMWare as Virtual Machine. Those steps (http://www.johandekoning.nl/inde ... -and-vmware-server/) are also relevant when running Ubuntu natively (except for the VMWare steps).  Or follow the steps (when for example you want to use fastboot with Windows) which are written for the Android SDK http://developer.android.com/guide/developing/device.html
Flashing the device
燒機
So the HTC Android 1.5 version is running well? You made sure that the right radio version is installed? Fastboot is working properly? And made (optionally) a backup of your important data?
都準備好了,開始燒機了
首先您的機器要支持fastboot模式,Android開發機都支持,咱們買的G1刷一個SPL就可以了,具體操作到hiapk.com上查看。
如下步驟,很多文章都有,就簡單翻一下
首先關機
按住camera鍵開機,屏幕出現三個踩滑板的機器人(也可能是彩虹什麼的,無所謂了),打印HBOOT
按返回鍵,進入fastboot模式
連接USB,進入fastboot usb模式
Blog上說只能用開發機,G1不支持flash,實際上G1刷一個SPL就OK了
要燒的image在一下目錄:
~/mydroid/out/target/product/dream
檢查這幾個文件是不是存在
‧        boot.img (用於啟動設備,包含內核)
‧        system.img (Android系統,包含框架,驅動,應用,一切的一切)
‧        userdata.img (用戶數據,也可以不刷這個分區,可以保留原來的用戶數據,但是保險期間,刷一下也無妨)
‧        recovery.img
在輸出目錄中(~/mydroid/out/target/product/dream)執行下述命令燒機
sudo fastboot flash boot boot.img
sudo fastboot flash system system.img
sudo fastboot flash recovery recovery.img
sudo fastboot flash userdata userdata.img
(中文註:不知道別人怎麼樣,我的fastboot必須在root下執行,所以我加了一個sudo,這樣的話,可能環境就不一樣了,可能您需要為 fastboot工具加上路徑,如sudo /home/xxx/bin/fastboot flash boot boot.img)
Fastboot會先傳輸image文件,成功後再燒機寫特定的分區。
(中文註:您需要一條好一點的USB線,我開始的時候因為USB先的問題總是不成功,還以為燒死了,電腦城的垃圾線十有八九不行的)
完了重啟
fastboot reboot
還活著
第一次重啟需要較長的時間,不要急。
(中文註:google上的kernel版本和HTC目前發佈的WiFi驅動版本有點衝突,WiFi還起不來
內核輸出:
[ 175.928619] wlan: version magic 『2.6.27-00393-g6607056 preempt mod_unload ARMv6 『 should be 『2.6.27-00394-gc6c6056 preempt mod_unload ARMv6 『
kernel 2.6.27-00394-gc6c6056
wlan.ko 2.6.27-00393-g6607056
這個問題比較麻煩,尚未解決)
Can
‧        Wifi and bluetooth should work properly (because we added the right driver versions)
‧        The Home button will work and you will have the Silent and Airplane option when holding the END CALL button (this is done by the SdkSetup package)
‧        The led light should work when you get an SMS or connect the device
‧        You should be able to make and receive calls
‧        Camera, GPS and all the other sensors should be working fine
‧        Start applications like Browser, Calculator, etc
‧        Make use of 3G connection
‧        Use android in a different language. The HTC version of Android has only the English language pack. Your own version has multiple language support.
Can』t
‧        Use the Calendar application. Because this application depends on some Google libraries which are not on the system. I was looking how to seperate the Calendar application so that it is not Google dependent (and submit the source back to the source tree)
‧        No Market application.
‧        No Google applications (like GMail, GTalk, Maps).
‧        No nice ringtones. The media directory which contains all the ringtones which are normally there is not part of the built.
‧        No synchronization with Google (like contacts and calendar)
下一步
I will write another post about how to add the Google Apps, Market and ringtones to your own build. For now the flashing part is completed (so turn on the lights again   ). Questions and other feedback can be given to this post.
Blogpost in the Building Android 1.5 serie
‧        Building Android 1.5 – Build environment
‧        Building Android 1.5 – Getting the source
‧        Building Android 1.5 – Building the source
‧        Building Android 1.5 – Flashing the phone
‧        Building Android 1.5 – Google Apps and audio files
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

5
 樓主| 278755328 | 收聽TA | 只看該作者
發表於 2011-2-20 10:50
附上一個PDF版的簡體字版

Building Android cupcake for G1.pdf

197.35 KB, 下載次數: 0, 下載積分: 碎鑽 -1 個

用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

6
wukerjen | 收聽TA | 只看該作者
發表於 2011-8-3 08:52
樓主的精神令人感動,謝謝您的分享!
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則