Friday, November 18, 2011

Android 4.0 Ice Cream Sandwich on Pandaboard

好胖達,不燒嗎?

這份教學文件的目的是編譯Android 4.0並且燒錄至Pandaboard上,請依照步驟執行

0. 環境設定

我所編譯的環境是Ubuntu-10.10-server , x64

Intel Core-i7 四核心, 16 GB RAM

建議Android的開發盡量在64位元作業系統上執行會比較順利

1. 下載Android 4.0原始碼

http://source.android.com/source/downloading.html

值得強調的一點: 請勿下載android-4.0.1_r1分支,因為這版本的Pandaboard kernel有問題,會無法成功開機,所以我們就下載最新的master版本

$ mkdir android_ICS
$ cd android_ICS
$ repo init -u https://android.googlesource.com/platform/manifest
$ repo sync

2. 編譯原始碼 for Pandaboard

在編譯之前我們要設定 for Pandaboard 的環境變數,Android幫我們寫好一個簡單的工具可以快速的設定所有的環境變數

$ cd android_ICS
$ . build/envsetup.sh
$ lunch full_panda-eng

下載Android for Pandaboard的driver patch

http://code.google.com/intl/zh-CN/android/nexus/drivers.html

解壓縮後會產生一個extract-imgtec-panda.sh, 放置到android的根目錄

執行這個script檔,並且同意他的聲明後,就會自動完成patch

Type "I ACCEPT" if you agree to the terms of the license: I ACCEPT


接下來就是快樂的編譯時光,除了編譯開機映像檔以外,我們也要編譯fastboot工具,等等就會用到了, j後面的數字代表要開幾條thread來編譯,基本上核心多的電腦可以用4條thread

$ make fastboot
$ make -j4

接下來就等待編譯完成吧,估計會花上半小時至數小時不等(視電腦運算速度而定)

3.Pandaboard硬體配置


(1) 電源線(5v)

(2) mini USB to USB線,以下簡稱USB線

(3) UART線

(4) 4GB的SD卡(文件上寫需要4GB,但實際上不確定能不能用更小的空間完成)

(5) HDMI to DVI線,以下簡稱HDMI線

(6) USB滑鼠與USB鍵盤,網路線 (option)





齊備了這些線材配置之後,我們要來燒錄Pandaboard了!!

4. 燒錄流程

整個燒錄過程需要有root權限,所以我們root過後重新設定一下環境變數

$ sudo su
$ cd android_ICS
$ . build/envsetup.sh
$ lunch full_panda-eng

4.1 首先接上UART線,這是我們用來確認板子上到底發生什麼事情的好手段,方便找出錯誤之用(換句話說,如果你有信心,這步驟跳過亦可)

我是在筆電上進行監測,所以我們這裡用putty軟體,若是在工作站環境,建議用minicom, serial port設定為ttyUSB0, 若是用一般的RS232線, 就要用ttyS. Baudrate要設定為115200


接下來理論上就可以從putty中看到開機時噴出的訊息了(現在應該是還沒有訊息的)

4.2 確認SD卡被拔除, 插上USB線,再插上電源線,從server主機以root身分下指令:

$ cd android_ICS/device/ti/panda
$ ./usbboot ./bootloader.bin

此時主機會將bootloader的執行檔直接塞到板子的RAM上面,並用此bootloader進入工廠模式(也就是fastboot模式),若是有用UART來debug, 現在應該看的到進入fastboot mode

接下來插入SD卡(卡片不需要做任何format或設定,因為等等會自動重新format)

$ cd android_ICS/out/host/linux/bin
$ ./fastboot oem format
$ ./fastboot flash xloader android_ICS/device/ti/panda/xloader.bin
$ ./fastboot flash bootloader android_ICS/device/ti/panda/bootloader.bin

上述動作也必須在root下完成,主要是在把插在Pandaboard上的SD卡format好以後,把u-boot寫入到此SD卡之中,當未來重新啟動電源時,板子就會自動去讀此SD卡上的bootloader,就不需要每次都從主機上傳bootloader過去了

(PS: 這邊的format步驟只需要做一次即可,因為理論上我們未來不需要去修改SD卡上的bootloader,所以如果之前做過這步驟,就直接跳過4.2和4.3吧)

若是上述指令出現問題,可以用以下指令來驗證主機是否能夠偵測到處於工廠模式下的板子,若是偵測不到裝置,代表可能是你的板子不處於fastboot mode之下,請用putty做確認

$ ./fastboot devices

4.3 接下來要用SD卡的bootloader進入工廠模式(若是你依照上述步驟走下來,現在已經進入工廠模式)

若是中途曾經重開機過,要進入SD卡的bootloader之工廠模式的話,請按住板子上的GPIO按鈕,然後按下旁邊的RESET按鈕,直到putty上出現你進入工廠模式即可

$ cd android_ICS/out/host/linux/bin
$ ./fastboot erase cache
$ ./fastboot flash userdata
$ ./fastboot flashall

上述動作主要是透過工廠模式,把系統的映像檔燒錄到SD卡上,未來開啟電源時,板子會先從SD卡上載入bootloader,然後bootloader又會從SD卡上載入這個映像檔,並掛載成為root file system

這幾個動作總共要花十分鐘左右,可以透過putty來觀察是否有成功

5. 開機

如果你是依照上述步驟走下來的話,此時會自動開始boot, 第一次開機大約要花上15分鐘

請記得接上USB滑鼠,HDMI線和網路線,就可以開始玩Android 4.0囉!!

(PS: 要特別注意,在螢幕解鎖畫面下,系統很快會進入idle模式,此時只要動一動你的滑鼠,螢幕就會跑出來囉)

(PS: 第一次開機似乎顯示driver剛初始化無法正確運作,請等到他完成初始化後,再重新開機就可以正確進入)


6.後續設定

$ cd android_ICS/out/host/linux/bin
$ ./adb shell

# dhcp

若是要進入adb shell做事,也必須擁有root權限,進去後可以透過netcfg或dhcp來設定網路~

關於如何編譯與燒錄Pandaboard的kernel, 請參考另一篇文章

35 comments:

  1. 不好意思,我也在做這塊板子的東西,但是我目前東西都有編譯出來,但是我接上mini usb 到 host 端, 我的電腦會一直跑出,有連接到這塊板子,但一下就會跳開,變成沒有連接,然後就開始一直反覆的連接,無連接...

    請問您有發生過這種問題嗎?

    ReplyDelete
  2. To 空襲:

    這代表您的線材有點短路了

    換一條新的USB線應該就可以了

    ReplyDelete
  3. 您好! 我有換過三條線 以及 手上兩塊板子 都是一樣的結果,我的 電腦無法正常抓到 我的板子 這會是甚麼問題呢? 還是說需要先安裝甚麼東西 才可能抓到呢?

    我的板子應該是 OMAPS4430的 我在想會不會壞掉 還是說 他的 mini Usb有問題...

    順帶一提,我用putty 開,但是無法抓到任何訊息
    因為我使用了SD卡開機的方式,但是沒有噴出任何訊息

    (之前我曾經有做過 devkit8000 beagleboard-RevC4 mini6410 beagleboard-xM)

    ReplyDelete
  4. 首先您可以在本機端下lsusb來確認是否有偵測到此usb裝置

    (或是在windows環境下的裝置管理員來檢查)

    如果偵測不到自然就是線或driver或板子的問題

    另外,要用終端機來收資料,需要透過UART來連接

    其實基本流程就跟beagleboard-xm差不多阿

    ReplyDelete
  5. 想請問您一下:

    我有在windows下偵測到這塊板子,但是沒有辦法抓到DRIVERS,所以呈現 無法使用,但是連到虛擬機上,會有一直連上跟跳出的問題,之後灌了一台只有LINUX的,就完全沒反應,而線材之前有做過其他塊板子,是正常地所以我覺得應該沒問題,那假如插到LINUX環境下,是有需要下載他的DRIVER嗎??? 因為板子之前給學姊使用的時候她說她成功用SD卡開機,但是他沒有透過燒錄的方式,所以她也不確定能不能正常連上。

    終端機收資料我有接上UART,然後是在WINDOWS下,所以我設定 COM1 115200 serial port,但就是沒有資料XDDD

    感謝您^_^

    ReplyDelete
  6. 您好,我想請問一下我用adb devices時會有權限問題,如下
    ?????????? no permissions
    pandaboard的驅動我之前在porting 2.3.5的時候有裝過,也確認可以work
    所以我無法用adb shell
    我有切換為ROOT,想請問一下這個權限該如何修改呢?

    謝謝您

    ReplyDelete
  7. 就是用root來連接,

    唯一要注意的是,如果你在非root情況下執行了adb shell

    則必須先adb kill-server後才能用root身分進行連接

    ReplyDelete
  8. 你好, 我在port ICS到pandaboard有遇到下列問題:
    1. 用usbboot load bootloader.bin到板子上失敗, 透過putty看到的訊息是 "SIGNATURE VERIFICATION FAILED".

    2. 嘗試用SD card boot,錯誤訊息是"Could not read bootloader! X-Loader hangs"

    不知道您是否有相關經驗可以提供解決的方向?

    ReplyDelete
  9. 請問你有遇過需要安裝JAVA6的狀況嗎
    我用DESKTOP的UBUNTU他都要求要有JAVA6
    但是我怎麼裝都裝不起來JAVA6
    用Server的版本會不會有這樣的問題

    ReplyDelete
    Replies
    1. 請參考以下網站:

      http://www.cnblogs.com/wanqieddy/archive/2011/07/14/2106648.html

      Delete
  10. 你好
    因為我的ubuntu環境為32bit LSB
    我已經編譯好ICS
    但是執行PandaBoard/ICS4.0/device/ti/panda# ./usbboot bootloader.bin
    bash: ./usbboot: cannot execute binary file
    無法執行這個binary file
    檢查的結果,
    PandaBoard/ICS4.0/device/ti/panda#file /sbin/init
    /sbin/init: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped
    發現usbboot是一個64bit binary file
    請問有辦法解決嗎?

    ReplyDelete
    Replies
    1. 你可以重新在32bit電腦上編譯你的usbboot,可以參考這個資料:

      http://groups.google.com/group/android-porting/browse_thread/thread/70910b0eef198d83?pli=1

      Delete
  11. 謝謝~
    另外有個問題想在請教一下
    我的環境是windows在vmware上安裝ubuntu,
    現在我將miniUSB插上後,
    windows沒有辦法安裝這個硬體,安裝失敗後,
    ubuntu下也看不見omap4430,所以雖然我現在usbboot可以執行,
    但是一直是停頓在這裡,找不到omap4430,
    PandaBoard/ICS4.0/device/ti/panda# ./usbboot bootloader.bin
    using built-in 2ndstage.bin
    waiting for OMAP44xx device...

    請問有什麼想法嗎?
    還是windows要安裝driver ?
    或者你們的環境是純linux ?

    ReplyDelete
    Replies
    1. 你可以用lsusb看看有沒有正確抓到裝置,

      如果沒有的話可能是要裝windows用的driver,

      我的環境是純的Ubuntu

      Delete
  12. 你好
    我在稍好SD卡上
    等他重新開機 請問我要做什麼事情嗎
    我有接HDMI的線到螢幕上
    PANDABOARD有兩箇HDMI街頭要接那一各

    ReplyDelete
    Replies
    1. 1. 去泡杯茶

      2. 請看我文章裡的圖片編號5

      Delete
  13. 如果15分鐘後還是沒畫面
    那請問是什麼問題嗎?
    $ sudo out/host/linux-x86/bin/fastboot -p panda flashall
    --------------------------------------------
    Bootloader Version...: U-Boot 1.1.4-g157fe435
    Baseband Version.....:
    Serial Number........: ################
    --------------------------------------------
    checking product...
    OKAY [ 0.006s]
    sending 'boot' (3750 KB)...
    OKAY [ 2.331s]
    writing 'boot'...
    OKAY [ 2.381s]
    sending 'system' (146598 KB)...
    OKAY [ 89.414s]
    writing 'system'...
    OKAY [119.862s]
    rebooting...

    finished. total time: 215.212s
    我是做完上面這一部

    ReplyDelete
    Replies
    1. (PS: 要特別注意,在螢幕解鎖畫面下,系統很快會進入idle模式,此時只要動一動你的滑鼠,螢幕就會跑出來囉)

      (PS: 第一次開機似乎顯示driver剛初始化無法正確運作,請等到他完成初始化後,再重新開機就可以正確進入)

      你可以查看一下putty吐出來的資訊是什麼,這樣比較能夠知道原因

      Delete
  14. 那這時候可以重新開機嗎? POWER ON OFF有影響嗎?

    ReplyDelete
    Replies
    1. 隨時都可以重開機,直接拔掉重插電源,或是按reset按鈕都可

      Delete
  15. 如果還是沒有畫面
    請問怎麼辦

    ReplyDelete
    Replies
    1. 怎麼辦? 我也不知道阿呵呵...

      詢問之前請先提供你的debugging message

      Delete
  16. root@leo:/home/leo/projects/android-ics/out/host/linux-x86/bin# ./fastboot oem format
    ...
    OKAY [ 0.395s]
    finished. total time: 0.395s
    root@leo:/home/leo/projects/android-ics/out/host/linux-x86/bin# ./fastboot flash xloader /home/leo/projects/android-ics/device/ti/panda/xloader.bin
    sending 'xloader' (23 KB)...
    OKAY [ 0.007s]
    writing 'xloader'...
    OKAY [ 0.238s]
    finished. total time: 0.244s
    root@leo:/home/leo/projects/android-ics/out/host/linux-x86/bin# ./fastboot flash xloader /home/leo/projects/android-ics/device/ti/panda/bootloader.bin
    sending 'xloader' (161 KB)...
    OKAY [ 0.015s]
    writing 'xloader'...
    FAILED (remote: image too large for partition)
    finished. total time: 0.018s
    root@leo:/home/leo/projects/android-ics/out/host/linux-x86/bin# ./fastboot flash xloader /home/leo/projects/android-ics/device/ti/panda/bootloader.bin
    sending 'xloader' (161 KB)...
    OKAY [ 0.015s]
    writing 'xloader'...
    FAILED (remote: image too large for partition)
    finished. total time: 0.018s
    root@leo:/home/leo/projects/android-ics/out/host/linux-x86/bin# ./fastboot oem format
    ...
    OKAY [ 0.265s]
    finished. total time: 0.265s
    root@leo:/home/leo/projects/android-ics/out/host/linux-x86/bin# ./fastboot flash xloader /home/leo/projects/android-ics/device/ti/panda/xloader.bin
    sending 'xloader' (23 KB)...
    OKAY [ 0.006s]
    writing 'xloader'...
    OKAY [ 0.238s]
    finished. total time: 0.244s
    root@leo:/home/leo/projects/android-ics/out/host/linux-x86/bin# ./fastboot flash xloader /home/leo/projects/android-ics/device/ti/panda/bootloader.bin
    sending 'xloader' (161 KB)...
    OKAY [ 0.015s]
    writing 'xloader'...
    FAILED (remote: image too large for partition)
    finished. total time: 0.018s
    root@leo:/home/leo/projects/android-ics/out/host/linux-x86/bin# ./fastboot devices
    6A42000200000001 fastboot
    root@leo:/home/leo/projects/android-ics/out/host/linux-x86/bin# ./fastboot erase cache
    erasing 'cache'...
    OKAY [102.906s]
    finished. total time: 102.906s
    root@leo:/home/leo/projects/android-ics/out/host/linux-x86/bin# ./fastboot flash userdata
    sending 'userdata' (10504 KB)...
    OKAY [ 0.575s]
    writing 'userdata'...
    OKAY [ 4.730s]
    finished. total time: 5.306s
    root@leo:/home/leo/projects/android-ics/out/host/linux-x86/bin# ./fastboot flashall
    --------------------------------------------
    Bootloader Version...: U-Boot 1.1.4-gedeced79
    Baseband Version.....:
    Serial Number........: 6A42000200000001
    --------------------------------------------
    checking product...
    OKAY [ 0.001s]
    sending 'boot' (3774 KB)...
    OKAY [ 0.206s]
    writing 'boot'...
    OKAY [ 1.721s]
    sending 'system' (146946 KB)...
    OKAY [ 7.822s]
    writing 'system'...
    OKAY [ 58.024s]
    rebooting...

    我發現有一部FAIL
    root@leo:/home/leo/projects/android-ics/out/host/linux-x86/bin# ./fastboot flash xloader /home/leo/projects/android-ics/device/ti/panda/bootloader.bin
    sending 'xloader' (161 KB)...
    OKAY [ 0.015s]
    writing 'xloader'...
    FAILED (remote: image too large for partition)
    finished. total time: 0.018s
    請問怎麼解決?換一張記憶卡嗎還是版子有問題?

    ReplyDelete
    Replies
    1. SDCARD太小?

      我是用4G的SDCARD,官方說明文件也說要4G

      Delete
    2. ./fastboot flash xloader /home/leo/projects/android-ics/device/ti/panda/bootloader.bin

      單純指令下錯
      xloader => bootloader.bin ??

      ./fastboot flash xloader android_ICS/device/ti/panda/xloader.bin
      ./fastboot flash bootloader android_ICS/device/ti/panda/bootloader.bin

      Delete
  17. 我也是用4G的 還有什麼要注意的嗎?

    ReplyDelete
  18. 請問燒是透過USB去燒錄嗎
    還是透過RS232轉USB的那一條

    ReplyDelete
  19. 有什麼辦法可以檢查SD CARD裡面有沒有資料或是版子是不是好的?

    ReplyDelete
  20. 我把記憶卡放到UBUNTU裡面去看我發現有資料
    但是畫面就是看不到
    我用HDMI轉DVI或是兩邊都是HDMI接到我的螢幕
    都是黑畫面
    請問街道HDMI會有出現什麼嗎
    我之前還有出現解析度的訊息但是是黑畫面
    現在就只有黑畫面
    請問有解決的方法嗎? 感謝!!

    ReplyDelete
  21. 我用putty 抓
    開機的資訊有一推的Fail
    主要是
    PVR_K:(ERROR): BridgeDispatchKM: Initialisation failed. Driver unusable. [4811, driver/gpu/pvr/bridge_pvr_bridge.c]

    ReplyDelete
  22. 你方便幫我燒一張4G的SD卡嗎
    我在轉帳給你

    ReplyDelete
  23. 請問燒好SD卡以後怎麼增加帳號
    還有SD卡的空間怎麼讓它變大
    我用8G的卡但是空間只有500MB

    ReplyDelete
  24. 大哥您好:
    請教您,我有做到$ make fastboot,這個步驟,但是出現以下訊息,

    ============================================
    PLATFORM_VERSION_CODENAME=AOSP
    PLATFORM_VERSION=4.0.9.99.999.9999.99999
    TARGET_PRODUCT=full
    TARGET_BUILD_VARIANT=eng
    TARGET_BUILD_TYPE=release
    TARGET_BUILD_APPS=
    TARGET_ARCH=arm
    TARGET_ARCH_VARIANT=armv7-a
    HOST_ARCH=x86
    HOST_OS=linux
    HOST_OS_EXTRA=Linux-3.2.0-30-generic-x86_64-with-Ubuntu-12.04-precise
    HOST_BUILD_TYPE=release
    BUILD_ID=OPENMASTER
    OUT_DIR=out
    ============================================
    build/core/base_rules.mk:516: dalvik/dx/junit-tests/Android.mk: Module "dx-tests" has useless module tags: tests. It will be installed anyway.
    build/core/base_rules.mk:516: libcore/Android.mk: Module "core-tests-hostdex" has useless module tags: tests. It will be installed anyway.
    find: ‘src’: 沒有此一檔案或目錄
    *** Overlay change detected, clean shared intermediate files...
    *** rm -rf out/target/common/obj/APPS/framework-res_intermediates
    PRODUCT_COPY_FILES frameworks/base/data/sounds/effects/ogg/Effect_Tick.ogg:system/media/audio/ui/Effect_Tick.ogg ignored.
    PRODUCT_COPY_FILES frameworks/base/data/sounds/effects/ogg/KeypressStandard.ogg:system/media/audio/ui/KeypressStandard.ogg ignored.




    PRODUCT_COPY_FILES frameworks/base/data/sounds/ringtones/ogg/Solarium.ogg:system/media/audio/ringtones/Solarium.ogg ignored.
    make: Nothing to be done for `fastboot'.
    root@ubuntu12:/home/ubuntu/android-ics#

    請問是否哪邊出錯了,謝謝您。

    ReplyDelete
  25. Sorry 補充:

    out/target/common/obj/APPS/framework-res_intermediates
    /APPS/ 底下並沒有 framework-res_intermediates

    ReplyDelete
  26. 您好~想請問一下~怎麼把u-boot寫進SD卡??我是超級新手~光寫進SD卡這個程序我就搞不太懂了~看官網跟大家分享的資訊~也不是很懂~目前我寫的方法是用http://ldsrc.blogspot.tw/2012_05_01_archive.html這位版大的方法~只是第二步驟一直失敗~可以開機~但畫面是歪的~而這個方法跟直接把u-boot寫進SD卡似乎也不太一樣??我現在需要的是使用MLO、u-boot、uImages寫進SD卡....麻煩版大指導一下了Orz

    ReplyDelete