将Android移植到ODroid上

如果你只是用prebuilt版的,那么直接去网站上下载个img,然后刻到SD卡上就好了

img下载地址:http://com.odroid.com/sigong/nf_file_board/nfile_board.php?tag=ODROID-PC

做启动盘的命令:

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

但是,大多数时候,这个img只能将linux核启动起来,却没有画面,我是说,在HDMI输出到显示器上的画面。

如果你需要有自己的内核或者android,希望掌控所有的事情,就需要你自己下载代码编译了。

去网站上下载对应平台的Android源码,我的是DDroid-PC,因此下载地只是:

http://com.odroid.com/sigong/nf_file_board/nfile_board_view.php?keyword=&tag=ODROID-PC&bid=111

注意这个网站还告诉你了应用这些源码的方法的网站,自己找一下把。

这个包中有你要的Android Source Code、kernel Source Code和Uboot Source Code,

有些平台对应的包中是没有Uboot Source Code的,得另外下载

要好长时间才能下载完成,先干其他事情吧。

源码下载完成之后,我们正是开始源码编译之路。。。

参考网站:http://dev.odroid.com/projects/ics/

这个网站上,有很详细的步骤解释,针对各个平台的都有,这里我只摘选出针对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

参考网站:http://dev.odroid.com/projects/howtobuild4

你需要配置好这个网页中所说的所有的环境,这样会给你将来的编译过程减少不少麻烦,

否则,编译的过程是比较痛苦的。因为我之前移植过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!


你可能感兴趣的:(linux,android,cmd,Flash,System)