將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!