Android/zh tw
From Openmoko
(→Notes) |
(catchg) |
||
(5 intermediate revisions by one user not shown) | |||
Line 664: | Line 664: | ||
必須要特別的注意。它負責動態產生DSP程式。 | 必須要特別的注意。它負責動態產生DSP程式。 | ||
− | == | + | == 建議 == |
− | * [[User:Cfriedt]] 20081024 | + | * [[User:Cfriedt]] 20081024 我不確定它的可行性多高,因為[http://wiki.openmoko.org/wiki/Neo_FreeRunner_Hardware_Issues#SMedia_3362_Documentation_.26_OpenGL_ES_Drivers SMedia 3362 被NDA保護]。 然而,arm920t 缺乏浮點單元 / DSP core,它可能使用 SMedia chip 產生特定目地的方法?這對Android 平台來講很有用,至少像是audio及 video codecs。 撇開OpenGL ES 驅動程式,歡迎提供針對SMedia 的 Openmoko文件。 |
− | = | + | = 重要連結 = |
− | ( | + | (歡迎大家在這裡加入重要連結) |
− | == | + | == 文件 == |
* [http://source.android.com/documentation Android Documentation] | * [http://source.android.com/documentation Android Documentation] | ||
* [http://www.arm.com/documentation/ ARM Documentation], (keywords: armv4t, armv5t, armv5te, arm920t, arm926ej-s) | * [http://www.arm.com/documentation/ ARM Documentation], (keywords: armv4t, armv5t, armv5te, arm920t, arm926ej-s) | ||
Line 677: | Line 677: | ||
* [http://www.heyrick.co.uk/assembler/apcsintro.html ARM Procedure Call Standard], [http://en.wikipedia.org/wiki/Calling_convention#ARM ARM Calling Conventions] | * [http://www.heyrick.co.uk/assembler/apcsintro.html ARM Procedure Call Standard], [http://en.wikipedia.org/wiki/Calling_convention#ARM ARM Calling Conventions] | ||
− | == | + | == 指令設定參考 == |
− | * [http://www.arm.com/miscPDFs/14128.pdf ARM Architecture Reference Manual] | + | * [http://www.arm.com/miscPDFs/14128.pdf ARM Architecture Reference Manual],最後的ISA文件 |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | == | + | * [http://www.simplemachines.it/doc/QRC0001H_rvct_v2.1_arm.pdf 設定Quick Reference Card的ARM 指令] |
+ | * [http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf 設定Quick Reference Card 的ARM及Thumb -2 指令] | ||
+ | * [http://infocenter.arm.com/help/topic/com.arm.doc.dvi0025b/DVI0025.pdf ARMv4T] (請參考1.4.13小節) | ||
+ | * [http://infocenter.arm.com/help/topic/com.arm.doc.dvi0014a/DVI0014A_ARM10T_PO.pdf ARMv5T] (請參考 4.16小節) | ||
+ | * [http://www.arm.com/pdfs/ARM-DSP.pdf ARM DSP 延伸指令集] | ||
+ | * [http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042c/IHI0042C_aapcs.pdf ARM架構下的Procedure Call Standard ] | ||
+ | |||
+ | == 硬體參考 == | ||
* [[Neo1973 Hardware]] | * [[Neo1973 Hardware]] | ||
* [[Neo FreeRunner GTA02 Hardware]] | * [[Neo FreeRunner GTA02 Hardware]] | ||
− | == | + | == 社群討論 == |
* [http://source.android.com/discuss Android Public Mailing Lists] | * [http://source.android.com/discuss Android Public Mailing Lists] | ||
** Specifically, [http://groups.google.com/group/android-porting android-porting] | ** Specifically, [http://groups.google.com/group/android-porting android-porting] | ||
Line 700: | Line 701: | ||
* [[Openmoko:Community_Portal]] | * [[Openmoko:Community_Portal]] | ||
− | = | + | = 請參考 = |
* [[Debug_Board]] | * [[Debug_Board]] | ||
− | = | + | = 其它連結 = |
== Youtube video /Android on FreeRunner == | == Youtube video /Android on FreeRunner == | ||
Line 711: | Line 712: | ||
[http://tw.youtube.com/watch?v=r6Op-7tNTiw Video 2] | [http://tw.youtube.com/watch?v=r6Op-7tNTiw Video 2] | ||
− | + | [[Category:Android]] | |
− | + | ||
− | [[Category: | + |
Latest revision as of 17:46, 10 July 2009
Languages: |
English • العربية • Български • Česky • Dansk • Deutsch • Esperanto • Eesti • Español • فارسی • Suomi • Français • עברית • Magyar • Italiano • 한국어 • Nederlands • Norsk (bokmål) • Polski • Português • Română • Русский • Svenska • Slovenčina • Українська • 中文(中国大陆) • 中文(台灣) • Euskara • Català |
Android is one of the many distributions that currently work on the Openmoko phones. You can compare a distribution with an Operating System on normal computers. It gives the phone all the software needed for operating. For more information about the different flavors, see distributions.
Contents |
[edit] Updates
- 20081202 Koolu.com 在Koolu GIT Koolu GIT (Press Release已釋出給FreeRunner使用的 Android 源碼。
- 20081120 Koolu.com 推動銷售搭載 Android的Openmoko Freerunner 。如提供現有的FreeRunner 下載可搭載的Android。直到 December 2008。
- 20081104 第一個可以在FreeRunner上執行的 Android-image已經成功的被 Sean McNeil編譯出來! - sms 及通話可以使用,wifi 及藍芽則否。news-source
- 20081029 User:Cfriedt Benno 修改了Android's build system,因此可以放置JFFS2 image,而不是YAFFS。 不像是JFFS2,只可以mount 到唯讀的情況下,要掛載 YAFFS映像檔在它被寫入 flash 後才有可能使用。(it complains about the block device being of type '1' and not 'NAND'). JFFS2 仍然有標準的 Openmoko image 格式的優點 (請參考 燒製映像檔到FreeRunner 或 燒製映像檔到Neo 1973)。
- 20081023 User:Bricode 追蹤包含ARMv5規格的 Android source tree狀態,我建立了一個表格表示它會包含什麼內容,及patche檔的狀態。它可以在 http://spreadsheets.google.com/pub?key=pzDEXnU19gkeTjpD28t-7fw 這個網址找到。
- 20081022 User:Cfriedt 可以在移除了v5TE指令下 ,沒有錯誤的'trivially' 為ARMv4T編譯 Android source code。雖然它不預期它可以被執行,至少我針對 build/core/combo/arm-linux.mk做了一些小小的取代。關於此點,我可以繼續像執行v4T指令順序般的,重新執行 v5TE 指令。(或者,重新執行整個 hand-optimized v4T 指令組合)。
- 20081021 User:Cfriedt Android -> FreeRunner ,在我的部落格上有討論。
- 20081021 Google 釋出Apache free 及 open-source手機下,大部份的source code 、 license, 部份被涵蓋在現有的授權(licenses)下,如 Linux kernel 是屬於 GPLv2授權。
- 200810?? Koolu.com 宣佈他們將會 銷售搭載Android的Openmoko Freerunner ,這個計劃會在2008年11月開始,並且提供現有的FreeRunner用戶 免費下載可搭載在Freerunner上的Android 。 知名的 open-source 愛好者Jon "maddog" Hall 是Koolu的CTO及代表。
[edit] 簡介
本網頁撰寫的目地在於將Android OS 移植到 Neo 1973 及 Neo FreeRunner 手機上。Android OS 於2008年10月21日公開的發佈 。 下列的資訊,可以提供您暸解在 Neo 1973及 FreeRunner 移植工作 目前的運作情形 及現狀。
[edit] 目標
- 有系統化的在Android codebase下使用提供給 ARMv4T 的patch檔。
- 提供在Android codebase在下Neo1973 與 Neo FreeRunner hardware-dependent patches 檔, 這項任務已經被 Openmoko 工程師完成,在不強迫變更 Android-specific upstream下。
- 在Distributions網頁中,提供有用的Android 檔案系統及kernel。
[edit] 使用現有的二進位檔安裝
詳盡的在FreeRunner上安裝Android (使用 Sean McNeil的kernel及rootfs 套件,及 Qi bootloader) ,何以在http://www.copiesofcopies.org/webl/?p=34此網址找到。
[edit] 早期目標
就如同 Ben Leslie 在 blog 中所提到的,在 source code釋出之前,Android 被設計為使用ARMv5TE 架構instruction set architecture (ISA),允許 DSP 擴充的指令。 相較於 ARMv5TE ISA, the Neo1973 及 FreeRunner 電話聽筒都著重在arm920t core,並可以應用到 ARMv4T ISA。
在源碼開放之前,kernel trap handlers 被用來 '模擬' ARMv5TE ISA。雖然這個結果在不同的案例下運作,trapping 是較花成本及效能的一種結果。甚至於,在沒有明確的暸解哪個狀況是被不同的指令所設定的情兄下,如Thumb Mode execution,這個結果成為沒有定論。
[edit] 目前的狀態
隨著 Android釋出 source code,Open Source社群不再受限於使用binary-only 產品。The Open Handset Alliance (OHA)已經讓他們的source code 成為能讓大家致富及受益的產品。
目前,porting 以不同的循環模式運做。Patches需要透過 official Android channels提交。
Koolu,Freerunner 的經銷商, 在http://git.koolu.com釋出了他們搭載FreeRunner的源碼。參考 #Building the Koolu Android Source下的說明可以暸解到如何製作供給Freerunner使用的Android image。
為了要追蹤Android source tree的哪個部份包含了特定的 ARMv5 程式,我製作了包含patches狀態的表格。這個表格可以在 http://spreadsheets.google.com/pub?key=pzDEXnU19gkeTjpD28t-7fw 找到。User:Bricode
Sean McNeil 指出他可以在FreeRunner上執行包含通話功能的 Android。
Ben Leslie 也在android-porting list上指出他可以在Neo 1973 show出他的Android logo。
[edit] 建立Koolu Android Source
- 參考Setting up your machine 中的Google build 說明,進行設定。
- 安裝 repo 並下載源碼,你可以在 http://trac.koolu.org/找到它的文件。
- 在完成build後,你可以藉由的訊息編輯及執行McNeil的 scripts,將root file system 放在一起。第一個 script (cp_android_OS) 用來複製最新的built files到 staging area。 第二個(mkjffs2) 則從staging area會製作一個jffs2 image。請確定在二個檔案中編輯你的路徑。或者,你可以使用以下的script
- 上面執行的結果是androidfs.jffs2的檔案,它可以被燒進你的Freerunner。
[edit] 製作jffs2 image
你可以使用以下的script:
#!/bin/sh currentdir=`pwd` ANDROID_OUT=out ANDROID_DEVICE=freerunner EXPORT_ROOT=$currentdir/build_jffs2_tmp Usage() { echo "Usage: $0 release|debug jffs2filename" } BuildImage() { if [ -d $1 ] then echo "[INFO] Copying from... $1" sudo rm -rf $EXPORT_ROOT mkdir $EXPORT_ROOT mkdir $EXPORT_ROOT/root # Copy the image... cd $1 tar cf - root | (cd $EXPORT_ROOT; sudo tar xf -) tar cf - system | (cd $EXPORT_ROOT/root; sudo tar xf -) # Change owner and permissions... cd $EXPORT_ROOT sudo chown -R root:root root sudo chmod -R 777 root cd $currentdir # Make the JFFS2 file mkfs.jffs2 --pad=0x700000 -o $2 -e 0x20000 -n -d$EXPORT_ROOT/root/ echo "[INFO] Image written to $2" sudo rm -rf $EXPORT_ROOT else echo "$1 does not exist!" fi } if [ $# != 2 ] then Usage else case $1 in release) BuildImage $ANDROID_OUT/target/product/$ANDROID_DEVICE $2 ;; debug) BuildImage $ANDROID_OUT/debug/target/product/$ANDROID_DEVICE $2 ;; *) Usage esac fi
目前並沒有與建置 Freerunner/Android kernel相關的說明文件。Sean McNeil 目前已經在 http://people.openmoko.org/sean_mcneil/ 這個位置釋出Kernel。大部份的patche 需要與andy-tracking kernel branch 配合執行,而此Kernel終將成為最穩定的kernel版本。 一旦所有的 patche都放到 kernel後,即可在stock kernel上執行 Android 。
[edit] 與 Windows 連結性
讓 Windows 能組織 Android "網路零件(Ethernet Gadget)" ,並且使用Android USB Windows driver (http://dl.google.com/android/android_usb_windows.zip) 充電,在你安裝驅動程式前,你可以透過修改套件中的android_usb.inf 檔案,來完成這項工作。你必須做出下面的修改動作:
將下面[Google.NTx86] 的內容加到android_usb.inf 檔案中:
; Neo FreeRunner %USB\VID_1457&PID_5117.DeviceDescRelease%=androidusb.Dev, USB\VID_1457&PID_5117 %USB\VID_1457&PID_5117&MI_01.DeviceDescRelease%=androidusb.Dev, USB\VID_1457&PID_5117&MI_01
並且在android_usb.inf檔案的 [Strings] 區塊下加入以下的內容:
USB\VID_1457&PID_5117.DeviceDescRelease="Neo FreeRunner" USB\VID_1457&PID_5117&MI_01.DeviceDescRelease="Neo FreeRunner Composite ADB Interface"
adb的Windows版本並不會出現,並且連接到裝置上,但至少FreeRunner會開始充電,裝置驅動程式會出現"This device is working properly(此裝置的功能運作正常)"的訊息。
[edit] 取得幫助
[edit] Getting Started
你可以藉由下面的操作指引下載及建立Android source,請參考 http://source.android.com/download並且依照你的架構參考操作指引。
[edit] 發佈你的作品
最好的方法是透過 wiki systems、公開的 mailing list、討論群組及公開的系統來發表你的作品。
對於你的工作,永遠加入自己的credit,但請不要使用註解的方式,因為有些程式在沒有註解的情況下已經不易閱讀困難,這個方式將增加困難度。最好的情況是,建立patch,並且在表頭放入你的個人連絡資訊。但協同運作的系統,如git可能已經幫你完成這個工作了。
若你建立了新的東西,並且能夠指定它的授權,請考慮授權相容性上的問題。
[edit] Porting 策略
- 分析它對現有的build system的影響力
- buid/core/combo/arm-linux.mk
- -D__ARCH_ARM_4__ -D__ARCH_ARM_4T__
- -march=armv4t -mcpu=arm920t
- 修補不同的靜態參考資料到 'armv5'
- buid/core/combo/arm-linux.mk
- 隔離 ARMv5TE ISA 相依的程式碼
- e.g. grep -n -R -i "${armv5te_isa_pattern}" ~/android
- 摘要
- ( C/C++ )
- 使用 inlined functions / #ifdef 狀態式來完成移植性的功能
- 針對 inlined assembler calls,目前使用一般的 C 程式也是可以被接受的,之後,我們再用手動的方式來進行最佳化的工作。
- ( ASM )
- 處理器的狀態是根據 ISA / architecture,如 #ifdef __ARCH_ARM_5__ ... #endif #ifdef __ARCH_ARM_4__ ... #endif
- 強烈的建議處理器狀態應該不要套疊在一起(如讓他們彼此獨佔)
- Some people have suggested that we should not do #ifdef's based on ARCH or ISA, but rather based on an AndroidConfig.h which would define macros like PLD(...) #ifdef HAVE_ARM_PLD pld #else ... #endif .
- ( C/C++ )
針對ARMv5TE 指令(instruction),可能潛藏著:
- 使用一般的registers(登錄子),而不是使用 DSP 呼叫 (如 eabi / softfloat)
- 若它是 a) 無法判別的 或者 b) 速度緩慢,則這個區段的程式則必須要分析,針對ARMv4T isa,必須使用hand-optimized 的方法
[edit] 不支援的指令
以下是opcodes列表,它是自Android Source解壓縮出來的,它不支援ARMv4T 相容的處理器 (尤其是 arm920t)。 opcodes 代表ARMv5、ARMv5T及ARMv5TE 架構下可以使用的指令。它無法在 ARMv4T ISA下執行。這個列表耗費了許多時間編輯,直到編譯無誤的狀態下,才會列出。
請牢記一件事,在一些狀況下,將這些指令順序的傳送到ARMv4T 指令下是不可能的,或者是會出現無預期的結果:
- 必須要有額外的context。
- opcodes變更登錄子的狀態,可能無法表現在 arm920t 核心上
[edit] Opcodes
|
[edit] 掃瞄使用ARMv5TE ISA的檔案
使用下列的opcodes,可以掃瞄到與ARMv4T與不相容的 Android source code指令順序。
Code:
#!/bin/sh # $1 is the android directory if [ $# -ne 1 ]; then exit -1 fi cd "${1}" opcodes="blx clz ldrd pld smlabb smlabt smlatt smlal smlawb smlawt smulbb smulbt smultt smulwb smulwt qadd qdadd qdsub qsub strd" for op in ${opcodes}; do echo "* ${op} =====================================" if [ ! -e .files.${op} ]; then files="$(grep -R -i "${op} " * 2>/dev/null)" files="$(echo $files | grep -v "^Binary file" | sed -e 's/:.*//')" files="$(echo $files| grep -v "CREDIT\|README\|^\(kernel/\|.git/\)\|\(\.txt\)$" | sort -u)" echo "${files}" > .files.${op} else files="$(cat .files.${op})" fi for fil in ${files}; do lines="$(grep -n -i "${op} " ${fil} | sed -e 's/:.*//g' )" lines="$(echo $lines | sed -e 's/ /,/g')" echo "** ${fil}: lines {${lines}}" done done |
[edit] 在Android下使用 ARMv5TE ISA 的原始檔案
以下的檔案可能是完整的,也可能是不完整的。也可能有些程式內容是透過 python script產生的.
|
[edit] 討論
[edit] 附註
檔案
system/core/libpixelflinger/codeflinger/ARMAssembler.cpp
必須要特別的注意。它負責動態產生DSP程式。
[edit] 建議
- User:Cfriedt 20081024 我不確定它的可行性多高,因為SMedia 3362 被NDA保護。 然而,arm920t 缺乏浮點單元 / DSP core,它可能使用 SMedia chip 產生特定目地的方法?這對Android 平台來講很有用,至少像是audio及 video codecs。 撇開OpenGL ES 驅動程式,歡迎提供針對SMedia 的 Openmoko文件。
[edit] 重要連結
(歡迎大家在這裡加入重要連結)
[edit] 文件
- Android Documentation
- ARM Documentation, (keywords: armv4t, armv5t, armv5te, arm920t, arm926ej-s)
- ARM Assembly Language Programming
- An Introduction to the GNU Assembler
- ARM Procedure Call Standard, ARM Calling Conventions
[edit] 指令設定參考
- ARM Architecture Reference Manual,最後的ISA文件
- 設定Quick Reference Card的ARM 指令
- 設定Quick Reference Card 的ARM及Thumb -2 指令
- ARMv4T (請參考1.4.13小節)
- ARMv5T (請參考 4.16小節)
- ARM DSP 延伸指令集
- ARM架構下的Procedure Call Standard
[edit] 硬體參考
[edit] 社群討論
- Android Public Mailing Lists
- Specifically, android-porting
- OpenMoko Mailing Lists
- Specifically, openmoko-kernel
- Android on FreeRunner at KoolU.com
- Openmoko Local Groups
- Openmoko:Community_Portal