BBBAndroid: AOSP 4.4.4 (KitKat) with 3.8 kernel

Hello all. I have released a new port of Android for the BBB. This version uses AOSP 4.4.4 (KitKat) and the 3.8 Linux kernel. I have made build instructions and a pre-made image available at I use a combination of AOSP repos and Rowboat build scripts, and I have a few custom repos for the kernel, bootloader, and additional “external” tools (such as i2c-tools). You can view the repo manifest XML file for the project here:

Because this Android image uses the 3.8 kernel, you should be able to just plug in your capes and go without any hassle:

Built-in HDMI cape:

4D Systems LCD capes:


CircuitCo LCD capes:


May I ask if ADB over USB is supported in this release? Thanks very much! -lei

USB ADB is currently being worked on. The image I provided builds in FunctionFS support, but I have not yet made the modifications to the .rc files to point ADB to FunctionFS. I’m currently working on a few modifications to the .rc files to make the image a bit more “BBB friendly” for those interested in using it for Android hardware interfacing practice.

I have not made a new premade image with USB ADB, but I have it working. In your current BBBAndroid image, replace your uEnv.txt (/boot partition) with the one I have attached. Replace your two init.genericam33xx*.rc files (/rootfs partition) with the two I have attached. In addition to getting USB ADB up and running, the main .rc file also changes some permissions to make them more relaxed. Now, i2c-tools work without superuser privileges and it “wakes up” all four GPIO banks in case you need to mmap() the GPIO registers.

If you watch the FTDI output from the BBB (when the USB is plugged in at boot), you’ll see something like the following:

[ 5.784087] CAUTION: musb: Babble Interrupt Occurred
[ 5.854604] CAUTION: musb: Babble Interrupt Occurred
[ 6.048723] CAUTION: musb: Babble Interrupt Occurred
[ 6.119724] CAUTION: musb: Babble Interrupt Occurred
[ 6.341756] gadget: high-speed config #1: FunctionFS

On your dev system side, use ADB to list the devices:

$ adb devices
List of devices attached

$ adb logcat

D/AlarmScheduler( 917): No events found starting within 1 week.
I/ActivityManager( 592): Waited long enough for: ServiceRecord{a5fb0900 u0}
D/InitAlarmsService( 917): Clearing and rescheduling alarms.
D/ConnectivityService( 592): Sampling interval elapsed, updating statistics …
D/ConnectivityService( 592): Done.
D/ConnectivityService( 592): Setting timer for 720seconds

init.genericam33xx(flatteneddevicetr.rc (4.27 KB)

init.genericam33xx(flatteneddevicetr.usb.rc (327 Bytes)

uEnv.txt (679 Bytes)

I accidentally attached an incorrect .rc file with some additional testing material in it. I’m attaching the proper one now.

init.genericam33xx(flatteneddevicetr.rc (3.21 KB)

Hi Andrew, I will test it out and let you know the result. Thanks! -lei

Wow great job Andrew! Just ran with this image with ease. Is there anything built in that can be used to flash to eMMC? Any plans to integrate with the SGX drivers for better graphics drivers?

Right now, I don’t have any plans to flash the eMMC. BBBAndroid is currently intended to be a prototyping platform, so I’d prefer to make the entire OS easily removable in case you need to mount it on a different machine and fix any changes that you made to .rc, .dtbo, or .ko files in the rootfs file system. SGX support is planned, as soon as the 3.14/3.17 kernels move a little further along. I plan on moving all of my projects to the newer kernels once all of the features that I need are there.


It seems that the pre-built image size (8,018,460,672 bytes) is slightly larger than a 8G uSD card size (7,939,784,704 bytes Sandisk HC). I had difficulty to write the image to the SD.

Win32DiskImager (under Win7) complains; Image Writer (Ubuntu 12.04) also complains. dd command does not report error. However the BBB did not boot.

Unfortunately I don’t have 16G uSD on hand.
I am in a process creating another virtual machine so I can build from source and remove some packages.

I wonder if I am on the right path and there is some easier way out.



Great work appreciate.
It would be awesome if you can add USB WiFi Support for or Realtek RTL8188CUS Based Device

The suggested Wifi support would be awesome, its a common stack that people can get their hands on easily. ADB over USB would also be greatly appreciated when you publish a new image :slight_smile:

I’ll have to make the next pre-made image a little smaller than the full capacity of my microSD cards because so many of the manufacturers are being very liberal on exactly how many bytes they consider 8GB to be…

I have a Realtek RTL8188CUS USB wifi dongle sitting here (an Edimax EW-7811 of some sort, I believe), so I’ll check into getting it set up for you when I have a few minutes. The kernel modules are actually already sitting in the image, so you should be able to insmod them from within the init.{ro.hardware}.rc file.


Hi Andrew,

I rebuild the BBBAndroid and created my own image. The ADB USB does work after I replaced those (3) files you attached earlier. It is a very good news.
But I did find out that I couldn’t push file thru the ADB push. I tried both the eclipse ADT and command line. Neither works. I’ve got some information like,

E:\Program Files\Android\android-sdk\platform-tools>adb push “init.genericam33xx
(flatteneddevicetr.rc” /init.genericam33xx(flatteneddevicetr.rc
failed to copy ‘init.genericam33xx(flatteneddevicetr.rc’ to ‘/init.genericam33xx
(flatteneddevicetr.rc’: Read-only file system

Another minor issue is that the navigation bar is not shown in the interface. I double checked the images you attached. I couldn’t find navigation bar either. I had same issue with TI’s stock image (Kernel 3.2 based). I added a line to the - init.am335xevm.rc: “setprop lcd.landscape true”, which fixed the problem ( I did the same to the init.generic*.rc file. However it didn’t work this time. I wonder if you know how to bring the navigation bar back.

The “rootfs” filesystem (the / filesystem) is set to read-only once you reach the post-fs phase of boot. This is why you can’t ADB push to it. I’ve been on the fence as to whether I should remount this as read-write, and I suppose that I probably should. Since I’m trying to open up this Android a bit to make it easier for people to experiment with, it is reasonable to do so. It also allows the Windows people who can’t easily mount EXT4 to make changes to their Android system via ADB.

Look at your init.genericam33xx(flatteneddevicetr.rc file at around line 36:

we will remap this as /storage/sdcard0 with the sdcard fuse tool

mkdir /data/media 0770 media_rw media_rw
chown media_rw media_rw /data/media

Set indication (checked by vold) that we have finished this action

setprop vold.post_fs_data_done 1

Right before that “# Set indication …” line, add these two lines:

BBBAndroid: Remount the rootfs as rw for ADB push of files to /

mount rootfs rootfs / rw remount

This will remount / as read-write. The original remount to read-only occurs in init.rc, but you generally don’t want to change the standard .rc files, so I override all of the defaults in the platform-specific .rc files. I just pushed this change up to the repo:

I have not checked into the nav bar issue, but I know that I have seen it in some resolutions and not in others. Maybe try a different resolution? I’ll see it at 720x480, for example, when using HDMI. But I won’t see it at the much higher resolutions (1920x1080, I think).


One thing that I should note is that if you use ADB to push files over to the BBB, you must be sure that the permissions of the file that you pushed are set correctly after the transfer. If you are pushing the init.generic*.rc files over, you must do something like:

$ adb shell
root@beagleboneblack:/ # chmod 750 init.genericam33xx(flatteneddevicetr.rc

If the permissions are too “permissive”, the “import” command in init.rc will refuse to include the init.generic*.rc file because it is a security risk. If the init.generic*.rc file isn’t included, then ADB won’t start, and you are effectively prevented from using ADB at that point. You’ll have to mount the EXT4 partition under Linux to fix the permissions. Be careful!



Thanks very much for the very detailed explanation on the character of the init.generic*.rc files pushing.

In regarding to the navigation bar, I am using an element14 BBB with Circuito LCD4. So I don’t have leisure to change the resolution. However I can using the LCD panel on-board buttons to navigate back. So it is not a big deal at this moment.

As Adam Singer mentioned, I am really looking forward to the kernel 3.10/3.14 version with SGX support. Because kernel 3.10 adds much improved robustness to the USB driver.

Thanks again!


Hi Andrew,

Thanks very much for the great work.

Now i am trying to port AOSP 4.4.4 (KitKat) for the BBB by using your repo manifest XML file. I built the U-boot, Kernel Successfully and also created the Filesystem. But the problem is after putting all the built images into the microSD card, while booting i am getting some errors. i think it is not booting upto the android level, as it is getting stuck somewhere else. please take a look at the errors:

[ 2.847248] #0: TI BeagleBone Black
[ 3.559459] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[ 3.568018] VFS: Mounted root (ext4 filesystem) on device 179:2.
[ 3.575446] devtmpfs: mounted
[ 3.578863] Freeing init memory: 244K
[ 4.602721] init (1): /proc/1/oom_adj is deprecated, please use /proc/1/oom_score_adj instead.
[ 4.705862] init: /dev/hw_random not found
[ 4.710863] init: cannot open ‘/initlogo.rle’
[ 4.823625] EXT4-fs (mmcblk0p3): mounted filesystem with ordered data mode. Opts: nomblk_io_submit,errors=panic
[ 4.862816] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[ 4.886477] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)
[ 4.893231] init: /dev/hw_random not found
[ 4.923083] init: cannot find ‘/system/bin/sgx/rc.pvr’, disabling ‘pvr’
[ 4.934643] init: cannot find ‘/system/bin/rild’, disabling ‘ril-daemon’
[ 4.948132] healthd: wakealarm_init: timerfd_create failed
[ 4.958423] healthd: No charger supplies found
[ 4.967361] init: cannot find ‘/system/etc/’, disabling ‘flash_recovery’
[ 4.979856] healthd: BatteryStatusPath not found
[ 4.989605] healthd: BatteryHealthPath not found
[ 4.998759] init: property ‘sys.powerctl’ doesn’t exist while expanding ‘${sys.powerctl}’
[ 5.012524] healthd: BatteryPresentPath not found
[ 5.018248] healthd: BatteryCapacityPath not found
[ 5.023926] init: powerctl: cannot expand ‘${sys.powerctl}’
[ 5.030486] healthd: BatteryVoltagePath not found
[ 5.035933] init: property ‘sys.sysctl.extra_free_kbytes’ doesn’t exist while expanding ‘${sys.sysctl.extra_free_kbytes}’
[ 5.047582] healthd: BatteryTemperaturePath not found
[ 5.053002] healthd: BatteryTechnologyPath not found
[ 5.058308] init: cannot expand ‘${sys.sysctl.extra_free_kbytes}’ while writing to ‘/proc/sys/vm/extra_free_kbytes’
[ 5.069792] binder: 91:91 transaction failed 29189, size 0-0
[ 5.076145] init: property ‘sys.sysctl.tcp_def_init_rwnd’ doesn’t exist while expanding ‘${sys.sysctl.tcp_def_init_rwnd}’
[ 5.088106] init: cannot expand ‘${sys.sysctl.tcp_def_init_rwnd}’ while writing to ‘/proc/sys/net/ipv4/tcp_default_init_rwnd’
shell@beagleboneblack:/ $

I am expecting root@android over here, whereas i am getting shell@beagleboneblack in this case

Could you please help me out on this. Expecting a quick response from your end…


I don’t see any errors that are out of the ordinary in your FTDI output. How long did you wait before giving up? If there is a failure on the first boot, you should see some sort of failure beyond that in the log. You can also run logcat from the FTDI shell to get some more details. If you see that zygote is started in your log, you’re well on your way. It takes several minutes on the first boot before the top level screen comes up. Until then, you just see the “Android” animation on the screen.

The FTDI shell belong to the “shell” user and group, not root. If you’d like to use root, plug in your USB cable and use ADB to shell in to the system.


Hi Andrew,

Thanks for the reply.

The only log for zygote that i can see in my FTDI output is:

[ 23.539523] warning: `zygote’ uses 32-bit capabilities (legacy support in use)

Then some other logs like:

[ 44.074598] init: sys_prop: permission denied uid:1003 name:service.bootanim.exit

Is this the expected output??

Yes, that is the expected output. You’re through most of the boot process if zygote is started. Therefore, you aren’t experiencing bootloader or kernel problems.

Can you describe the problem that you are seeing in more detail? Do you see anything on the screen at all? You should see the “Android” animation screen while the system is starting up. If you aren’t seeing anything at all on the screen, then you might be having HDMI issues (like a bad cable that isn’t reporting EDID information fro your display to the BBB). Look back through your FTDI log and look for any messages regarding tilcdc. If you see something like this:

[ 3.680634] tilcdc 4830e000.lcdc: found TDA19988
[ 3.686131] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[ 3.693072] [drm] No driver support for vblank timestamp query.
[ 3.699640] tilcdc 4830e000.lcdc: No connectors reported connected with modes
[ 3.707162] [drm] Cannot find any crtc or sizes - going 1024x768
[ 3.722056] Console: switching to colour frame buffer device 128x48
[ 3.733792] tilcdc 4830e000.lcdc: fb0: frame buffer device

… then you are experiencing a cable problem.

If you can see the “Android” animation screen and that screen never exits, then let me know and we can troubleshoot from there. But this:

[ 44.074598] init: sys_prop: permission denied uid:1003 name:service.bootanim.exit

… tells me that your animation screen finished and that the system booted up properly.