Android gingerbread eMMC booting

转载 2012年03月28日 16:31:47
Construction Icon small.png This page is currently under construction. The content of this page is due to change quite frequently and thus the quality and accuracy are not guaranteed until this message has been removed. Please feel free to contribute to this page while construction is in progress.


Contents

 [hide]

Introduction

  • AM37xevm has on board NAND and MMC interface.Either interface can be used for booting a system.
    • NAND boot is raw boot, as it reads raw data and manipulate it.
    • MMC boot is FAT boot, as it reads file from mmc sector and manipulated it.
    • eMMC boot can be FAT boot or raw boot.
  • MMC and NAND boot is already supported by android devkit releases available at http://arowboat.org
  • This wiki highlights on
    • Adding eMMC support for fastboot
    • Updating images to eMMC over fastboot
    • eMMC boot
  • Wiki will also act as porting guide to port eMMC support on other platforms.

NoteNote: All patches described in this documents are validated on Texas Intruments's AM37xevm board.

What is eMMC?

eMMC describes an architecture consisting of an embedded storage solution with MMC interface, flash memory and controller.In one line it is a flash/nand over MMC interface.

The OMAP processor follows a 2 stage boot process. Details on the boot procedure can be found at the [boot sequence] page.

What is fastboot?

  • Fastboot is the method that android uses to flash the android build onto the target.
  • Fastboot protocol specification is found HERE
  • Fastboot speeds up your development NOT the time it takes to boot.
  • Also,fastboot is used to updated x-loader,bootloader,kernel,systemfs,userdata etc. by oem

eMMC layout

  • In the discussion that follows, “sector” refers to a 512-byte disk sector, addressed by its Logical Block Address (LBA). Although the UEFI specs allow for disk sectors of other sizes, in practice 512 bytes is the norm.

Protective master boot record

The master boot record is the first sector on the hard drive (LBA 0). As mentioned above, legacy BIOSes will boot from this sector. To protect the GUID partitions on the drive from legacy OSes, the MBR partition table normally contains a single partition entry of type 0xEE, filling the entire drive.

GUID Partition Table (GPT)

The second sector (LBA 1) contains the primary GPT header, followed immediately by 16K (32 sectors) of the primary GUID Partition Entry Array. In conformance with the EFI spec, another copy of these data should be located at the end of the disk as well, with the secondary GPT header in the last accessible sector and the secondary GUID Partition Entry Array immediately preceding it.In current implementation secondary GPT is not included.

eMMC partition layout

  • GPT allows a large number of partitions on a drive.Choosing a parition scheme may vary across oem vendor.Partition scheme described here is most choosen by oem for mobile/handheld device.
Partition# Name# Size# Strat LBA-End LBR Description#
0 MBR & GPT   0x00000000-0x000000FF Master Boot Record and GUID Partition Table
1 x-loader(MLO) 256KB 0x00000100-0x000001FF First stage bootloader
2 bootloader(u-boot.bin) 384KB 0x00000200-0x000005FF Second stage bootloader
3 misc 128KB 0x00000600-0x000006FF Reserved.This partition can be used for internal purpose
4 recovery (zImage + recovery-ramdisk.img) 8MB 0x00000A00-0x000049FF recovery partition
5 boot (boot.img = zImage + ramdisk.img) 8MB 0x00004A00-0x000089FF Partition contains kernel + ramdisk images.
6 system (system.img) 256MB 0x00008A00-0x000889FF android file system
7 cache (cache.img) 32MB 0x00088A00-0x000989FF Partition will be used to store application cache
8 userdata (userdata.img) 32MB 0x00098A00-0x000A89FF Partition contains userdata supplied by oem vendor like configuration files,utilities etc..
9 media Remaining 0x000A8A00-0x00762761 Partition contains media files; supplied by oem vendor


Fastboot flowchart

Fastboot flowchart.png

Adding a support on am37xevm for eMMC fastboot update

Download patches for x-loader,u-boot and kernel

  • Download patch files from [HERE]
/* go to user directory */
$cd <MY_DIR>
/* extract downloader patch files */
$tar -xzvf EMMC_patch_rev01.tar.gz

x-loader build

  • Download source(if it is not downloaded) and apply patch
/* download x-loader source if not available */
$git clone git://gitorious.org/rowboat/x-loader.git
$cd x-loader

/* checkout mentioned commit id */
$git checkout e6e39e34104f28b8bd62307971ab89e736cb9388

/* apply patch for raw boot */
$git am <MY_DIR>/EMMC_patch_rev01/x-loader/0001-eMMC-raw-boot-support-is-added.patch
  • Build x-loader
$make CROSS_COMPILE=arm-eabi- distclean
$make CROSS_COMPILE=arm-eabi- omap3evm_config
$make CROSS_COMPILE=arm-eabi-

This command will build the x-loader Image "x-load.bin" To create the MLO file used for booting from a MMC/SD card, sign the x-loader image using the signGP tool found in the Tools/signGP directory of the Devkit.

Note: you will need to copy the signGP tool from the Tools/signGP directory to the directory that contains the x-load.bin file $ ./signGP ./x-load.bin

The signGP tool will create a .ift file, rename the x-load.bin.ift to MLO $ mv x-load.bin.ift MLO

  • Append eMMC raw header
$dd if=<eMMC_raw_header> of=./MLO.final
$dd if=<MLO-Path>/MLO of=./MLO.final conv=notrunc oflag=append

u-boot build

  • Download source(if it is not downloaded)and apply patch
/* download u-boot source if not available */
$git clone git://gitorious.org/rowboat/u-boot.git
$cd u-boot

/* checkout mentioned commit id */
$git checkout 81c20af53410ac7201ee18de66579b758c94c970

/* apply patches for eMMC and fastboot updat*/
$git am <MY_DIR>/EMMC_patch_rev01/u-boot/0001-GPT-partition-creation.patch
$git am <MY_DIR>/EMMC_patch_rev01/u-boot/0002-fastboot-support-for-eMMC-partition.patch
$git am <MY_DIR>/EMMC_patch_rev01/u-boot/0003-eMMC-raw-boot-support-is-added.patch
  • Build u-boot
$make CROSS_COMPILE=arm-eabi- distclean
$make CROSS_COMPILE=arm-eabi- omap3_evm_config
$make CROSS_COMPILE=arm-eabi- 

kernel build

  • Download source(if it is not downloaded)and apply patch
/* download u-boot source if not available */
$git clone git://gitorious.org/rowboat/kernel.git
$cd kernel

/* checkout mentioned commit id, branch is:rowboat-kernel-2.6.37 */
$git checkout 1a12433ffdd56a2b87504b3fe5efdcb924c90553

/* apply patches for EFI and ext4 file system support*/
$git am <MY_DIR>/EMMC_patch_rev01/kernel/0001-enabling-ext4-and-EFI-file-system-support.patch
  • Build kernel
$make ARCH=arm CROSS_COMPILE=arm-eabi- distclean
$make ARCH=arm CROSS_COMPILE=arm-eabi- omap3_evm_android_defconfig
$make ARCH=arm CROSS_COMPILE=arm-eabi- uImage

buid android file system

  • Follow build step given at#[HERE]

Prepare Images

boot.img

$mkdir <YOUR_PATH>/images
$cd <YOUR_PATH>/images
$cp <ANDROID_SOURCE>/kernel/arch/arm/boot/zImage .
  • Update init.rc file and rebuit images
  • Add following lines to <ANDROID_SOURCE>/out/target/product/omap3evm/root/init.rc
on fs
    mount ext4 /dev/block/mmcblk0p6 /system wait ro
    mount ext4 /dev/block/mmcblk0p8 /data wait noatime nosuid nodev
    mount ext4 /dev/block/mmcblk0p7 /cache wait noatime nosuid nodev
  • Rebuilt images
$cd <ANDROID_SOURCE>
$find out/target/product/omap3evm -name *.img -exec rm -f {} \;
$make TARGET_PRODUCT=omap3evm OMAPES=5.x
  • Prepare boot.img
$cp <ANDROID_SOURCE>/out/target/product/omap3evm/ramdisk.img .
$cp <ANDROID_SOURCE>/out/host/linux-x86/bin/mkbootimg .
$./mkbootimg --kernel zImage --ramdisk ramdisk.img --base 0x80000000 --cmdline "console=ttyO0,115200n8 androidboot.console=ttyO0 mem=256M root=/dev/ram0 rw initramfs=0x81000000,8M init=/init ip=off omap_vout.vid1_static_vrfb_alloc=y vram="2M" omapfb.vram=0:2M" -o boot.img

system.img

$cd <YOUR_PATH>/images
/* creating 250MB, it can be configure as per need */
$dd if=/dev/zero of=./system.img bs=1M count=250
$mkfs.ext4 system.img
$mkdir mnt-point
$sudo mount -t ext4 -o loop system.img mnt-point/
$cp -rfp <ANDROID_SOURCE>/out/target/product/omap3evm/system/* mnt-point/
$sudo umount mnt-point

userdata.img

$cd <YOUR_PATH>/images
/* creating 30MB, it can be configure as per need */
$dd if=/dev/zero of=./userdata.img bs=1M count=30
$mkfs.ext4 userdata.img
$sudo mount -t ext4 -o loop userdata.img mnt-point/
$cp -rfp <ANDROID_SOURCE>/out/target/product/omap3evm/data/* mnt-point/
$cp -rfp <ANDROID_SOURCE>/out/target/product/omap3evm/root/data/* mnt-point/
$sudo umount mnt-point

cache.img

$cd <YOUR_PATH>/images
/* creating 30MB, it can be configure as per need */
$dd if=/dev/zero of=./cache.img bs=1M count=30
$mkfs.ext4 cache.img

Using Fastboot

Creating the GPT table on eMMC and flash raw images

  • Create mmc card for FAT boot mentioned at HERE
On Target
  1. Connect target to host machine using USB cable.Connect USB cable to OTG port on target
  2. Boot target with a stock u-boot and MLO
  3. Prompt at u-boot and enter following command
 
#fastboot
Fastboot entered...
On Host Machine
/* locate fastboot in android filesystem */
$cd <ANDROID_SOURCE>/out/host/linux-x86/bin/

/* search for fastboot devices */
$./fastboot devices

/* create GPT table on eMMC/SD card */
$./fastboot oem format

/* flash all partitions: ./fastboot flash <name> <binary> */

/* flash xloader */
$./fastboot flash xloader ./MLO.final

/* flash bootloader */
$./fastboot flash bootloader ./u-boot.bin

/* flash boot image */
$./fastboot flash boot ./boot.img

/* flash file system - system image */
$./fastboot flash system ./system.img

/* flash user data */
$./fastboot flash userdata ./userdata.img

/* flash cache partition */
$./fastboot flash cache ./cache.img

/* reboot target */
$./fastboot reboot

How to change GPT configuration

  • GPT configuration has been defined in "<ANDROID_PATH>/u-boot/board/ti/evm/mmc.c" as below. Kindly change as per need
static struct partition partitions[] = {
    { "-", 128 },
    { "xloader", 128 },
    { "bootloader", 512 },
    /* "misc" partition is required for recovery */
    { "misc", 128 },
    { "-", 384 },
    { "recovery", 8*1024 },
    { "boot", 8*1024 },
    { "system", 256*1024 },
    { "cache", 32*1024 },
    { "userdata", 32*1024},
    { "media", 0 },
    { 0, 0 },
};

Technical Support and Product Updates

For further information or to report any problems, contact
http://e2e.ti.com/android
http://support.ti.com

For community support join
http://groups.google.com/group/rowboat
For IRC #rowboat on irc.freenode.net


相关文章推荐

Android eMMC Booting

Android eMMC Booting Contents  [hide] 1 eMMC binaries 1.1 Creating the GPT...

android booting分析

  • 2012年12月09日 15:08
  • 870KB
  • 下载

Android: How to Capture Screen in Gingerbread(2.3中实现截屏)

示例代码在: frameworks\base\services\surfaceflinger\tests\screencap\screencap.cpp /* * Copyright (...

android booting分析

  • 2011年12月18日 23:22
  • 1.5MB
  • 下载

ubuntu 下载编译运行android source code--gingerbread

1. 编译环境配置 参考来源: http://source.android.com/source/initializing.html 或是网上google。 usb部分我是这么配置的: 执行ls...
  • yc0188
  • yc0188
  • 2012年02月24日 14:32
  • 2591

如何在ubuntu下下载姜饼(Gingerbread)源代码并编译android ROM

Android源代码由两部分组成,其一是Android系统应用部分的代码,其次是Android所使用的内核代码, 由于公司是针对Google nexus s来开发rom,所以需要下载三星的内核代码 ...

在 VMWare 7.1.2 + Ubuntu 11.10(32位)中,编译 Android 2.3.7 (gingerbread) 源码 (Anroid Open Source Project)

在 VMWare 7.1.2 + Ubuntu 11.10(32位)中,编译 Android 2.3.7 (gingerbread) 源码 (官方 Anroid Open Source Project...

在TI-Omap3530上移植Android GingerBread 2.3.4

实现功能:在Devkit8000开发板上实现android环境运行 开发板:TI-OMAP3530,以及其他配件,容量大的SD卡一张 运行环境:ubuntu10.04; 1.接下来要下载源码,由...
  • BENKG
  • BENKG
  • 2012年02月11日 17:54
  • 4026
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android gingerbread eMMC booting
举报原因:
原因补充:

(最多只允许输入30个字)