1. 程式人生 > >將Android移植到ODroid上

將Android移植到ODroid上

如果你只是用prebuilt版的,那麼直接去網站上下載個img,然後刻到SD卡上就好了

做啟動盤的命令:

$sudo dd if=*.odt out=/dev/sdb bs=4096

但是,大多數時候,這個img只能將linux核啟動起來,卻沒有畫面,我是說,在HDMI輸出到顯示器上的畫面。

如果你需要有自己的核心或者android,希望掌控所有的事情,就需要你自己下載程式碼編譯了。

去網站上下載對應平臺的Android原始碼,我的是DDroid-PC,因此下載地只是:

注意這個網站還告訴你了應用這些原始碼的方法的網站,自己找一下把。

這個包中有你要的Android Source Code、kernel Source Code和Uboot Source Code,

有些平臺對應的包中是沒有Uboot Source Code的,得另外下載

要好長時間才能下載完成,先幹其他事情吧。

原始碼下載完成之後,我們正是開始原始碼編譯之路。。。

這個網站上,有很詳細的步驟解釋,針對各個平臺的都有,這裡我只摘選出針對ODroid-PC平臺的

步驟一:

編譯Uboot,我下載的是uboot-4210

因此,編譯命令如下:

# cd uboot
# make distclean       --> This is only used to clean up files from the source code
# make smdkv310_config --> common use for ODROID-A, ODROID-PC, ODROID-A4
# make ARCH=arm CROSS_COMPILE=arm-none-eabi-
步驟二:

編譯Linux kernel核心

同樣,選擇和你平臺相符的編譯命令,我的是ODroid-PC,因此:

# make ARCH=arm odroid_pc_defconfig ====> ODROID-PC
Let's start compile !
# make ARCH=arm CROSS_COMPILE=arm-none-eabi-
其中,CROSS_COMPILE是你的交叉編譯工具的絕對路徑比如我的是:
CROSS_COMPILE=/opt/toolchains/arm-2010q1/bin/arm-none-eabi-
當然,你可以不用每次都指定引數,而直接修改Makefile。

步驟三:

編譯Android

你需要配置好這個網頁中所說的所有的環境,這樣會給你將來的編譯過程減少不少麻煩,

否則,編譯的過程是比較痛苦的。因為我之前移植過pandaboard,因此,環境基本上已經

配置好了(一直pandaboar的經驗在移植ODroid過程中是很有用的)。我略過了adb的安裝,因為之前已經裝過了。

在配置好了所有的環境,獲得了所需原始碼之後,現在,終於可以開始編譯了:

== odroid - PC ==
# cd ~/mydroid/android
# mydroid/android$
# chmod u+x ./build_android.sh
# ./build_android.sh odroidpc
這個過程中可能會遇到很多問題,特別是如果你的環境沒有配置好的話,但是,GOOGLE能解決的。

編譯成功:

ok sucess !!!


步驟四:

製作啟動盤:
現在你有了uboot,有了Android,有了Linux Kernel,你需要做的就是將這些東西寫進SD卡中,也就是,

做成個啟動盤。

1.燒寫bootloader

(1)將u-boot映象燒入SD卡

將SD卡插入host PC

# cd uboot  ====>你的uboot資料夾
# cd sd_fuse
# make
# ./c210-fusing.sh /dev/sdc

Note : /dev/sdc is your micro-sd card device node.

(2)在ODrodid上啟動u-boot

將SD卡插入到ODroid中

OK

U-Boot 2010.12-svn (Mar 13 2012 - 16:50:29) for EXYNOS4210


CPU: S5PC210 [Samsung SOC on SMP Platform Base on ARM CortexA9]
APLL = 1000MHz, MPLL = 800MHz
EVT1 POP_B
DRAM:  1 GiB


Checking Boot Mode ... SDMMC
MMC Device 0: 7887 MB
MMC Device 1 not found
Net:   No ethernet found.
Hit any key to stop autoboot:  0 
EXYNOS4 # 

這個地方要小心,一定要趕在SD卡auto boot 之前,敲擊一下鍵盤,不然,ODroid會自動啟動,但是由於沒有OS,因此整個板子就卡住了

2.燒寫kernel

(1)將SD卡分割槽

EXYNOS4 # fdisk -c 0
fdisk is completed

partion #    size(MB)     block start #    block count    partition_Id 
   1          6067          3573060        12426660          0x0C 
   2           517           142290         1059270          0x83 
   3          1026          1201560         2102730          0x83 
   4           131          3304290          268770          0x83 
EXYNOS4 # 

(2)將分割槽格式化

EXYNOS4 # fatformat mmc 0:1
Start format MMC&d partition&d ...
Partition1: Start Address(0x368544), Size(0xbd9da4)
size checking ...
Under 8G
write FAT info: 32
Fat size : 0x2f67
Erase FAT region.......................................................................
.....................................
Partition1 format complete.
EXYNOS4 # 

(3)進入到fastboot模式

EXYNOS4 # fastboot
[Partition table on MoviNAND]
ptn 0 name='fwbl1' start=0x0 len=N/A (use hard-coded info. (cmd: movi))
ptn 1 name='bl2' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 2 name='bootloader' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 3 name='tzsw' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 4 name='kernel' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 5 name='ramdisk' start=N/A len=0x1000000(~16384KB) (use hard-coded info. (cmd: movi))
ptn 6 name='system' start=0x457A400 len=0x20538C00(~529635KB) 
ptn 7 name='userdata' start=0x24AB3000 len=0x402B9400(~1051365KB) 
ptn 8 name='cache' start=0x64D6C400 len=0x833C400(~134385KB) 
ptn 9 name='fat' start=0x6D0A8800 len=0x7B3B4800(~2019026KB) 
OTG cable Connected!

(4)將USB OTG線連線好之後,就可以將核心的二進位制檔案燒寫到ODroid了:
# cd kernel
# fastboot flash kernel arch/arm/boot/zImage
sending 'kernel' (3898 KB)...
OKAY [  0.609s]
writing 'kernel'...
OKAY [  1.518s]
finished. total time: 2.127s
#
fastboot在哪兒呢?你編譯好的android資料夾下有out資料夾,在這個資料夾下找:

android/out/host/linux-x86/bin/fastboot

Ok,找到了fastboot,可以使用了。

如果這個地方出現了<waiting for device>的資訊,那麼:

(1)確認你現在是root使用者,燒寫過程中用的都是root使用者

(2)如果你是root使用者,請嘗試

          http://stackoverflow.com/questions/7641939/android-fastboot-waiting-for-devices

          中的解決方案。

(3)檢查一下你的USB線

1)是否能夠正常傳輸

2)USB線不易過長,否則末端電壓不夠,導致裝置無法識別。


完成上述步驟之後,Linux Kernel就成功燒入ODroid了。

3.將Android燒入ODroid

(1)ODroid

進入fastboot模式

EXYNOS4 # fastboot
[Partition table on MoviNAND]
ptn 0 name='fwbl1' start=0x0 len=N/A (use hard-coded info. (cmd: movi))
ptn 1 name='bl2' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 2 name='bootloader' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 3 name='tzsw' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 4 name='kernel' start=N/A len=N/A (use hard-coded info. (cmd: movi))
ptn 5 name='ramdisk' start=N/A len=0x1000000(~16384KB) (use hard-coded info. (cmd: movi))
ptn 6 name='system' start=0x457A400 len=0x20538C00(~529635KB) 
ptn 7 name='userdata' start=0x24AB3000 len=0x402B9400(~1051365KB) 
ptn 8 name='cache' start=0x64D6C400 len=0x833C400(~134385KB) 
ptn 9 name='fat' start=0x6D0A8800 len=0x7B3B4800(~2019026KB) 
OTG cable Connected!


(2)userdata & cache partition format (Host PC)

# cd android
# fastboot -w
erasing 'userdata'...
OKAY [ 10.606s]
erasing 'cache'...
OKAY [  3.370s]
finished. total time: 13.977s
#
(3)Flash RAM disk image and Android images (Host PC)
# cd android
# fastboot flash ramdisk out/target/product/$(PRODUCT_NAME)/ramdisk-uboot.img
sending 'ramdisk' (322 KB)...
OKAY [  0.059s]
writing 'ramdisk'...
OKAY [  0.445s]
finished. total time: 0.504s
#
# fastboot flash system out/target/product/$(PRODUCT_NAME)/system.img
sending 'system' (161724 KB)...
OKAY [ 24.831s]
writing 'system'...
OKAY [ 34.734s]
finished. total time: 59.565s
#
# fastboot reboot
到此,你已成功的完成了所有步驟,Enjoy it!