Top Banner
Porting Android to Beagleboard Anish Dhanekula Karl Arndt
27
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard

Anish Dhanekula

Karl Arndt

Page 2: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 2

What is Android?

• Linux-based Operating System for Mobile Devices

• Developed by Android, Inc.– Acquired by Google

• Open-Source, under Apache License– Proprietary extensions developed by vendors

don’t have to be submitted back to open-source commnunity

Page 3: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 3

What is Android?

• Modified Linux Kernel– Éclair (Android v2.0/2.1) based on 2.6.29

• Filesystem– Uses the Bionic C Library instead of glibc– Dalvik Java Virtual Machine

• Is it really Linux?– Sort of… Definitely Linux kernel, but not a

traditional userspace

Page 4: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 4

What is Android?

Page 5: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 5

What’s a Beagleboard?

Page 6: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 6

What’s a Beagleboard?

• OMAP 3530– TI SoC with ARM Cortex A8 and 64x DSP

• SDRAM and Flash on-package with Package-on-Package (PoP)

Page 7: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 7

What’s a Beagleboard?

• Peripherals– SD/MMC Socket for Storage– DVI-D and S-Video– Stereo In and Out– USB– Serial

• Bootloader– U-Boot comes loaded on the PoP Flash

Page 8: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 8

Porting Process

• Get Android Source– Kernel and Filesystem

• Prove it can work• Modify Kernel files as necessary to work with

Beagleboard• Compile• Write to SD Card• Try to Boot• Doesn’t work – pray that your Beagleboard gets stolen

while you grab dinner• Fix Kernel Boot Errors• Repeat

Page 9: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 9

‘Git’ing Android Source

• Kernel – android.git.kernel.org– OMAP tree

• Filesystem – source.android.com– We used a prebuilt filesystem known to work

on Beagleboard in order to focus on the kernel

• Git– Source management tool

Page 10: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 10

Storage Format

• Kernel and Filesystem need to be stored in a particular way on the SD Flash

• Two Partitions– FAT32 Boot Partition

• Holds U-Boot update and compressed Kernel Image (uImage)

– EXT3 Filesystem Partition• Holds the complete root filesystem

Page 11: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 11

Early Boot Process

• OMAP PoP Flash comes with U-Boot, but needs to be replaced on boot– The PoP Flash U-Boot knows to attempt to

boot from the SD Flash first, and when it does it finds the updated U-Boot

• Environment variables must be set to boot properly

– setenv bootcmd ‘mmc init; fatload mmc 0 84000000 uImage; bootm 84000000’– setenv bootargs 'mem=128M androidboot.console=ttyS2 console=tty0

console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw init=/init

Page 12: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 12

Prove it can Work

• Rowboat– Someone has already ported Android to Beagleboard– Confirmed that this distribution works on our board

Page 13: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 13

Compiling the Kernel

• Since the kernel is being compiled on an x86 host for an ARM target, cross-compiling is necessary

• The arm-eabi toolchain is used for this– Included in the Android Filesystem Source

• make ARCH=arm CROSS_COMPILE=/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi uImage –j4

• uImage is the compressed Kernel Image• -j4 tells Make it can use 4 threads (two per CPU

on a dual-core machine

Page 14: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 14

Modifying Kernel Source

• Create the .config file– make defconfig– make ARCH=arm defconfig– make ARCH=arm omap3_beagle_defconfig

• Edit .config to include all necessary settings and modules– make ARCH=arm menuconfig

Page 15: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 15

Modifying Kernel Source• menuconfig

Page 16: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 16

Modifying Kernel Source

• .config– Compilation parameters are chosen

• Particular implementation of an architecture

– Drivers are chosen• Must determine the correct drivers for your

SoC/Board and include them here• Drivers can be included as built-in or modular

Page 17: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 17

Modifying Kernel Source

• .config – selecting the right drivers– Real Time Clock

• Real Time Clock initialization was failing on kernel boot

• Found that the Beagle uses a TWL4030 I2C RTC Controller

• Had to enable I2C, TWL Core, and TWL4030 Drivers

Page 18: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 18

Modifying Kernel Source

• .config – selecting the right drivers– MMC/SD

• Filesystem is stored on SD card• Found correct driver by sorting through Angstrom

Linux running on the Beagleboard

Page 19: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 19

Modifying Kernel Source

• Correct Drivers are chosen, but Kernel won’t boot…

• Need to dig into actual Kernel Source and Boot Process

Page 20: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 20

Modifying Kernel Source

• Kernel Boot Process– Run code from /arch/arm/mach-omap2 to

initialize devices– Run /init/main.c to mount the root filesystem– Once the root filesystem is mounted, run /init

(or whatever is specified to U-Boot) as the first process

Page 21: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 21

Modifying Kernel Source

• RTC is initialized now, but Kernel Boot still hangs– “Waiting for root device /dev/mmcblk0p2…”– This message was found in /init/do_mounts.c

• Called in /init/main.c• While loop continuously polling

– Device_probe_done()– name_to_dev_t()

Page 22: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 22

Modifying Kernel Source

• One of the routines is not completing– Traversed name_to_dev_t() with printk

• Seems to work fine

– Difficult to traverse name_to_dev_t()• Decided to look through initial device initialization

code in /arch/arm/mach-omap2 and SD driver in /drivers/mmc/host/omap_hsmmc.c

Page 23: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 23

Modifying Kernel Source

• /arch/arm/mach-omap2/board-omap3beagle– Several __init statements

• omap3_beagle_init– Calls omap3beagle_flash_init

– This is where the devices are initialized during bootup, but we can’t find anything wrong…

Page 24: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 24

Next Steps

• Hard-coded device names

Page 25: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 25

Things we would do differently

• Spend less time modifying the .config file and more time on the kernel source itself

• Maybe try Network File System (NFS) to store the Filesystem

Page 26: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 26

References

• Linux Kernel in a Nutshell– Greg Kroah-Hartman

• Linux from Scratch– Gerard Beekmans

• code.google.com/p/beagleboard/wiki• code.google.com/p/rowboat/wiki• source.android.com• android.git.kernel.org• www.beagleboard.com

Page 27: Porting Android to Beagleboard Anish Dhanekula Karl Arndt.

Porting Android to Beagleboard 27

Questions?