Home > Android, Linux, Rockchip RK32xx, Testing > How to Build Android 4.4 for Rockchip RK3288 Devices (Tronsmart Orion R28)

How to Build Android 4.4 for Rockchip RK3288 Devices (Tronsmart Orion R28)

September 16th, 2014 Leave a comment Go to comments

After blowing up my ATX power supply, and learning such things as “FULL” power supplies do exists, I finally managed to build Android for Tronsmart Orion R28 using the provided SDK. I haven’t tried to load it on the device yet, but the build could complete successfully after following the steps below in Ubuntu 14.04. The SDK is probably not specific to one device, so it might just also work on other RK3288 TV boxes and tablets.
Android_4.4_SDK_Orion_R28

First download Android 4.4 SDK for RK3288, or use the one in the micro SD card provided with the Beta version of R28 Pro and Meta.

Install some dependencies:


Extract the SDK:


And build the kernel first:

  1. Enter the kernel directory:
  2. Change arch/arm/boot/dts/Makefile to use RK3288 device tree file instead of an RK3188 (may not be needed, but the build failed for me without that change…):

    It’s also quite possible you need to extract the device tree file from your firmware or device.
  3. Building the kernel and resources (device tree + logo) images:
  4. Done
    It will fail with:

    drivers/usb/dwc_otg_310/dwc_otg_hcd.c: In function ‘dwc_otg_hcd_rem_wakeup_cb’:
    drivers/usb/dwc_otg_310/dwc_otg_hcd.c:446:31: error: inlining failed in call to always_inline ‘dwc_otg_hcd_to_hcd’: function body not available

  5. Edit the culprit file, remove the inline directive, and continue the build:
  6. Similar errors will occur one or twice more, so repeat step 5 as needed….
  7. Create kernel.img (not sure the command line is correct)

Before building Android, you need to make sure you use the right version of Java. I recently build AOSP for ARMv8 which requires OpenJDK 1.7 in Ubuntu, but this version requires Oracle 1.6 SE.  At first I used JDK 6u45 (1.6.045), but I got some errors:

In file included from external/chromium_org/content/common/android/hash_set.cc:5:0:
out/target/product/rk3288/obj/GYP/shared_intermediates/content/jni/HashSet_jni.h:10:26: error: extra tokens at end of #ifndef directive [-Werror]

Based on a thread on XDA developer forums, I installed Java 1.6.0.27 instead, which you can download here:


Now add the new Java version to the “alternatives”:


and make sure Java 1.6.0.27 is used by default:


I’m not sure all six tools need to be configured, but it probably does no hurt to do so.

Finally, you just need to run a script to build Android:


Be patient, and it should finish with something like:

Creating filesystem with parameters:
Size: 1073741824
Block size: 4096
Blocks per group: 32768
Inodes per group: 8192
Inode size: 256
Journal blocks: 4096
Label:
Blocks: 262144
Block groups: 8
Reserved block group size: 63
Created filesystem with 1792/65536 inodes and 149182/262144 blocks
+ '[' 0 -ne 0 ']'
Install system fs image: out/target/product/rk3288/system.img
out/target/product/rk3288/system.img+out/target/product/rk3288/obj/PACKAGING/recovery_patch_intermediates/recovery_from_boot.p maxsize=1096212480 blocksize=135168 total=598297319 reserve=11083776
TARGET_PRODUCT=rk3288
TARGET_HARDWARE=rk30board
system filesysystem is ext4
make ota images...
create boot.img with kernel... done.
create recovery.img with kernel... done.
create misc.img.... done.
create system.img... done.
*******************************
3288_4.4 sdk do finish
*******************************

All relevant files can be found in rockdev/Image-rk3288 directory:


Next step is to flash it to the device, and see if it can boot.

  1. September 16th, 2014 at 21:20 | #1

    My instructions for the kernel part of not correct based on a comment on G+: https://plus.google.com/u/0/110719562692786994119/posts/MyGmGKPY4jF

    Looks like I need to run:
    make kernel.img
    then
    make rk3288-box.img

    I’ll check that tomorrow. Now… relax and sleep time 🙂

  2. September 16th, 2014 at 22:58 | #2

    While you sleep the bugs will play?

    Step 2: rk3288-box.dts not rk3288-box.dtb

    Step 3: CROSS_COMPILE=/RK3288_R-BOX_ANDROID4.4.2-SDK_V1.0.0/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi

    I tried this just for the kernel and got a screen displaying “Google TV” … in pink though as my device seems ,,,

  3. September 17th, 2014 at 09:33 | #3

    @linuxium
    For step2… the rest of the Makefile is filled with dtb files…
    The original line is:
    dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3188-tb.dtb

    I can see both rk3288-box.dts and rk3288-box.dtb in arch/arm/boot/dts, but I suppose the dtb file is generated from the dts, so maybe both are OK?

  4. linuxium
    September 17th, 2014 at 11:50 | #4

    @cnxsoft

    No, use rk3288-box.dtb (I thought it fixed something else, but it didn’t!)

  5. mo123
    October 4th, 2014 at 17:24 | #5

    Hi

    i downloaded the RK3288_R-BOX_ANDROID4.4.2-SDK_V1.0.0/ for Tronsmart.
    I wan to to make a kernel for HPH RK3288 Box.
    I extracted the kernel.dtb file and converted it to a *.dtd file from the resource.img. What must I do with this file now? Should I just make a normal kernel and flash the kernel and stock resource.img to my box?

  6. October 4th, 2014 at 17:56 | #6

    @mo123
    You can place the dtd file (e.g. rkdevice3.dtd) in the source tree, and generate the image:
    make rkdevice3.img -j8

    Then follow instructions @ http://www.cnx-software.com/2014/09/17/creating-and-flashing-an-android-image-from-rockchip-rk3288-sdk/ to flash it?

  7. mo123
    October 4th, 2014 at 18:10 | #7

    @cnxsoft
    Thanks

    Anyone already downloaded the Firefly RK3288 SDK and can only upload the kernel?
    https://bitbucket.org/T-Firefly/firefly-rk3288/overview
    Here is the kernel seperate but it’s much older
    https://bitbucket.org/TeeFirefly/firefly-rk3288-kernel

    it takes too long to download from baidu and cloning the repo takes ages.
    Already have the Tronsmart SDK, since it was uploaded to mega.

  8. October 4th, 2014 at 18:56 | #8

    @mo123
    I’ve never managed to retrieve the code from bitbucket, it will just end up in error, maybe because the connection is unreliable. Tronsmart SDK is a little old, but maybe the kernel is OK.

    There’s also another kernel @ https://github.com/rkchrome/kernel, but maybe not for Android.

  9. December 24th, 2014 at 23:15 | #9

    If i try to install the dependencies i het this error in ubuntu

    ~$ sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.8-dev \ squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev pngcrush schedtool libxml2 \ libxml2-utils xsltproc lzop libc6-dev schedtool g++-multilib lib32z1-dev lib32ncurses5-dev \ lib32readline-gplv2-dev gcc-multilib libswitch-perl gcc-arm-linux-gnueabi lzop libncurses5-dev \ libssl1.0.0 libssl-dev
    Reading package lists… Done
    Building dependency tree
    Reading state information… Done
    E: Unable to locate package squashfs-tools
    E: Unable to locate package libxml2-utils
    E: Unable to locate package lib32readline-gplv2-dev
    E: Unable to locate package libssl1.0.0
    E: Couldn’t find any package by regex ‘ libssl1.0.0’
    [email protected]:~$
    [email protected]:~$ Read more: http://www.cnx-software.com/2014/09/16/how-to-build-android-4-4-sdk-for-rk3288-tronsmart-orion-r28-beelink-r89/#ixzz3Mpg1RQbS

    What am i doing wrong ?

  10. December 26th, 2014 at 09:37 | #10

    @kraakie
    Maybe you have a different version of Ubuntu. I have Ubuntu 14.04.

    Run “aptitude search libssl” or “aptitude search libssl1” to find which version is available on your system.

  11. December 26th, 2014 at 17:28 | #11

    @cnxsoft
    I found the problem copy paste issue thnx 🙂

    But what i am wondering do i have to run make kenrel.img in the kernel folder or make make rk3288-box.img -j8 ? after the deconfig command of course ?

  12. DaveB
    April 19th, 2015 at 02:44 | #12

    @linuxium

    @cnxsoft
    Managed to produce a binary under fedora using the toolchain in the SDK as 32b gcc would not compile. Hijacking the thread, does anyone know how to enable RT2X00 USB wifi modules? CONFIG_RT2X00=m gets overwritten when issuing make ARCH=arm. Ralink does not appear in make menuconfig.

  13. DaveB
    April 27th, 2015 at 02:58 | #13

    To answer my own post, solved this by pulling /drivers/net/wireless/ Kconfig & Makefile from
    the vanilla http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.37.tar.xz

  14. elel
    June 15th, 2015 at 17:55 | #14

    There is a mistake in the article

    sudo update-alternatives –install /usr/bin/javadoc javah /usr/lib/jvm/jdk1.6.0_27/bin/javah 1

    should be

    sudo update-alternatives –install /usr/bin/javah javah /usr/lib/jvm/jdk1.6.0_27/bin/javah 1

  1. October 20th, 2014 at 12:15 | #1
  2. August 8th, 2015 at 19:35 | #2