Android Jellybean on i.MX6 with no disclaimers

Jelly beansIn our last post about Jellybean on our i.MX6 boards, we had a big, bold disclaimer that this was alpha code.

We’ve now spent the time to walk through many of the details and are happy to release updates and images that bring the full Android Jellybean experience without the big fat warnings.

This release is now every bit as functional as our Ice cream sandwich releases and ready for serious field testing.


For the impatient

To enable quick testing without going through the build process, we’ve uploaded two SD card images to our Cloud storage site:

Note that even though it’s slower, there are a handful of benefits to using the .img file:
  • We’ve already run dexopt on the image. During the first boot of Android, the system will go through all of the installed packages, and this slows up the first boot dramatically.
  • We added some movie trailers, so the Gallery app comes up right away.
  • We disabled the screen blanking.
  • We added some desktop shortcuts.

Highlights

  • Browser performance has been fixed.
  • SATA is supported
  • Fully boots to either SD card
  • Both parallel and MIPI cameras are supported
  • Wi-Fi on Nitrogen6x is supported and enhanced from ICS
  • Resistive touch screen is supported
  • Dual-screen (LCD+HDMI) is now supported for all panels

Notable omissions

In the intro, we said there were no disclaimers, but there are still some things on the To-Do List:
  • Nitrogen6-Lite is not yet supported
  • Bluetooth is not yet functional on Nitrogen6X

Installing from the tar-ball

To install from the tar-ball, you’ll need to extract the image, then run the mksdcard.sh script to partition and format either a SATA drive or an SD card.

In general, the process goes like this:
~/$ mkdir android-jb
~/$ cd android-jb
~/android-jb$ sudo tar zxvf ~/Downloads/imx6-jb-20130626.tar.gz
~/android-jb$ sudo device/boundary/mksdcard.sh /dev/sdc nitrogen6x
The example above assumes that your SD card or SATA drive is connected to /dev/sdc. It’s also common for machines with built-in SD card readers to have them show up as /dev/mmcblk0 or /dev/sdd.

If you want to run from SATA, you can use our USB image, but the SATA drive won’t show up as a removable disk and you’ll need to add a parameter of --force to the command-line:
~/android-jb$ sudo device/boundary/mksdcard.sh /dev/sdc nitrogen6x --force
You’ll also want to be extra careful to make sure you have the right disk. Because mksdcard.sh will re-write the partition table of the device you point it at, this can and will trash your hard drive if not used properly.

Don’t say we didn’t tell you.

Installing from the .img file

Under Linux using dd

This is probably the easiest way to install, but won’t use the entire SD card or SATA drive because SD cards vary in size and we’ve configured the image at 3.8 GiB.

Using a 4+GB SD card that appears as /dev/sdc, you can install the image like this:
~/$ gunzip ~/Downloads/imx6-sdcard-20130626.img.gz
~/$ sudo umount /dev/sdc?
~/$ sudo dd if=~/Downloads/imx6-jbsdcard-20130628.img of=/dev/sdc
~/$ sync

Under Windows

To install the image under Windows, we reccommend using Alex Page’s nice USB Imaging Tool.

The following shows the process from the command-line if your SD card appears as drive H:.
C:\>usbitcmd l
USB Image Tool 1.58
COPYRIGHT 2006-2011 Alexander Beug

http://www.alexpage.de

  Device   | Friendly Name             | Volume Name | Volume Path | Size
 ------------------------------------------------------------------------------
      2500 | Generic- SD/MMC USB Devic | CE7         | H:\ |   3837 MB
C:\>
C:\>usbitcmd r 2500 imx6-jb-sdcard-20130628.img.gz /g /d
USB Image Tool 1.58
COPYRIGHT 2006-2011 Alexander Beug

http://www.alexpage.de

Restoring backup to "Generic- SD/MMC USB Device" (H:\)...ok
Note that you should use Windows Explorer to eject the card when complete, and that you may need the card to be formatted to allocate a drive letter.

Also note that usbitcmd must be run as Administrator, since it requires access to the entire drive.

Getting access to the sources

As discussed in this post, you’ll need to register and forward an SSH public key in order to get access to some of the closed-source bits of the Android build tree.

Once that’s done, retrieving the sources follows the standard Android process, using branch jb-1.1.0:
~/$ mkdir myandroid
~/$ cd myandroid
~/myandroid$ repo init \
    -u git://github.com/boundarydevices/imx-android-r13.4-ga.git \
    -b jb-1.1.0
~/myandroid$ repo sync
~/myandroid$ . build/envsetup.sh
~/myandroid$ lunch
         ---select Nitrogen6x eng or user---
~/myandroid$ m 2>&1 | tee build.out
If you already have a repo tree from us, you can simply sync and switch branches like so:
~/myandroid$ repo sync
~/myandroid$ repo init -b jb-1.1.0

Usage notes

Here are some things you should be aware of when using this image:
  • The /sdcard mount point doesn’t seem to mount on the first boot when installing from the tar-ball. There seems to be some amount of setup needed during that first boot cycle, so you’ll see a message about “No storage available” if you run the Gallery application during that boot cycle.
  • Similarly, the Gallery application seems to want a boot cycle after loading up videos through adb. In other Android releases, we’ve used third party tools to force a media scan at other times, but haven’t loaded that onto this release.
  • We’ve seen some intermittent issues with audio output that need closer scrutiny. In particular, it appears that a cold boot is sometimes needed to restore the proper function of the SGTL5000.

The details

For those interested in the details of what’s been changed from the Freescale release, and how we solved some of the issues encountered, the sections below will list each of the major hurdles and the details of the solution.

  • Wi-Fi state machine changed again
  • Browser performance sucked
  • SATA support wasn’t present
  • MIPI
  • init crashes during startup
  • Touch calibration wasn’t functional

Wi-Fi state machine changed

To describe this well, we need to start with a little background about the TiWi-BLE SDIO WiFi/BT modules we use on the Nitrogen6x. This highly integrated module is easy to integrate from a hardware standpoint, but we’ve struggled with one of the pins associated with WiFi.

The Wireless LAN Enable, or WL_EN pin is used to enable the internal Wi-Fi portion of the module, and in many O/S releases, we’ve simply asserted the signal at startup and left it alone.

The trouble is that the wl12xx device driver expects this to be available and to de-asserted when the network adapter is brought down and re-asserted when the device is brought up. In addition, the driver needs the signal to be asserted when the kernel module is loaded.

There’s code in the driver to allow a platform (a board) to over-ride this, but it doesn’t function properly.

The stock Android WiFi manager not only brings the adapter up and down, it also loads and unloads the kernel module, which causes a segmentation fault or kernel panic if the platform override is used.

In the ICS release, we thought we’d dealt with this once and for all by hacking up hardware/libhardware_legacy/wifi/wifi.c to assert and de-assert the WL_EN pin at the appropriate times.

This didn’t work with Jellybean.

In our first port, the WiFi device got stuck in scenarios where the WL_EN pin was de-asserted but the driver was still trying to communicate with the chip.

While digging through the details of the various call chains, we stumbled on the origin of the problem. The SDHCI spec seems to define a power control mechanism that’s called at precisely the right points. Unfortunately, the i.MX6 Secure Digital Host Controller doesn’t support it. Instead, we need to toggle a GPIO pin at those points.

So that’s what we did in this release. We implemented a platform-specific callback at the SD-card layer, and defined one for the Nitrogen6X.

Once that was done, things just worked, and we also found that the calibrator utility worked (an issue that’s been around a long time).


Browser performance sucked

The web browser performance of both ICS and JB on our boards has been pitiful until this release.

App not responding or ANR messages could be expected, even when loading pages without a lot of dynamic content and the reason(s) weren’t clear.

Once we dug into it though, a partial answer became immediately apparent: the problem stemmed from I/O. Specifically, SD card I/O.

We had several customers report that using a Class 10 SD card improved the situation, but our testing showed only moderate improvements.

Tracing the I/O, we found that the majority of activity was in /data/data/com.android.browser/cache and we saw dramatic improvements if we mounted this directory as a RAM disk, but we still found some slowness due to I/O in /data/data/com.android.browser/databases.

In this release, we’re mounting all of /data/data/com.android.browser/ as a 32MiB RAM disk, and things are very fast.

Note that this does have a down-side. Re-visiting a page after a system restart will be slower. The system will also prompt you about sharing your location and such-like on every boot. For our immediate purposes, this is a reasonable trade-off.


SATA support

The Linux kernel for i.MX6 has had functional SATA since the beginning of i.MX6-time, but we hadn’t booted an Android image over SATA until this release.

Under ICS, there were a bunch of hard-coded mount statements in init.rc, and under JB, the file fstab.boundary contained hard-coded references to the boot device.

On both platforms, the file /system/etc/vold.fstab contained references to which device should be used for storage of media content.

In this release of Jelly Bean, we’ve changed the fstab.boundary file to have symbolic boot device ($BD) references and added support for this to the mount_all command.

diff --git a/nitrogen6x/fstab.boundary b/nitrogen6x/fstab.boundary
index 977fc45..4f9e60a 100644
--- a/nitrogen6x/fstab.boundary
+++ b/nitrogen6x/fstab.boundary
 
-/dev/block/mmcblk0p1    ...
-/dev/block/mmcblk0p5    ...
-/dev/block/mmcblk0p4    ...
-/dev/block/mmcblk0p6    ...
-/dev/block/mmcblk0p7    ...
+$BD1    /boot    vfat   ...
+$BD5    /system  ext4   ...
+$BD4    /data    ext4   ...
+$BD6    /cache   ext4   ...
+$BD7    /device  ext4   ...
Note that this doesn’t complete the job of adding SATA support. If you’re booting SATA, you’ll also need to edit /system/etc/vold.fstab. More specifically, you’ll need to comment out this line:
dev_mount sdcard /mnt/sdcard 4 /devices/platform/sdhci-esdhc-imx.2/mmc_host/mmc1
and un-comment (remove the #-sign from) this line:
# dev_mount sdcard /mnt/sdcard 4 /devices/platform/ahci.0/host0/target0...
Refer to the comments in the vold.fstab file on Github to get a better understanding.

MIPI camera support

As briefly described our quick MIPI post, there are some resource conflicts that prevent us from supporting both our parallel OV5642 camera and OV5640 MIPI camera modules at the same time (with the same kernel). Until we have a more elegant solution, we’ve added support for the MIPI camera module through a kernel defconfig.

In this release of Android, we’ve extended this support to the build process through a compile command-line variable DEFCONF. By assigning this variable at build time (when invoking make or m, you can build your kernel with the MIPI configuration. In other words, if you do this:
~/myandroid$ m DEFCONF=nitrogen6x_mipi_defconfig 2>&1 | tee build.out
instead of this:
~/myandroid$ m 2>&1 | tee build.out
Your kernel will be built with MIPI support instead of the parallel camera.

The rest of Android is built to allow both cameras simultaneously, but we won’t be able to do that without a hardware spin and/or some additional kernel work.

init was crashing at startup

This was a weird one, and seems to have been around a while.

We were ready to ship a pre-release to a customer and found that an SD card that worked on one board didn’t work when prepping for shipment.

Was it the monitor? Was it the board?

After a bunch of swapping around parts, we found that it was actually a mouse used in our lab.

root@android:/sys/class/input # cat event1/device/name
Logitech USB-PS/2 Optical Mouse
Digging through the details of the crash, we found a buffer overrun in the file hardware/imx/libsensors/SensorBase.cpp that was crashing while looking for an accelerometer by screen-scraping /proc/bus/input/devices.

We fixed that bug, and also realized that we didn’t need that component anyway.

Belt and suspenders.


Touch calibration wasn’t functional

In our first release of Jelly Bean, we completely skipped a set of changes we made to the touch screen calibrator program.

In the ICS releases and in Froyo and Gingerbread before then, we added support for passing a touch screen device name to the Android startup program and executed it during boot.

We didn’t realize that this involved a change by Freescale that added support for the exec command.

A simple cherry-pick of these patches didn’t do the trick, so we bailed out a little bit.

Since our 800×480 panels can operate quite well with a single calibration value, and the tsc2004 touch controller used with that panel supports a kernel command-line parameter with the calibration, we added a default calibration parameter into the Jelly Bean boot script. Note that you can still over-ride this with the calibration environment variable.

We also added the ts_calibrator program into our build, along with all of our ts_calibrator patches, so you can still run calibration.

It just won’t happen automagically.

To run the calibration program by hand, you can do this from an Android shell:
root@android: / # stop
root@android: / # echo 0,0 > /sys/class/graphics/fb0/pan
root@android: / # ts_calibrator
root@android: / # cat /data/system/calibration | busybox xargs echo
-67247,-764,272499173,324,69283,-8653010,65536
The output string is the set of calibration constants.

You can have this take effect immediately for testing by handing it to the driver like this:
root@android: / # echo -67247,-764,272499173,324,69283,-8653010,65536 \
                > /sys/module/tsc2004/parameters/calibration
The resulting string can be saved in U-Boot like this:
U-Boot > setenv calibration -67247,-764,272499173,324,69283,-8653010,65536
U-Boot > saveenv
While not as convenient as the automatic startup, this process works pretty well.

Tags:

169 Responses to “Android Jellybean on i.MX6 with no disclaimers”

  1. salil.mehta July 1, 2013 7:25 am #

    Hello,
    I could read in the blog that there are improved performances in browsing due to some optimization done. Is this release using Graphics acceleration and would browser be accelerated by this?
    regards
    Salil

    • ericn July 1, 2013 7:58 am #

      Hi Salil,

      All of our Android releases have GPU acceleration enabled, but I’m not sure which pieces of the browser this might affect.

      Similarly, we haven’t done any testing of things like WebGL to see if acceleration is available to the browser itself.

      • salil.mehta July 1, 2013 8:04 am #

        Ok sure, let em load and verify that. Will post soon with my results for this release.

        -Salil

      • salil.mehta July 1, 2013 8:59 am #

        Hi Eric,

        I am getting below errors while booting the image. I am using 8GB SD card instead of 4GB. Any clues where I might be wrong?

        init: Unable to open persistent property directory /data/property errno: 2
        init: using deprecated syntax for specifying property 'ro.product.manufacturer', use ${name} instead
        init: property 'ro.product.manufacturer' doesn't exist while expanding '$ro.product.manufacturer'
        init: cannot expand '$ro.product.manufacturer' while writing to '/sys/class/android_usb/android0/iManufacturer'
        init: using deprecated syntax for specifying property 'ro.product.model', use ${name} instead
        init: property 'ro.product.model' doesn't exist while expanding '$ro.product.model'
        init: cannot expand '$ro.product.model' while writing to '/sys/class/android_usb/android0/iProduct'
        init: using deprecated syntax for specifying property 'ro.serialno', use ${name} instead
        init: cannot find '/system/bin/sh', disabling 'console'
        init: cannot find '/system/bin/servicemanager', disabling 'servicemanager'
        init: cannot find '/system/bin/vold', disabling 'vold'
        init: cannot find '/system/bin/netd', disabling 'netd'
        init: cannot find '/system/bin/debuggerd', disabling 'debuggerd'
        init: cannot find '/system/bin/surfaceflinger', disabling 'surfaceflinger'
        init: cannot find '/system/bin/app_process', disabling 'zygote'
        init: cannot find '/system/bin/drmserver', disabling 'drm'
        init: cannot find '/system/bin/mediaserver', disabling 'media'
        init: cannot find '/system/bin/dbus-daemon', disabling 'dbus'
        init: cannot find '/system/bin/installd', disabling 'installd'
        init: cannot find '/system/etc/install-recovery.sh', disabling 'flash_recovery'
        init: cannot find '/system/bin/keystore', disabling 'keystore'
        init: cannot find '/system/bin/rild', disabling 'ril-daemon'
        android_usb: already disabled
        mxc_hdmi mxc_hdmi: same edid
        --------------> Booting stuck at this point
        

        u-boot params are:
        bootargs=console=ttymxc1,115200 video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24 video=mxcfb1:off

        -Salil

        • ericn July 1, 2013 9:58 am #

          Hi Salil,

          Can you double-check to see if your SYSTEM partition (partition 5) was populated correctly?

          In previous releases, we’ve seen what appear to be timing issues with mksdcard.sh that
          prevented some of the copies from occurring properly.

          If they look right, can you double-check the mount messages?

          Oh. Never mind. I see what’s going on. You’ve over-ridden the bootargs and didn’t include the new androidboot.bootdev argument.

          When adding SATA support, we also added a new kernel command-line argument to specify the boot device. The value of androidboot.bootdev replaces the string $BD in fstab.boundary.

          See this bit of the JB boot script for examples of how this is set. You have essentially these options:

          value meaning
          sdhci-esdhc-imx.2 Top SD on Nitrogen, Full-sized on SABRE Lite
          sdhci-esdhc-imx.3 Bottom SD on Nitrogen, micro SD on SABRE Lite
          ahci.0 SATA drive

          Also note that JB seems to require bpp=32 in the video= clauses, so your video may be screwed up once booted.

          • salil.mehta July 2, 2013 8:00 am
            #

            Hi Eric,

            SYSTEM folder has been correctly populated and I can browse it on my host machine using SD Card reader. I tried using the parameters suggested by you and state of booting is still the same and getting stuck at the same point. Surprisingly, if you see even the previously pasted logs you would NOT see any mount related messages in this release. Also, I missed to state that I am using ramdisk.img present as part of image to boot. Though I am new to Android (as new as 2 weeks old :)) but does it even looks like rootfs is getting mounted? the init messages coming could be from init part of ramdisk loaded in the memory rest other partitions are not getting read or mounted?

            u-booot Parameters Used
            ———————————–
            video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24,bpp=32 video=mxcfb1:off console=ttymxc1,115200 androidboot.console=ttymxc1 androidboot.bootdev=sdhci-esdhc-imx.2 vmalloc=400M fbmem=28M

            -salil

          • salil.mehta July 2, 2013 8:59 am
            #

            Hi Eric,
            Its up !! Looks like I was missing one more u-boot variable “androidboot.hardware=freescale”. Thanks for the help so far :)
            -salil

          • salil.mehta July 3, 2013 2:29 am
            #

            Hi Eric,
            Thanks! Again, its browser performance is far superior to anything what I have seen so far. Its almost PC like and acceptable. Release looks stable so far. Therefore, Great work done !!!

            Again a question from naive,
            1) I get a message on Android login that “clear the data cache or system might get unstable”. Though ignoring that does not cause any harm (as of now I did not experience any instability). Any clues?
            2) It does not have Google Play Store what can I install new applications like Terminal Emulator etc. on this release.
            3) Is there anyway we can tell (using some profiling tools etc) whether GPU is being at some stage while browsing or anywhere else. Inside Settings–>Developer Options I could see several options to deal check this like Show GPU overdraw, Force GPU Rendering, GPU Profiling etc. etc. but enabling them does not seem to cause any affect on the system so was wondering whether they are getting even enabled or are even supported. But I require tools which are exactly what are present in the Developer options.

            - Salil

          • ericn July 3, 2013 6:23 am
            #

            Thanks Salil,

            I have it on my ‘to-do’ list to investigate the System UIDs inconsistent (data cache) warning. I believe it has to do with the mount point for the browser cache.

            As for the Play store, in order to get there, a machine must be certified by Google, and essentially locked down, which isn’t appropriate for what we’re selling (dev boards).

            Finally, on the GPU rendering side, my understanding is that this is always enabled.

  2. jerome July 1, 2013 7:33 am #

    Hi Eric,
    Thank you for this release. I tried it on BD-SL with 800×480 resistive-touch screen It’s working smoothly on the first boot with pre-dex-optimisation during compilation time. ICS needed always few boots to get working correctly.

    But ADB is still not working. I achieved to get adb working :
    - either set “ro.adb.secure” to 0 in “device/fsl/imx6/etc/init.rc” and it’s working smoothly.
    - or set ro.adb.secure to 0 in serial console. ro.adb.secure will stay to 1 but; first time you do “adb shell” a message is prompted on the nitrogen6x screen to confirm the secure key of your station.

    • ericn July 1, 2013 7:57 am #

      Thanks for the feedback Jerome.

      I’m not seeing the same. I have been getting the prompt, but without setting ro.adb.secure.

      Are you using the user or engineering build target?

  3. embedsri July 9, 2013 4:38 am #

    Hi Eric,
    Thank you for this release. I tried the prebuilt image and also built an image with latest source from this release of the branch.
    BEHAVIOR:
    I have a Dell P2412H monitor connected to the BD-SL board using an HDMI cable.

    When I boot, the uboot splash penguin comes up on the screen. I have verified that the 6x_bootscript correctly detects the monitor and initializes kernel command line as follows:

    setenv bootargs $bootargs video=mxcfb${nextcon}:dev=hdmi,1920x1080M@60,if=RGB24
    But when the kernel boots up, the screen goes blank.

    QUESTIONS
    a. Why is that happening?
    b. What should I expect to be displayed on the monitor screen with this release once the kernel is up?

    PS: Btw, Is there a way I can send you screenshots or post them here? Please let me know if you need any more information to help.

    • ericn July 10, 2013 6:25 am #

      Hi Sri,

      This should be working for you. Can you check the supported modes for your monitor and
      double-check the kernel command-line?

      # cat /sys/class/graphics/fb0/modes
      # cat /sys/class/graphics/fb0/mode
      # cat /proc/cmdline
      

      You’ll also need to make sure that the bpp=32 clause is in the video statement, but if that’s wrong, you’ll get bad colors, not a blank screen. You may also need to bump the fbmem= to a higher number.

    • ericn July 10, 2013 6:27 am #

      Hi Sri,

      I forgot to mention that there isn’t a facility for others to upload screen shots to this site, but if you use i.MX Community, you can refer to me (Eric Nelson) and we can walk things though there.

  4. jkrupp July 9, 2013 12:02 pm #

    Sorry for the newbie question – How do I get an .apk to the development board?

    • ericn July 10, 2013 6:30 am #

      Connect your dev machine to the board using a USB OTG connection, and use adb install from there.

  5. embedsri July 11, 2013 6:06 am #

    Hi Eric,
    I followed up my comment on i.MX Community and sent you a “Direct Message” there.

  6. embedsri July 14, 2013 11:56 pm #

    Hi Eric,
    Did you receive my “Direct Message” on i.MX community? If so, could you please reply at the earliest.
    Thanks

    • ericn July 15, 2013 10:37 am #

      Hello Sri,

      I did receive the message, although I was expecting a public post.

      We’re examining some details of DVI vs. HDMI and don’t have any explanation at the moment for why your monitor isn’t coming up.

      We have seen this DVI works under U-Boot, not under Linux thing before, but it’s usually tied to the HDMI detection.

      Can you run a couple of U-Boot commands with your HDMI cable connected and disconnected?

      U-Boot > if hdmidet ; then echo found HDMI ; fi
      U-Boot > mw.b 0x123004
      
  7. embedsri July 16, 2013 11:18 pm #

    Hi Eric,

    With HDMI cable connected
    ———————————–
    U-Boot > if hdmidet ; then echo found HDMI ; fi
    U-Boot > mw.b 0×123004
    mw – memory write (fill)

    Usage:
    mw [.b, .w, .l] address value [count]

    With HDMI cable disconnected
    —————————————
    U-Boot > if hdmidet ; then echo found HDMI ; fi
    U-Boot > mw.b 0×123004
    mw – memory write (fill)

    Usage:
    mw [.b, .w, .l] address value [count]

    Looks like the mw.b command is missing the value??

    Let me know if you need more information.
    Thanks.

    • ericn July 17, 2013 6:17 am #

      Sorry Sri,

      The command should be md.b 0x123004 1. (md is memory display)

    • ericn July 23, 2013 3:22 pm #

      Hi Sri,

      Please see this comment regarding new patches for DVI support.

  8. Joey Grover July 17, 2013 7:23 am #

    Hey great work on the new release!

    However, is there an ETA on the bluetooth support? It’s vital to a project we are working on.

    • ericn July 17, 2013 8:15 am #

      Hi Joey,

      Some recent patches enabled BT in general, but things still aren’t functional. The bluez stack has been replaced with bluedroid, and some additional work is needed.

      The notes we had been using are now out of date.

      We followed the AOSP for Panda and that didn’t seem to do the trick.

      The are some notes here that may do the trick, but we need to find some time to test things out.

      • rfkrakora September 11, 2013 11:49 am #

        Any updates on the bluetooth support? Using a Sabre Lite board…

        • ericn September 11, 2013 4:37 pm #

          The only way to get WiFi/BT add-on for a SABRE Lite is through a module like the one sold by Silex.

          We haven’t done any integration on that front.

          • rfkrakora September 16, 2013 6:45 pm
            #

            Eric,

            Are there prebuilt kernel modules for the silex in any of our images for Sabre Lite? Or do I have to build them from git sources?

            -Randy

          • ericn September 17, 2013 6:28 am
            #

            I believe Silex has an image for SABRE Lite (er. BD-SL-iMX6), but it’s been a while since I visited their site.

            We haven’t connected up a Silex module.

      • Joey Grover September 19, 2013 1:14 pm #

        Hey Eric,

        Any news on this? We are really hoping to use this product but if we can’t get bluetooth working we will have to move on. = /

      • Abhay Ghatpande October 2, 2013 5:35 am #

        Hi Eric,

        Is there an update on the BT? Are there any particular reasons that it doesn’t function? I was hoping to recommend and use this board for a major application but without BT we cannot proceed.

        Thanks,

        Abhay

        • ericn October 2, 2013 10:56 am #

          Hi Abhay,

          BT isn’t functioning primarily because we haven’t properly integrated the userspace bits. The BT device itself works with this kernel, but we don’t have the proper Android components building on top of it, and since few of our customers are asking for it, we haven’t yet allocated time to address this.

          We’ll likely re-visit this next with an Android 4.3 release in a few weeks.

  9. raviteja613 July 18, 2013 10:07 pm #

    Hello Eric

    can we build images for imx6-SABRELITE board using this source ??

    Does the problem related to SDIO exists on SABRELITE too ??

    • ericn July 19, 2013 6:38 am #

      The ‘nitrogen6x’ target supports both Nitrogen6x and SABRE-Lite boards out of the box.

      The SABRE Lite doesn’t contain the SDIO WiFi module though.

  10. quanguoheme July 19, 2013 8:45 pm #

    hi :
    I have a question about getting access to the source.
    I have registered and send an SSH public key to boundarydevices.com .then,I retrieved a email that said:
    ” Hello Quan,

    We’ve installed your key, so you should be able to access the
    repositories using ‘repo init’ and ‘repo sync’ like so:

            ~/$ mkdir myandroid
            ~/$ cd myandroid
            ~/myandroid$ repo init \
                -u git://github.com/boundarydevices/imx-android-r13.4-ga.git \
                -b  jb-1.1.0
            ~/myandroid$ repo sync
            ~/myandroid$ . build/envsetup.sh
            ~/myandroid$ lunch
            
            ~/myandroid$ m 2>&1 | tee build.out
    

    See this post for details:
    http://boundarydevices.com/android-jellybean-on-i-mx6-with-no-disclaimers/

    but I still cannot download the source .there are some strange message .I enter the password.but no use.

    Fetching projects:  36% (123/340)  git@linode.boundarydevices.com's password:   
    Connection closed by 173.255.200.20  
    fatal: Could not read from remote repository.  
      
    Please make sure you have the correct access rights  
    and the repository exists.  
    git@linode.boundarydevices.com's password:   
    Connection closed by 173.255.200.20  
    fatal: Could not read from remote repository.  
      
    Please make sure you have the correct access rights  
    and the repository exists.  
    git@linode.boundarydevices.com's password:   
    Connection closed by 173.255.200.20  
    
    Please make sure you have the correct access rights
    and the repository exists.
    git@linode.boundarydevices.com's password: 
    Connection closed by 173.255.200.20
    
    • ericn July 20, 2013 7:21 am #

      Hi Quan,

      The message you’re getting indicates that repo and git aren’t configured to send your public key for authentication.

      You can confirm the installation of your key by using ssh directly:

      ~/$ ssh git@linode.boundarydevices.com
      ... if successful, a list of projects will show up here
      

      If your SSH key is not installed properly, you’ll be prompted for a password.

  11. raviteja613 July 19, 2013 9:13 pm #

    I am integrating SDIO wifi module on Sabrelite board to SDIO3 slot

    I just need confirmation from you .

    are there any issues related to SDIO on sabrelite board ??

    • ericn July 20, 2013 7:22 am #

      There aren’t any known issues, and I believe the folks at Silex have been shipping SDIO WiFi modules for use with the full-sized SD card slot on SABRE Lite.

  12. Quan July 21, 2013 10:58 am #

    I have download the i.MX Android jb4.2.2_1.0.0-ga on Freescale .
    Freescale said :Supported Hardware arm i.MX 6Quad SABRE-SD Board and Platform.
    I have build the source jb4.2.2_1.0.0-ga successful。
    But I found that I can not run the image that I build at SABRE lite board.
    why?
    what is the different with .MX 6Quad SABRE-SD Board and SABRE lite board.

    • ericn July 21, 2013 11:48 am #

      Hi Quan,

      SABRE Lite and SABRE SD are completely different boards with much different I/O and power-supply configurations, so you can’t run the same image on both.

      To boot Android on our SABRE Lite boards, you’ll need to build from our sources as described in this post.

  13. raviteja613 July 24, 2013 11:22 pm #

    Hello ericn

    I am trying to integrate a sdio based wifi module on sabrelite board

    i am done changing init.rc Boardconfig.mk etc ..

    now when i turn on wifi

    it says searching for Wi-Fi networks ….

    and it doesn’t go beyond

    but in logcat it shows

    Received 5084 bytes of scan results (47 BSSes)
    New Scan Results available

    can you figure out what might be the problem

    i am also attaching logcat

  14. embedsri July 26, 2013 12:04 am #

    Hi Eric,

    I synced with your new patches for DVI support.
    But kernel_imx/drivers/video/mxc_hdmi.c which has the new changes does not build. Instead, the kernel builds drivers in kernel_imx/drivers/video/mxc which do NOT contain any of the DVI changes.
    What’s going on there?

    Also. here is the output you requested:

    With HDMI cable connected
    ———————————–
    U-Boot > if hdmidet ; then echo found HDMI ; fi
    U-Boot > md.b 0×123004 1.
    00123004: 01 .

    With HDMI cable disconnected
    —————————————
    U-Boot > if hdmidet ; then echo found HDMI ; fi
    U-Boot > md.b 0×123004 1.
    00123004: 01 .

    No difference and nothing yet on the Dell monitor when the kernel is up. Please let me know if you need any more information.

    • ericn July 26, 2013 8:40 am #

      Hi Sri,

      This is clearly different from our experiences.

      Can you confirm that the cable and DVI port on this monitor works on another machine? I have an open-frame monitor here that has a DVI connector, but which seems completely non-functional. That display only works with VGA inputs.

      Is there an “input select” to enable DVI on the monitor?

      Do you see anything on the display in U-Boot? The HDMI detection at the U-Boot level only serves to choose between displays, and HDMI is the default. You should see a message to that effect if you power on without an SD card or SATA drive connected. In this case, the HDMI transmitter will be active, at 1024×768/60Hz.

      Please advise,

      Eric

      • ericn July 26, 2013 12:11 pm #

        Hello Sri,

        I also meant to ask if you can run the i2c edid command and see if the EDID channel is responding for you. The sequence is shown below, along with output from my Asus monitor:

        U-Boot > i2c dev 1  
        Setting bus to 1
        U-Boot > i2c edid 50
        EDID version: 1.3
        Product ID code: 23fa
        Manufacturer: ACI
        Serial number: 0001a26e
        Manufactured in week: 46 year: 2012
        Video input definition: digital signal, voltage level 0
        Monitor is non-RGB
        Maximum visible display size: 51 cm x 29 cm
        Power management features: active off, no suspend, no standby
        Estabilished timings:
        	720x400		70 Hz (VGA 640x400, IBM)
        	640x480		60 Hz (VGA)
        	640x480		67 Hz (Mac II, Apple)
        	640x480		75 Hz (VESA)
        	800x600		56 Hz (VESA)
        	800x600		60 Hz (VESA)
        	800x600		72 Hz (VESA)
        	800x600		75 Hz (VESA)
        	832x624		75 Hz (Mac II)
        	1024x768	60 Hz (VESA)
        	1024x768	70 Hz (VESA)
        	1024x768	75 Hz (VESA)
        	1280x1024	75 (VESA)
        Standard timings:
        	1152x864 	75 Hz
        	1280x960 	60 Hz
        	1280x1024 	60 Hz
        	1440x900 	60 Hz
        	1680x1050 	60 Hz
        	1920x1080 	60 Hz
        	1280x720 	60 Hz
        	1280x800 	60 Hz
        	1920x1080 	60 Hz (detailed)
        Monitor serial number: CBLMTF107118
        Monitor range limits, horizontal sync: 24-83 kHz, vertical refresh: 50-75 Hz, max pixel clock: 170 MHz
        Monitor name: ASUS VS238
        
  15. Quan July 26, 2013 10:44 pm #

    Have I successfully downloaded the source?
    I have downloaded your source for 5 days and nights. but,at the end of download.It show a strange message:

    hkbdm@ubuntu:~/myandroid$ repo sync 
    Fetching projects: 100% (340/340), done.  
    Checking out files: 100% (81/81), done.king out files:  30% (25/81)   
    Checking out files: 100% (222/222), done.ng out files:   9% (22/222)   
    Checking out files: 100% (601/601), done.ng out files:  17% (108/601)   
    Checking out files: 100% (27/27), done.king out files:  29% (8/27)   
    Checking out files: 100% (431/431), done.ng out files:  13% (59/431)   
    Checking out files: 100% (175/175), done.
    Checking out files: 100% (2407/2407), done. out files:   4% (118/2407)   
    Checking out files: 100% (2489/2489), done.
    Checking out files: 100% (2493/2493), done.
    Checking out files: 100% (177/177), done.
    Checking out files: 100% (137/137), done.ng out files:  21% (30/137)   
    Checking out files: 100% (40775/40775), done.
    Checking out files: 100% (96/96), done.king out files:   2% (2/96)   
    fatal: cannot create directory at 'device_validator': Input/output error
    Traceback (most recent call last):
      File "/home/hkbdm/myandroid/.repo/repo/main.py", line 414, in 
        _Main(sys.argv[1:])
      File "/home/hkbdm/myandroid/.repo/repo/main.py", line 390, in _Main
        result = repo._Run(argv) or 0
      File "/home/hkbdm/myandroid/.repo/repo/main.py", line 138, in _Run
        result = cmd.Execute(copts, cargs)
      File "/home/hkbdm/myandroid/.repo/repo/subcmds/sync.py", line 630, in Execute
        project.Sync_LocalHalf(syncbuf)
      File "/home/hkbdm/myandroid/.repo/repo/project.py", line 1060, in Sync_LocalHalf
        self._InitWorkTree()
      File "/home/hkbdm/myandroid/.repo/repo/project.py", line 1991, in _InitWorkTree
        raise GitError("cannot initialize work tree")
    error.GitError: cannot initialize work tree
    hkbdm@ubuntu:~/myandroid$
    
  16. embedsri July 29, 2013 6:42 am #

    Hi Eric,
    As you can see on the images attached to my “Direct Message” to you, I did see the u-boot penguin on the HDMI display but once the kernel was up, the screen went blank.
    Also, I’m able to use the monitor using HDMI cable for dual display from my laptop.

    I’m now facing another problem though.

    Ever since I did a ‘run upgradeu’ , my BD-SL-i.MX6 board has not been sending anything on the console port.
    I tried unbricking using ~/imx_usb_loader$ ./imx_usb u-boot.imx and this is the output:
    ram@ram-Latitude-E6520:~/Prevas/Android_porting/boundarydevices/imx_usb_loader$ sudo ./imx_usb ../out/target/product/nitrogen6x/boot/u-boot.imx
    parse mx6_usb_work.conf
    15a2:0054(mx6_qsb) bConfigurationValue =1
    Interface 0 claimed
    report 1, wrote 16 bytes, err=0
    report 3, read 4 bytes, err=0
    read=56 78 78 56
    ../out/target/product/nitrogen6x/boot/u-boot.imx 0 0 1 0 1 2
    main dcd length 308
    sub dcd length 304
    dcd_ptr=0x177ffc2c

    loading binary file(../out/target/product/nitrogen6x/boot/u-boot.imx) to 177ffc00, skip=0, fsize=50788 type=aa

    <<>>
    jumping to 0x177ffc00

    But still nothing on the serial port.

    Please advise how this could have happened after u-boot upgrade and what else I can try to get back console access. Obviously, I can try out the commands you suggested only after this is resolved.

  17. Jeff Krupp July 29, 2013 8:17 am #

    Serial Ports – Sorry for the newbie question, but Google isn’t helping me here.

    I’m simply trying to write to a serial port in a java Android app (Sabre lite board), but I can’t have it going to the console (using a Log.i()). How do I write to the other serial port?

    Thanks in advance.

    • ericn July 29, 2013 8:47 am #

      Hi Jeff,

      Stock Android doesn’t have a serial-port API, but others have implemented things, including this one.

      At the native (C/C++) layer, the normal Linux serial port calls are available, they’re just not exposed through a JNI layer.

      Depending on your application, it may be easier to implement a service in C or C++ and interface things that way.

      • Jeff Krupp July 29, 2013 12:32 pm #

        Thank you. If I were able to tackle this one, it would address several other things I’m trying to do. I’ve compiled android source code and can generally feel my way around things like this.

        Even so, I’m a Linux dummy and don’t know how communication is done from my java app down to the C/C++ layer to the hardware.

        Could I ask for the ‘above-and-beyond’ help here? I think any simple example or description of how this works would get me googling in the right direction. Thanks again.

    • ericn August 2, 2013 9:30 am #

      Hi Jeff,

      I just ran across this in the JB source base:

    • ericn August 2, 2013 9:31 am #

      Hi Jeff,

      I just ran across this in the JB source base:

      android_hardware_SerialPort.cpp

      I’m not sure where it fits in, but in a quick read, it seems to be what you’re after.

  18. Alex July 30, 2013 3:02 am #

    Hi

    Regrading Camera Hal version 2 in Android 4.2.2 , how we can set parameters like white balance , Effects etc.

    Preview ,Capture[Still] , Video Recording is fine

    Board : Sabre Lite , Camera Interface : MIPI CSI2 , Camera Hal :hardware/imx/mx6/libcamera2

    Please let me know your valuable inputs and thoughts , Experience

    • ericn July 30, 2013 8:27 am #

      Hi Alex,

      We’ll be doing auto-focus for the OV5640 very soon, but I’m not sure about the other parameters.

      If you’re in a hurry and want professional help, the folks at e-con Systems have all of this for embedded Linux. I’m not sure about Android bindings though.

    • ericn September 21, 2013 2:17 pm #

      Hi Alex,

      Auto-focus is now available in both our non-Android and Android kernel branches.

      The Android HAL has also been updated to support auto-focus. It will be invoked immediately prior to photo capture.

  19. quanguoheme August 2, 2013 2:10 am #

    Hi ericn:
    I a problem about access to your private repositories.
    when I run repo sync ,It show such a strange message:

    external/ppp/: discarding 9 commits
    frameworks/rs/: discarding 2 commits
    error: device/boundary/: android_device_boundary checkout 8adf6a1a86edd9c1874ef2d9ac6200f7da3c6783 
    error: external/ppp/: platform/external/ppp checkout 55310c2b54ee944cfa3d55743deaa1b3af1a0883 
    error: frameworks/rs/: platform/frameworks/rs checkout 8869c6adfd95dcd926b69ca60fb33ae258edf462 
    error: kernel_imx/: linux-imx6 checkout 20d08faf29bd31f10572dc23cf1e7c946c1e000d 
    error: prebuilts/sdk/: platform/prebuilts/sdk checkout 5c4c07cf921fbfff9163a8fe353264b8c76201fb 
    hkbdm@ubuntu:/ext/myandroid_boundary_2/myandroid_bak$ find ./ -name 6x_bootscript_jb.txt
    ./bootable/bootloader/uboot-imx/board/boundary/nit6xlite/6x_bootscript_jb.txt
    ./bootable/bootloader/uboot-imx/board/boundary/nitrogen6x/6x_bootscript_jb.txt
    ./bootable/bootloader/uboot-imx/board/boundary/oc/6x_bootscript_jb.txt
    ./device/boundary/nit6xlite/6x_bootscript_jb.txt
    ./device/boundary/nitrogen6x/6x_bootscript_jb.txt
    ^C
    hkbdm@ubuntu:/ext/myandroid_boundary_2/myandroid_bak$
    
  20. ericn August 2, 2013 6:50 am #

    Hi Quan,

    I’m not sure why repo sync is using the word error, but commit 8adf6a1a86edd9c1874ef2d9ac6200f7da3c6783 is the latest commit in the device/boundary project.

    Why did you go looking for 6x_bootscript_jb.txt? Was there a build problem after this?

  21. Andrew August 2, 2013 5:16 pm #

    Is there a proper way to shutdown the android releases? there is no busybox shutdown command. I keep yanking the power cord out to shut it off. Thanks

    • ericn August 2, 2013 5:31 pm #

      If you have on of our button boards or a paper clip and steady hands, you can invoke the long-press of a power button and get a graceful shutdown, but no power-off (we don’t control power on the device).

      From the shell, the closest you can get is to run reboot and then break into U-Boot or un-plug when the system re-boots.

      Note that the button board re-maps the Search to be power because the processor’s ON_OFF signal only supports short-press and delivers interrupts at the wrong time. See this post on i.MX Community for details.

  22. Saif August 3, 2013 7:07 am #

    Hi every one.

    I’ve got 3 questions :

    First :
    I have some trouble getting nice image quality on HDMI screen.
    I think the device is outputting a 16bits colour depth even if i specified in the boot arguments that I want 24bits. The image is aweful and i can see pixels on my screen.

    The second question is:
    Is there a way to install applications on the system? I tryed to put an apk of xbmc on the SDCard and then run it, but it didn’t run, i think this is linked to the 24bits color depth issue.
    Is there a store to get apps from or is it possible to install google play app?

    Finally, I got a Wi-Pi wifi dongle (it is a dongle sold initially for the RaspBerry-PI) but unfortunately, this doesn’t work on the sabre light board. Is there any way to find a compatible driver?

    Thanks alot.

    • ericn August 3, 2013 10:29 am #

      Hi Saif,

      1.) Are you using the standard boot script? It was updated to specify bpp=32 as you can see at this point in the file.

      2.) You should absolutely be able to install packages using adb install. Let’s figure out the display issue before trying to diagnose XBMC.

      3.) Wifi on Android has two parts. The first and easiest is to get the kernel driver selected in the build. You should be able to find the driver from the RPI sources. The second is generally a bit harder. Most Wi-Fi adapters need some Android glue. If you post the make and model of the chip-set, we may be able to point you in the right direction.

      • Saif August 4, 2013 6:08 am #

        Thank you Ericn,

        In fact I use the 2013 updated version of U-Boot that seeks a 6x_bootscript file.
        In that one I have :

        ...
        if hdmidet ; then
        	setenv bootargs $bootargs video=mxcfb${nextcon}:dev=hdmi,bpp=32,1920x1080M@60,if=RGB24
        	if test "0" -eq $nextcon; then
        		setenv fbmem "fbmem=48M";
        	else
        		setenv fbmem ${fbmem},48M
        	fi
        	setexpr nextcon $nextcon + 1
        else
        	echo "------ no HDMI monitor";
        fi
        

        Should I change something in this script?

        • ericn August 4, 2013 9:17 am #

          Hi Saif,

          Yes, you need an update.

          The version in the Android repository adds bpp=32 to the video= clauses.

          Since the boot script has much more to do with Android than with U-Boot versions, we’re likely to
          remove the file 6x_bootscript_android.txt from the U-Boot repository.

          In other words, U-Boot doesn’t know if you’re running ICS or JB (or non-Android Linux…).

          • ericn August 4, 2013 9:23 am
            #

            Sorry about that. It does look as if you have the bpp=32 in your boot script.

            Can you double check /proc/cmdline after boot?

            You can also look in /sys/class/graphics/fb0/bits_per_pixel.

          • Saif August 4, 2013 2:08 pm
            #

            Hi again,

            I managed to install a terminal on the device and I even succeeded to install XBMC using ADB.
            I couldn’t verify the centent of /proc/cmdline because I’m not a superuser. Is there a way to log as a root?

            I installed some apps, but unfortunately I can’t hear the sound. How can I forward audio stuff to the HDMI?

            Thanks a lot

          • Saif August 7, 2013 11:36 am
            #

            Well I managed to get xbmc working and now I just want to make the Wifi dongle work.
            Is there a tutorial how to do this?

            I got the wi-pi dongle created initially for RaspBerry-PI board.
            I found this on the dongle :

            FCC ID: OYR-COMFAST88

            I didn’t figure out how to get the sound on HDMI in stead of the jack connector.

            Thanks a lot

          • ericn August 8, 2013 4:54 pm
            #

            Hi Saif,

            On the question of Wi-Fi, this is a pain. We keep and publish notes for various Android builds as we do them, but it’s always an ordeal.
            You can find our notes by using Google site search.

            In general, the order is:

            1. Compile the kernel drivers (the easiest part).
            2. Install the firmware if needed.
            3. Hack wpa_supplicant to add vendor extensions and identify the module

            The last step always involves lots of time with adb logcat to figure out what’s going on in the Wi-Fi state machine, though USB devices are easier than SDIO because of the whole reset pin thing.

      • Saif August 4, 2013 7:50 am #

        Hi ericn,

        Indeed I have this version of the bootscript.
        I actually altered this file to make it use 1080p resolution,

        setenv bootargs $bootargs video=mxcfb${nextcon}:dev=hdmi,bpp=32,1920x1080M@60,if=RGB24

        But the output on the screen is aweful.
        Is there a way to verify that the color depth is 24bits?

        Do you have a link to a website where i can get apk of a console ?

        I also get a message when the interface appears :
        UIDs on the system are not consistent, you need to wipe your data partition or your device will be not stable.

        After a while, if i don’t touch the mouse, the screen goes down but never come back even if i move the mouse.

        Finally, is there a way to make the HDMI goes on when I plug a HDMI cord. Becose for now, I have to turn on my Screen before I turn on the Board.

        Thanks alot

  23. quanguoheme August 3, 2013 7:33 am #

    Hi ericn:
    I ignored the above error(repo sync), compile android source code directly. I compile failed,My compiler environment is OK. I was able to successfully compile Freescale android-jb4.2 source.Full build message in the attachment. Some of the information is as follows:
    W/asset (30843): create map from entry failed
    packages/apps/DeskClock/res/values/styles.xml:21: error: Error: No resource found that matches the given name: attr ‘android:layout_gravity’.
    packages/apps/DeskClock/res/values/styles.xml:20: error: Error: No resource found that matches the given name: attr ‘android:layout_height’.
    packages/apps/DeskClock/res/values/styles.xml:19: error: Error: No resource found that matches the given name: attr ‘android:layout_width’.
    packages/apps/DeskClock/res/values/styles.xml:24: error: Error retrieving parent for item: No resource found that matches the given name ‘android:Theme.Holo’.

  24. Andrew August 6, 2013 2:49 pm #

    I have a Ralink USB wifi dongle I want to use with Android on the sabrelite. I was able to use this with Yocto dylan by compiling the kernel module, and copying the firmware binary file to the sabrelite from my ubuntu laptop. I then used wpa_supplicant to set up the network in yocto poky.
    How do I make this work with jelly bean android? Do I just need to compile the kernel module and select wifi from the settings? Does android need the binary firmware file for the ralink chipset and if so, where do i put this file on the android file system. Thanks

    • ericn August 8, 2013 4:59 pm #

      Hi Andrew,

      See this comment for some details. The short answer is that you will likely need a firmware file and will need to hack/extend wpa_supplicant.

      • Andrew August 9, 2013 7:16 am #

        Right. But do you know where on the android fielsystem this firmware file should be placed?

        • ericn August 9, 2013 7:29 am #

          I don’t, but you should be able to figure out from either the U-Boot environment (print command) or reading the code. In versions past (i.MX5x), I’ve seen this placed into un-formatted space such that it has to be written with dd.

  25. Andrew August 6, 2013 2:52 pm #

    I came across this commit on github:https://github.com/boundarydevices/android_device_boundary/commit/4cd3605bcf5969d2115d744fc54c57f0bf3f7844

    Should I have to do something similar for the usb wifi dongle?

  26. sandesh August 9, 2013 4:51 am #

    Hi Eric,

    I want boot Android kernel(boot.img) from SDcard interface and i’m using bootloder(mx6q_sabrelite_android_config), but it fails to boot the kernel with following error:

    ============
    In: serial
    Out: serial
    Err: serial
    Net: got MAC address from IIM: 00:00:00:00:00:00
    FEC0
    Hit any key to stop autoboot: 0
    mmc0 is current device
    booti: bad boot image magic
    fastboot is in init……flash target is MMC:0
    ==============================

    From the code it’s tries to compare the header magic name with “ANDROID!”, which is not correct.
    Do you have any patch which identify SDCARD interface isntead of eMMC interface(i suspect it’s looking for eMMC interface.

    • ericn August 9, 2013 6:29 am #

      Hi Sandesh,

      Our Android images load 6x_bootscript from SD card, which then loads uImage and uramdisk.img separately.

      You’ll need to look at the Freescale docs regarding boot.img.

  27. quanguoheme August 13, 2013 3:32 am #

    I downloaded u-boot-production.tar.gz from http://boundarydevices.com/minor-u-boot-update/. Then I updated it to my sabrelite boards. I chose to use the file is a u-boot.nitrogen6q. However, this file does not run properly. Debug information is as follows:
    I can normally use setenv save the environment variable to flash. After rebooting you can see this environment variable. But when I run sf probe 1 command, a strange message appeared.

    U-Boot 2013.04-00316-g1903727 (Jul 23 2013 – 11:01:15)

    CPU: Freescale i.MX6Q rev1.2 at 792 MHz
    Reset cause: POR
    Board: SABRE Lite
    DRAM: 1 GiB
    MMC: FSL_SDHC: 0, FSL_SDHC: 1
    SF: Detected SST25VF016B with page size 4 KiB, total 2 MiB
    auto-detected panel HDMI
    enable_hdmi: setup HDMI monitor
    Display: HDMI (1024×768)
    In: serial
    Out: serial
    Err: serial
    Net: using phy at 6
    FEC
    Hit any key to stop autoboot: 0
    U-Boot > pri goods
    goods=hgj
    U-Boot > sf probe 1
    SF: Unsupported manufacturer 00
    Failed to initialize SPI flash at 0:1
    U-Boot >
    U-Boot > sf read 12000000 1
    No SPI flash selected. Please run `sf probe’
    U-Boot > version

    U-Boot 2013.04-00316-g1903727 (Jul 23 2013 – 11:01:15)
    arm-none-linux-gnueabi-gcc (Freescale MAD — Linaro 2011.07 — Built at 2011/08/
    10 09:20) 4.6.2 20110630 (prerelease)
    GNU ld (Freescale MAD — Linaro 2011.07 — Built at 2011/08/10 09:20) 2.21.52.20
    110702
    U-Boot >
    U-Boot > mmc dev 1
    mmc1 is current device
    U-Boot > fatload mmc1 1:1 10800000 uImage
    reading uImage
    4340732 bytes read in 207 ms (20 MiB/s)
    U-Boot > fatload mmc1 1:1 12800000 uramdisk.img
    reading uramdisk.img
    213133 bytes read in 31 ms (6.6 MiB/s)
    U-Boot > bootm 10800000 12800000

    …………………
    ………………….
    acc_open
    acc_release
    mxc_sdc_fb mxc_sdc_fb.0: timeout when waiting for flip irq
    mxc_sdc_fb mxc_sdc_fb.0: timeout when waiting for flip irq
    mxc_sdc_fb mxc_sdc_fb.0: timeout when waiting for flip irq
    mxc_sdc_fb mxc_sdc_fb.0: timeout when waiting for flip irq

  28. quanguoheme August 14, 2013 2:19 am #

    I have solved the above problems, and it should use the “sf probe” is not “sf probe 1″. Now I can normally start jb4.2 .the board can show the boot screen, mouse by a hdmi Monitor. I then replaced on an installed android-r13-ga card, this board crashed when it runs to android startup screen. android-r13-ga startup information at here: https://community.freescale.com/message/344772#344772

  29. quanguoheme August 14, 2013 2:20 am #

    I have solved the above problems, and it should use the “sf probe” is not “sf probe 1″. Now I can normally start jb4.2 .the board can show the boot screen, mouse by a hdmi Monitor. I then replaced on an installed android-r13-ga card, this board crashed when it runs to android startup screen. android-r13-ga startup information at here: https://community.freescale.com/message/344772#344772
    can anyone help me?

  30. Pratik August 14, 2013 9:44 am #

    Hi all,
    I am having imx6-jb-sdcard-20130628.img of android jelly bean.It is showing error while booting.
    .
    .
    init: cannot find ‘/system/bin/keystore’, disabling ‘keystore’
    init: cannot find ‘/system/bin/rild’, disabling ‘ril-daemon’
    android_usb: already disabled

    stuck here
    I have already changed u-boot. Before that i was using imx-android-13.4.1. at that time i need to give command from uboot
    fatload mmc 1 10800000 uimage && fatload mmc 1 12800000 uramdisk.img && bootm 10800000 12800000
    i am giving same command now. android JB is booting but it stuck.
    actually i want to boot in a recovery mode which was not present in imx-android-13.4.
    If i should upgrade the bootloader how to do that? & what should be boot environment?

  31. quanguoheme August 14, 2013 9:07 pm #

    hi Pratik:
    to boot jb4.2 you must do this:
    downloaded u-boot-production.tar.gz from http://boundarydevices.com/minor-u-boot-update/.
    Then updated it to sabrelite boards.chose to use the file u-boot.nitrogen6q
    then in uboot : run clearenv && boot
    Because it has changed a lot in jb4.2 environment variable
    run clearenv Command to restore the default environment variables

    U-Boot > pri clearenv
    clearenv=if sf probe || sf probe || sf probe 1 ; then sf erase 0xc0000 0×2000 &&
    echo restored environment to factory default ; fi
    U-Boot >

    and。
    I can’t hear the sound from hdmi。
    I didn’t figure out how to get the sound on HDMI in stead of the jack connector.

  32. quanguoheme August 16, 2013 12:15 am #

    hi:
    I have a usb interface touch screen, how do I add it to android? I added bootargs startup parameters, but the touch screen is still no response.
    Kernel command line: enable_wait_mode = off console = ttymxc1, 115200 vmalloc = 400M consoleblank = 0 tsc2004.calibration = -67247, -764,272499173,324,69283, -8653010,65536 video = mxcfb0: dev = hdmi, bpp = 32, 1280x720M @ 60, if = RGB24 video = mxcfb1: off video = mxcfb2: off fbmem = 48M androidboot.hardware = freescale androidboot.bootdev = sdhci-esdhc-imx.3

  33. Pratik August 16, 2013 9:12 am #

    Hi quanguoheme,

    Thank you very much. I was able to upgrade uboot now it able to boots works smoothly.
    I have an doubt about recovery in android.

    How i can boot into recovery mode of android?
    when i do factory reset board reboots,kernel boots but nothing comes on screen is it normal behavior?

  34. olivierB August 20, 2013 10:46 am #

    Hi all,

    I have to use wi-fi access point but it does not work.
    A soon as i try to enable the portable Wi-fi hotspot in the settings, the checkbox becomes disable and display “Turning hotspot on …” forever.
    Moreover,the Wi-fi client mode does not work after that.
    The logcat shows an illegal state exeption occured in the WifiStateMachine :
    Exception in softap start java.lang.IllegalStateException: command ’11 softap fwreload wlan0 AP’ failed with ’400 11 Softap operation failed (Cannot assign requested address)’

    Have you ever heard about this ?
    Do you have any idea about this issue ?

    Thanks

  35. jfas August 23, 2013 9:13 am #

    Hi
    I have installed the image on my sabrelite. I use a HDMI screen. The problem I am seeing is that HDMI audio is no longer working where it was working fine with previous android version. I have googled about this and I can see this seems like a known problem with jelly bean. But I didn’t find a fix for it. Any ideas?
    Thanks a lot

    • ericn August 23, 2013 1:44 pm #

      Hi,

      This version of Android is configured to use the analog output for audio. In order to re-route things to HDMI, you’ll need to hack libhardware/ to remove the SGTL5000 default.

  36. quanguoheme August 25, 2013 9:59 am #

    hi :
    About hdmi problem: I have two hdmi monitor, one 63-inch and one 32 inch. sabrelite with 32-inch hdmi monitor display properly. But with the 63-inch display is a bit strange. Desktop look too great, can only see part of the home button. I tested using the 720P or 1080P have the same problem. an first I suspect that monitor problems. But using my phone connected to the monitor via hdmi interface is normally display the desktop. Does anyone know how to solve this problem?

    • ericn August 25, 2013 10:32 am #

      You should check in /sys/class/graphics/fb0/mode to see what mode is being negotiated on the 63-inch monitor.

      If you cat /sys/class/graphics/fb0/modes, you’ll see the resolutions supported by the monitor.

  37. quanguoheme August 26, 2013 12:06 am #

    root@android:/ #

    root@android:/ # cat /sys/class/graphics/fb0/mode

    S:1920x1080p-50
    root@android:/ # cat /sys/class/graphics/fb0/modes

    S:1920x1080p-50
    S:1280x720p-50
    S:720x576p-50
    S:1920x1080p-60
    S:1280x720p-60
    S:720x480p-60
    S:720x480p-60
    S:640x480p-60
    U:1680x1680p-60
    S:1600x1200p-60
    U:1440x1440p-60
    S:1280x1024p-60
    S:1280x960p-60
    U:1152x864p-60
    V:1152x864p-75
    V:1024x768p-60
    V:800x600p-72
    V:800x600p-60
    V:640x480p-75
    V:640x480p-72
    V:640x480p-60
    U:720x400p-70
    D:1920x1080p-60
    U:640x480p-60
    root@android:/ #
    Displayed content is beyond the scope display. I use another device is available in this 63-inch hdmi-monitor .there must be a driver problem at the sabrelite .

  38. quanguoheme August 26, 2013 7:56 pm #

    In 4.2,is there realization android button functions, such as: power down,power on. sleep?

    • ericn August 26, 2013 8:05 pm #

      Yes. These are mapped to KEY_POWER, which we have mapped to the Search button because of issues with the ONOFF signal (see this post on i.MX Community for details about that pin (only interrupts on release).

  39. quanguoheme August 27, 2013 3:49 am #

    hi ericn:
    after test , the the ONOFF button cannot be used in jb4.2.but other button can be used.
    I would like to get a software button that is used to shut down android .can You give me an idea.

  40. janderson August 29, 2013 8:26 am #

    Hi Everyone,

    I am having issues getting ADB to recognize the device in Windows, am I missing something. I have USB debugging enabled, Windows detects an ADB Interface is plugged in, but with ADB running a device is never listed.

  41. Shrikant Bobade September 6, 2013 1:55 am #

    In JB, is there nfs boot support well like ICS.

    has anyone tried booting JB by NFS on imx6q sabrelite ?

  42. ericn September 6, 2013 7:35 am #

    We haven’t done this at Boundary Devices. You could probably construct an image by overlaying the root, system, and data partitions though.

    You’ll also likely need to remove the mount statements from init.rc.

  43. ash September 9, 2013 3:23 pm #

    Hi All,

    I have 2 questions:
    1. What are the requirements for build environment? Ubuntu 10.04 server or Ubuntu 12.04 server?
    2. What is the total size of the of the repository?
    repo init -u git://github.com/boundarydevices/imx-android-r13.4-ga.git -b jb-1.1.0
    repo sync

    So far I have downloaded 5GB of source code. What is the total size?

    Thanks

    • ericn September 9, 2013 3:28 pm #

      The build requirements are largely defined by the AOSP, but we’re building successfully on Ubuntu 13.04 (we had to pull in some patches from the net for this).

      Running some quick du commands, it appears that the pre-build footprint is ~26GB and that each build directory eats another 8-9GB.

      • ash September 9, 2013 4:43 pm #

        Thanks.

        Last question. Are you using 64bit OS or 32bit?
        As per instructions on AOSP – “For Gingerbread (2.3.x) and newer versions, including the master branch, a 64-bit environment is required. Older versions can be compiled on 32-bit systems.”

        I need to recompile Jellybean and at the moment I do not have access to 64bit environment.

        • ericn September 9, 2013 4:58 pm #

          I’m using 64-bit Ubuntu 13.04.

  44. ashish September 11, 2013 8:40 pm #

    Hi Eric,

    We are trying to get a 2nd network port added to the i.MX6 board. For this we are trying to use a PCIe to Ethernet card.

    I have Jellybean/ubuntu running on this board. How can we get the PCIe to Ethernet working to give us access to the 2nd network port?

    Your advice will be appreciated.

    Thanks

  45. quan September 14, 2013 9:53 am #

    is OV5642 auto-focus ok on android jb4.2 ?

  46. quan September 14, 2013 11:58 pm #

    hi Eric:
    Probably because I was in China ,I have been trying to download your source for three months, never succeeded.
    when I run ‘repo sync’ it is always prompt me wrong, I delete this directory given error, then run the repo sync again ,no error given, but again I run repo sync and the same error was given, I can not successfully compiled source code. Can you tell me the efficacy of each source directory, let me know what a directory can not download properly.

  47. Jeff Krupp September 16, 2013 6:51 am #

    Do you have anything that shows how to access the CAN bus in an Android app? Thanks.

    • Jeff Krupp September 17, 2013 5:44 am #

      To clarify, I know a jni is required, but is there a CAN driver already, documented?, or is there nothing for CAN. I don’t see any /dev/can0, but maybe it is labeled something else? Any suggestions are helpful. Thanks.

      • ericn September 17, 2013 6:26 am #

        Hi Jeff,
        The CAN device is configured as a network device, and can be manipulated with ifconfig, though Android’s version is funky and you might want to use busybox ifconfig.

  48. ash September 16, 2013 4:03 pm #

    Hi eric,

    Can you clarify the difference between Nitrogen6x-eng and Nitrogen6x-user?
    Maybe I have missed the section which explains the difference and am not able to find it on the website.

    Thanks

    • ericn September 16, 2013 4:51 pm #

      Hi Ash,

      We don’t have a description on our site, since this is a feature of the Android build system (Google “android target_build_variant”).

      In practice, we only build the “-eng” variants, since our target is a debuggable build.

      • ash September 16, 2013 5:10 pm #

        Thanks for the clarification Eric.

  49. ash September 22, 2013 9:05 pm #

    Hi Eric,

    I am trying to use ADB with Android JB. When I do adb devices I am shown the following:
    List of devices attached
    0123456789ABCDEF offline

    Have you had this issue?

    One user has indicated that he/she had to modify ‘init.rc’ (set ro.adb.secure to 0) in order to get ADB working.

    Is this still the case? I do not have serial access at the moment. Is there any other way to start using ADB?

    Thanks

    • ericn September 23, 2013 6:49 am #

      Hi Ashish,

      This normally occurs until you approve the connection with an on-screen dialog. Are you seeing the connection prompt on the display of the Nitrogen6x?

      We have also seen the need to kill and re-start the ADB server when switching between devices.

      • ash September 23, 2013 4:58 pm #

        Hi Eric,

        Jellybean detects that USB is plugged in. In settings ‘Developer options’ USB debugging is enabled.
        I also restarted ADB but I still get the same message.

        In Device Manager, I can see ‘Android Phone’ and the device being reported is ‘Android Composite ADB Interface’.

        1. Do you have the same information as above under Device Manager?
        2. Are there specific ADB drivers that I need for this board? At this stage Windows has installed it’s own drivers.

        Thanks

        • ericn September 23, 2013 5:08 pm #

          Ahah! Windows!

          We’ve had lots of reports of trouble under Windows, and each of them was ultimately resolved by downloading the latest SDK and in particular, the latest USB driver.

          • ash September 23, 2013 9:22 pm
            #

            It works on linux with the latest SDK. I have a feeling it will also work on Windows once I download the latest SDK. I will do this later. For now ADB is working which is good for me.

            Question:
            Did you manage to solve the issue with the message that is shown everytime Android boots up -> ‘UIDs are inconsistent’. In an earlier post you had mentioned that you were going to investigate this. Please let me know your findings.

            Thanks

          • ash September 24, 2013 1:25 am
            #

            Hi Eric,

            It seems my earlier post vanished in thin air. Retrying again.

            OK ADB is working on linux with the latest SDK. This will suffice the needs for now. I will try Windows later (most prob it is the SDK as you mentioned).

            Question:
            In one of your earlier posts you had mentioned that one of the taks on your ‘to-do’ list is to investigate the inconsistent UIDs popup at Android boot up (http://boundarydevices.com/android-jellybean-on-i-mx6-with-no-disclaimers/#comment-42324).

            Do you have an update for this?

            Cheers

          • ericn September 24, 2013 6:30 am
            #

            Hi Ash,

            Comments on the blog are moderated (have to be approved), so your earlier post was simply waiting for us to wake up in Phoenix.

            We have investigated the inconsistent UIDs message at boot, but don’t yet have a solution. The error stems from improper ownership of the RAM disk used for the browser cache. It’s (re)created on each boot and needs to be owned by the browser’s UID.

            Unfortunately, the UID for the browser isn’t deterministic. It is allocated dynamically during the first use of the browser, and the proper path isn’t yet clear.

            We intend to address this in the upcoming 4.3 release.

          • ash September 24, 2013 5:58 pm
            #

            Thanks for the update. What is the ETA for 4.3?

          • ericn September 24, 2013 6:12 pm
            #

            Kernel (alpha) has arrived on git.freescale.com and we’ve merged/booted that piece.

            Still awaiting word about the userspace…

          • ash September 24, 2013 7:51 pm
            #

            Thanks for the feedback. Will keep an eye out.

  50. shin September 23, 2013 3:38 am #

    Hello,

    I checked out jellybean source code. I saw Kernel compile error when i build it.
    Below is error message.

    arch/arm/mach-mx6/board-mx6_nitrogen6x.c: In function ‘mx6_sabrelite_board_init’:
    arch/arm/mach-mx6/board-mx6_nitrogen6x.c:1218:2: error: ‘pwm3_data’ undeclared (first use in this function)

    I checked source code of board-mx6_nitrogen6x.c and pwm3_data is defined with Kernel configuration.
    #if defined(CONFIG_MXC_CAMERA_OV5640_MIPI) || defined(CONFIG_MXC_CAMERA_OV5640_MIPI_MODULE)
    static struct mxc_pwm_platform_data pwm3_data = {
    .clk_select = PWM_CLK_HIGHPERF,
    };
    ….

    But, current Kernel configuration doesn’t have about OV5640_MIPI configuration.
    So, i comment out for error happened code. After that Kernel compile succeed.

    Could you check this why error happen in my case?
    My “repo sync” has problem or Original source has problem?
    Thanks

    • ericn September 23, 2013 6:52 am #

      Hello Shin,

      I’m sorry. It appears that I messed up non-MIPI builds when fixing MIPI, and I’ll push a patch shortly.

    • ericn September 23, 2013 7:05 am #

      Hello Shin,

      I just pushed a patch to address this. You should be able to repo sync and build again, though you’ll need to revert your local change first.

      ~/myandroid/kernel_imx$ git reset --hard HEAD
      ~/myandroid/kernel_imx$ git pull
      ~/myandroid/kernel_imx$ git show
      
  51. quanguoheme September 24, 2013 7:46 am #

    hi ericn:
    I used ” m DEFCONF=nitrogen6x_mipi_defconfig” to compile source successfully. but why I cannot see “CONFIG_MXC_CAMERA_OV5640_MIPI =y” at kernel_imx/.config

  52. ash September 24, 2013 10:09 pm #

    Hello Eric,

    Sorry one more issue.

    Around end of 2012, you posted a note about ‘inconsistency in ping times’.
    Link: http://boundarydevices.com/wait-a-second-hopefully-less/

    I have checked my iMX6 board and verified that enable_wait_mode=off in uboot and also by doing:
    cat /proc/cmdline

    However the stats of running the following ping command is very poor (24% packet loss). Can you shed some light on what could be causing this?

    system@ubuntu:~$ ping 192.168.104.22 -i.2 -c500
    …..
    — 192.168.104.22 ping statistics —
    500 packets transmitted, 378 received, 24% packet loss, time 100720ms
    rtt min/avg/max/mdev = 0.207/0.537/0.743/0.122 ms

    • ericn September 25, 2013 6:57 am #

      Hi Ash,

      Can you confirm the version of U-Boot you’re using? While looking for the cause of small (~1%) amounts of packet loss for another customer recently, we found that he was missing this patch.

      This patch is included in main-line U-Boot and our our latest production release.

      • ash September 25, 2013 3:33 pm #

        Hi Eric,

        Fixed. I had old u-boot running:
        U-boot 2013.04-00309-g0086840 (June 20 2013 – 11:47:02)

        Updated u-boot as per the link you provided:
        U-boot 2013.07-00047-gaf468ad (Aug 26 2013 – 09:35:41)

        Executed flood ping and results are good.

        system@ubuntu:~/iMX6/jellybean$ sudo ping -f 192.168.104.22
        PING 192.168.104.22 (192.168.104.22) 56(84) bytes of data.
        ……….^C
        — 192.168.104.22 ping statistics —
        648634 packets transmitted, 648624 received, 0% packet loss, time 98958ms
        rtt min/avg/max/mdev = 0.073/0.126/0.346/0.020 ms, ipg/ewma 0.152/0.123 ms

        Thanks for the prompt help.

        Finally,
        When Android is loading, there is a splash image displaying 4 Tux? How can we modify this splash screen?

        • ericn September 25, 2013 3:49 pm #

          Hi Ash,

          I’m glad to hear that a fresh U-Boot fixed up your pings…

          I’m not sure I can help on the penguin side (’cause I like Tuxen ;)).

          Seriously though, you can use menuconfig to remove the Linux logo (under Drivers/Graphics/…), or you can edit kernel_imx/.config or the source kernel_imx/arch/arm/configs/nitrogen6x_defconfig and change the line that says CONFIG_LOGO=y to # CONFIG_LOGO is not set.

          • ash September 25, 2013 11:37 pm
            #

            proof of concept for kiosk mode; hence the need for customization

  53. quanguoheme September 24, 2013 11:47 pm #

    hi ericn :
    I have downloaded your android source by a VPN service. But when I run “repo sync ” There are still some strange message :

    Fetching project android_bootable_recovery
    Fetching project android_device_boundary
    Fetching projects: 100% (341/341), done.
    Syncing work tree: 100% (341/341), done.

    external/ppp/: discarding 9 commits
    frameworks/rs/: discarding 2 commits

    But, Now I can compile source successfully.

    I received the boards you sent me by UPS. Even though the address is wrong. I know a truth: if I write Chinese address here, you can not see it on your computer. Unless I send you a picture that contains the address

    • ericn September 25, 2013 6:59 am #

      Hi Quan,

      The discarding commits thing is typical when running repo sync, especially for the AOSP components.

      Sorry about the mailing address. We should all be using the Brits’ system, where every address can be expressed as a number.

  54. quanguoheme September 25, 2013 7:48 am #

    I can not make your 5MP-MIPI-Camera to display images in the sabrelite-board . I do not know where the problem is.
    I follow your way that compile source using command ” m DEFCONF=nitrogen6x_mipi_defconfig” ,But I cannot find “CONFIG_MXC_CAMERA_OV5640_MIPI =y” at kernel_imx/.config and /proc/config.gz .
    Then, I recompile the kernel using your configuration file “/arch/arm/configs/nitrogen6x_mipi_defconfig” .But the 5MP-MIPI-Camera still cannot work.

    • ericn September 25, 2013 8:44 am #

      Did you build first using the default nitrogen6x_defconfig? I don’t think that dependency information is in place for the kernel configuration, so you’d likely not get a re-compile based on a follow-up m with new parameters.

      I just built from a clean repo with the command-line above and see the proper configuration.

      By the way, you can run the configuration step (and menuconfig) by hand like so:

      # select nitrogen6x_mipi_defconfig
      ~/myandroid$ make -C kernel_imx  ARCH=arm \
            CROSS_COMPILE=`pwd`/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi- \
            nitrogen6x_mipi_defconfig
      # verify with menuconfig
      ~/myandroid$ make -C kernel_imx  ARCH=arm \
            CROSS_COMPILE=`pwd`/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi- \
            menuconfig
      
    • bkuehner December 20, 2013 1:44 pm #

      I had a similar problem where I built with the default config (no MIPI), then rebuilt with DEFCONF=nitrogen6x_mipi_defconfig
      and did not get the MIPI enable into the .config for the kernel, so there was no MIPI enabled. Even doing a clean and rebuild did not do it.

      So I edited arch/arm/configs/nitrogen6x_defconfig to have
      CONFIG_MXC_CAMERA_OV5640_MIPI =y
      and it built with proper MIPI support.

      I haven’t tried Eric’s manual config select with:
      make -C kernel_imx ARCH=arm \
      CROSS_COMPILE=`pwd`/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi- \
      nitrogen6x_mipi_defconfig

      but I would expect that to work too. I’m including this here mostly to help anyone else in the same situation, since the other posts here definitely helped me sort things out.

  55. shin September 25, 2013 7:13 pm #

    Hi ericn,

    I did update all system image which were created through mksdcard.sh
    But, i met problem when i run “run upgradeu” or “run updateu” in u-boot prompt.
    Unfortunately, i don’t remember exactly which command ran.
    After that, my EVM doesn’t boot successfully anymore. I can see U-Boot compile date and linux logo in HDMI display. But stop there. No progress. And i can’t see any log through Console window(rs-232).
    I tried some methods. But the result was same.
    1. I tried creating new image through mksdcard.sh.
    2. Formatted micro SD and used imx6-jb-sdcard-20130628.img.gz .

    Could help me how to fix this problem?
    Thanks,

    • ericn September 26, 2013 8:22 am #

      Hi Shin,

      You must have run upgradeu, since there is no updateu ;).

      If you’re seeing U-Boot on your display, you must be getting data out of the serial port as well. Please double-check the connections and your RS-232 adapter.

      Also note that it isn’t necessary to run upgradeu when switching images. In the normal case, you should leave U-Boot alone until you need a specific new feature or bug fix.

      That said, the U-Boot provided by Android should work for you in the normal case.

      Are you running a Nitrogen6X or SABRE Lite (BD-SL-i.MX6) with the regular 1GiB of RAM or a variant?

      • shin September 28, 2013 12:05 am #

        Hello ericn,

        I checked my rs-232 cable, It was working well with other board.
        I don’t think that this issue is rs-232.
        And i can see only Linux logo and u-boot version and compile date like below.
        (U-Boot 2013.10-rc1-05446-g75ad664 (Sep 23 2013 – 19:03:28)
        Just display above line in HDMI display.
        Is it normal? I think boot has some problem.

        The build date differ with original your SD image because i updated it from mine.

        And i can see above Linux logo and log without MicroSD.
        it means that CPU boot from serial flash. And i think that serial flash was abnormally fused when i run upgradeu.
        Because i saw Jellybean was working before run updadeu.
        My assume is correct?

        Did you fuse your serial flash when you release your EVM board?
        What’s purpose of serial flash?

        If serial flash is fused abnormally because of “upgradeu”, how can i fix it?
        Now, i can’t use your EVM board.

        This issue is very urgent for me.

        Thanks,

        • ericn September 28, 2013 8:11 am #

          Hi Shin,

          Nothing in upgradeu touches fuses. The sources for the 6x_upgrade script are here on Github.

          I’m dumbfounded about how your serial port stopped functioning with any of our stock U-Boot versions. We have had some customers modify U-Boot to route the console to another serial port, but we haven’t done so.

          Can you go through the unbricking process using the latest production U-Boot?

          If the display is functional, do you get a U-Boot prompt on the display if you boot with no SD card present? If so, can you issue commands with a USB keyboard?

          • woogeunshin September 30, 2013 4:27 am
            #

            Hello Eric,

            Thanks for your support. I fused serial flash successfully as your blog.
            I’m not sure what happened in my case. I’ll check this again after another job.
            Thank you again.

  56. shin September 25, 2013 7:14 pm #

    Hi ericn,

    I did update all system image which were created through mksdcard.sh
    But, i met problem when i run “run upgradeu” or “run updateu” in u-boot prompt.
    Unfortunately, i don’t remember exactly which command ran.
    After that, my EVM doesn’t boot successfully anymore. I can see U-Boot compile date and linux logo in HDMI display. But stop there. No progress. And i can’t see any log through Console window(rs-232).
    I tried some methods. But the result was same.
    1. I tried creating new image through mksdcard.sh.
    2. Formatted micro SD and used imx6-jb-sdcard-20130628.img.gz .

    Could you help me how to fix this problem?
    Thanks,

  57. ash September 26, 2013 4:28 am #

    Hello Eric,

    I have read your post on ‘displaying splash screen with uBoot.
    http://boundarydevices.com/displaying-a-splash-screen-with-u-boot/

    But no luck. I have created a simple image using Gimp (1024×600 and 640×480). After following the instructions on your post, the only change I see is that the Tux moves to the centre of the screen.

    Is it possible to get a copy of water-conservation1024x600.bmp.gz which you used so that I can use it as a trial?

    • ash September 29, 2013 10:13 pm #

      Hi Eric,

      Did you miss this post?

      • ericn September 30, 2013 5:14 pm #

        Hi Ash,

        I didn’t miss the post, but I did forget to respond.

        I don’t have the water-conversation... image, but I just uploaded a logo of ours that I created using Gimp as a 24-bit uncompressed bitmap:

        I loaded it and displayed it using dhcp like so:

        U-Boot > dhcp 10008000 192.168.0.1:BoundaryDevices.bmp.gz
        BOOTP broadcast 1
        DHCP client bound to address 192.168.0.31
        Using FEC device
        TFTP from server 192.168.0.1; our IP address is 192.168.0.31
        Filename 'BoundaryDevices.bmp.gz'.
        Load address: 0x10008000
        Loading: #######
        	 831.1 KiB/s
        done
        Bytes transferred = 33219 (81c3 hex)
        U-Boot > bmp i 10008000
        Image size    : 372 x 526
        Bits per pixel: 24
        Compression   : 0
        U-Boot > bmp d 10008000
        
        • ash October 1, 2013 4:40 am #

          Hi Eric,

          Many thanks. I have been able to get the uboot splash working. However, I had to change the address location from 10000000 (as mentioned in your post) to 10008000. If I use the values of 10000000 and 12000000, the tux shows up.

          ext2load mmc 1 10008000 /filename.bmp.gz
          sf probe
          sf erase c2000 +${filesize}
          sf write 10008000 c2000 ${filesize}
          setenv splashimage 10008000

          saveenv

          • ericn October 1, 2013 6:48 am
            #

            Glad to hear it, and thanks for the notes.

  58. ash October 1, 2013 4:45 am #

    Hello Eric,

    I have got the source for jellybean compiling. I have the ‘out’ directory created which contains the uImage and other necessary files to create the image for sdcard/sata drive.

    Question. What are the steps required to transfer the ‘out’ directory to the SATA so that I can load my build of the Android with changes to kernel?

    Thanks

  59. sanmanik October 8, 2013 6:17 am #

    Any dates for the android 4.3 release for FreeScale i.MX6 boards ? Please do let me know.

    • ericn October 8, 2013 7:21 am #

      Hi Sanmanik,

      This work is in progress.

      If you subscribe to the blog, you’ll get an e-mail when it’s ready.

  60. Abhay October 17, 2013 7:43 am #

    Hi Eric,

    You mention that you have already run dexopt on the image that you have released. I am wondering if you could give me some guidance regarding the same, or a reference to some documentation?

    The thing is, we are building our own image, and it is terribly slow to boot the first time. I tried to search for some documentation for optimization of the release image, but could not find anything useful.

    Any tips will be greatly appreciated. Thanks for all your hard work. Keep it up!

    Abhay

    • ericn October 17, 2013 8:31 am #

      Thanks Abhay,

      When I say that dexopt has been run, I mean that Android ran it automatically.

      A while back, a customer sent a build command-line that included something like PREDEXOPT=1 or something, but I seem to have lost the notes.

      Not sure if/how this can be done on the development machine, we typically just boot the image and walk away for a while.

  61. jnevens October 22, 2013 4:05 am #

    I have a problem with the mksdcard.sh script, the partitioning fails:

    device/boundary/mksdcard.sh /dev/mmcblk0 nitrogen6x
    ———build SD card for product nitrogen6x
    removable disk /dev/mmcblk0
    reasonable disk /dev/mmcblk0, partitions /dev/mmcblk0p1…
    umount: /dev/mmcblk0p1: not mounted
    umount: /dev/mmcblk0p2: not mounted
    umount: /dev/mmcblk0p3: not mounted
    umount: /dev/mmcblk0p4: not mounted
    umount: /dev/mmcblk0p5: not mounted
    umount: /dev/mmcblk0p6: not mounted
    umount: /dev/mmcblk0p7: not mounted
    umount: gvfs: not found
    1+0 records in
    1+0 records out
    1024 bytes (1.0 kB) copied, 0.00408502 s, 251 kB/s
    Checking that no-one is using this disk right now …
    OK

    Disk /dev/mmcblk0: 120576 cylinders, 4 heads, 16 sectors/track

    sfdisk: ERROR: sector 0 does not have an msdos signature
    /dev/mmcblk0: unrecognized partition table type
    Old situation:
    No partitions found
    New situation:
    Units = mebibytes of 1048576 bytes, blocks of 1024 bytes, counting from 0

    Device Boot Start End MiB #blocks Id System
    /dev/mmcblk0p1 * 0+ 19 20- 20479+ b W95 FAT32
    /dev/mmcblk0p2 20 39 20 20480 b W95 FAT32
    /dev/mmcblk0p3 40 2087 2048 2097152 85 Linux extended
    /dev/mmcblk0p4 2088 3767 1680 1720320 83 Linux
    /dev/mmcblk0p5 40+ 551 512- 524287+ 83 Linux
    /dev/mmcblk0p6 552+ 1063 512- 524287+ 83 Linux
    /dev/mmcblk0p7 1064+ 1073 10- 10239+ 83 Linux
    /dev/mmcblk0p8 1074+ 1083 10- 10239+ 83 Linux
    Successfully wrote the new partition table

    Re-reading the partition table …

    If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
    to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
    (See fdisk(8).)
    brw-rw—- 1 root disk 179, 1 Oct 22 12:57 /dev/mmcblk0p1
    brw-rw—- 1 root disk 179, 2 Oct 22 12:57 /dev/mmcblk0p2
    brw-rw—- 1 root disk 179, 3 Oct 22 12:57 /dev/mmcblk0p3
    brw-rw—- 1 root disk 179, 4 Oct 22 12:57 /dev/mmcblk0p4
    brw-rw—- 1 root disk 179, 5 Oct 22 12:57 /dev/mmcblk0p5
    brw-rw—- 1 root disk 179, 6 Oct 22 12:57 /dev/mmcblk0p6
    brw-rw—- 1 root disk 179, 7 Oct 22 12:57 /dev/mmcblk0p7
    ————–missing /dev/mmcblk0p8

    If I check the partition table later manually:
    fdisk -l /dev/mmcblk0

    Disk /dev/mmcblk0: 3951 MB, 3951034368 bytes
    4 heads, 16 sectors/track, 120576 cylinders, total 7716864 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk identifier: 0×00000000

    Device Boot Start End Blocks Id System
    /dev/mmcblk0p1 * 1 40959 20479+ b W95 FAT32
    /dev/mmcblk0p2 40960 81919 20480 b W95 FAT32
    /dev/mmcblk0p3 81920 4276223 2097152 85 Linux extended
    /dev/mmcblk0p4 4276224 7716863 1720320 83 Linux
    /dev/mmcblk0p5 81921 1130495 524287+ 83 Linux
    /dev/mmcblk0p6 1130497 2179071 524287+ 83 Linux
    /dev/mmcblk0p7 2179073 2199551 10239+ 83 Linux
    /dev/mmcblk0p8 2199553 2220031 10239+ 83 Linux

    I’m just using ubuntu 12.04LTS x86_64

    Does someone have any idea how to fix this?

    Thanks,

    Jasper

    • ericn October 22, 2013 8:43 am #

      Hi Jasper,

      This is the Achilles heel of the mksdcard.sh script. Some of it appears timing dependent, because you need to wait for the kernel to recognize changes in the partition table.

      Can you add a sleep 1 statement after the sfdisk command in mksdcard.sh.

      • jnevens October 23, 2013 2:33 am #

        Hi eric,

        I have added a sleep there, but that makes no difference. Also ejecting the card, reconnecting, … doesn’t make any difference. I also tried to do the partitioning manually with gparted, and had the same result: the partition table is correct, but linux doesn’t recognize all the partitions. It looks like it has nothing to do with the script.

        It worked successful without the MISC partition, because that partition is not really needed. I will investigate the problem later. I do have a working android now.

  62. embedsri November 6, 2013 4:41 am #

    HI Eric,
    We’ve been seeing a build error :

    expressions [-Wsign-compare]
    external/speex/libspeex/resample.c:943:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    target arm C++: libharfbuzz <= external/harfbuzz/src/harfbuzz-indic.cpp
    In file included from system/core/libusbhost/usbhost.c:50:0:
    system/core/include/usbhost/usbhost.h:26:27: fatal error: linux/version.h: No such file or directory
    compilation terminated.
    make: *** [out/target/product/generic/obj/SHARED_LIBRARIES/libusbhost_intermediates/usbhost.o] Error 1
    make: *** Waiting for unfinished jobs….

    I tried the following:
    1. sudo apt-get install linux-headers-$(uname -r).
    2. sudo update-alternatives –config java to select oracle-java6.
    But still no fix. Any ideas, suggestions?? Thanks very much.

    • ericn November 6, 2013 6:40 am #

      Hi Sri,

      Have you verified all of the build prerequisites as listed in this page?

  63. embedsri November 6, 2013 8:46 am #

    Hi Eric,
    Which page? I don’t see anything about build prerequisities on the android-jellybean-on-i-mx6-with-no-disclaimers page.

    • ericn November 6, 2013 8:56 am #

      Sorry Sri,

      I posted the response in the wrong place this morning and lost this link when I corrected it.

      I think I was under-caffeinated when answering messages this morning.

  64. Daniel November 18, 2013 8:13 am #

    Hey,
    I still work with this ‘old’ branch. I couldn’t find any information about ota updates, but I’ve read that it still isn’t available in 4.3. If this is the case I would be happy if I could get some informations about the problems that are responsible for ota not working. Is it a problem with the recovery or u-boot? I can get to the recovery and see the menu with the “apply update from ADB” but cannot click it with the Android Button Board.
    I also found the FslOTA app in /packages/apps. If I interpretied this code it fetches a ‘$product.build.prop’ file and a ‘$product.ota.zip’ from the server. Is this correct so far? ( I cannot find any documentation for this feature, do you have any? I’ve seen you commited some bug fixes to this repo)
    If you could name the problems with OTA I maybe could help fixing theese issues (OTA is on higher priority for me).

    • ericn November 18, 2013 12:45 pm #

      Hi Daniel,

      I think you have a pretty good handle on things.

      The primary bits needed to implement OTA are just time spent reading, and figuring out what to configure. For example, what server(s) are used to house updates?

      In other words, we’re not dealing in the realm of bugs here, just omissions.

      I’m not sure why you’re having trouble with the button board. I’ll test that out when I get a chance. From memory, the key bindings were a bit weird, and it was easiest to navigate with a USB keyboard.

      It’s been a while since I visited this though.

      • Daniel November 19, 2013 3:58 am #

        Thanks eric,
        I’m still struggling to get the sideload feature running. I simply can’t select it in Recovery Mode. I tested the Buttons on the Button Board once again but can only show/hide the Menu and navigate Up/Down. I connected a USB Keyboard as you hinted and it gets recognized by the kernel (Serial Console prints: ‘generic-usb 0003:046A:0021.0003: input,hidraw0: USB HID v1.11 Keyboard [HID 046a:0021] on usb-fsl-ehci.1-1.1/input0′) but I can only toggle the NumLock LEDs. All keys get ignored by the Recovery. I’ve read in the code of the Recovery that: “A Keypress is “registered” when it is pressed and the released, with nmo other keypresses or releases in between” But still had no Luck with that knowledge of pressing Keys one by one.
        Could you please test if you have any Luck with the Button Board or any USB Keyboard?

      • Daniel November 19, 2013 5:02 am #

        Just as a quick update: I have now simply added case KEY_MENU to bootable/recovery/default_device.cpp in Line 64. Is is just a quick fix, but it works. It seems that KEY_MENU and KEY_ENTER are both mapped to the same Key on the Button Board (HOME). and thus, it toggles only the menu. I am now able to sideload something on the device over adb. AFAIK an OTA Update is already possible by utilizing the FslOTA App (I’m gonna try this ASAP and report my results back) or by creating a custom App that fits your needs, downloads a Zip from a Server and executes RecoverySystem.verifyPackage and RecoverySystem.installPackage. thats what I’m going to do next.

      • Daniel November 19, 2013 7:01 am #

        Hey eric, Sorry to spam this post again but I have noticed something more:
        Booting the recovery invokes another init.rc which gives another PID for the USB Device. Under Linux you may not even notice this, but if you work with Windows you have to add the PID to the Google USB driver. I now have theese two Lines un my android_winusb.inf:

        ;Nitrogen6x
        %SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02
        %SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_0001

        I tried to change the PID in the init.rc script but this didn’t work.

        Do you know whats the difference between ‘%SingleAdbInterface%’, a ‘%CompositeAdbInterface%’ and a ‘%SingleBootLoaderInterface%’? I have no expirience with USB devices under Windows. Have you any Idea since it works with moth: Single and Composite.

        Greetings Daniel

  65. Shin January 20, 2014 6:40 pm #

    I did some add and modify source code(HAL, Kernel) to use USB Bluetooth dongle device with Nitrogen6x board.
    But i can’t see Bluetooth control menu in Settings menu.
    I just see WiFi control menu.

    I want to control Bluetooth through setting UI.
    Could you help me?

    • Shin January 20, 2014 10:05 pm #

      I found how to disable Bluetooth function in Nitrogen package.
      —> /system/etc/permissions/required_hardware.xml.

      And i modified it and i can see Bluetooth menu in Setting menu.

      Thank you,

      • ericn January 21, 2014 7:08 am #

        Thanks for sharing your notes, Shin.

  66. Pratheesh February 10, 2014 10:26 am #

    Hi all,

    I have a question, is Miracast sink enabled on the prebuilt images?

    Thanks in advance

    • ericn February 10, 2014 10:49 am #

      Sorry, but no.

      We haven’t explored Miracast with either the TiWi module on Nitrogen6X or the Broadcom 4331 used with Nitrogen6_Lite.

      • Pratheesh February 10, 2014 10:58 am #

        Oh OK,
        Thanks ericn

  67. Andrew June 29, 2014 11:17 pm #

    I am using Boundary Devices 4.0.4 Android build as a reference for an off the shelf board called the RM3 from bluechip tech. I have u-boot and android kernel booting but I get the following when trying to bring up the filesystem:

    init: property (null) has no value for writing to /sys/class/android_usb/android0/iManufacturer
    init: property (null) has no value for writing to /sys/class/android_usb/android0/iProduct
    init: cannot find '/system/bin/sh', disabling 'console'
    init: cannot find '/system/bin/servicemanager', disabling 'servicemanager'
    init: cannot find '/system/bin/vold', disabling 'vold'
    init: cannot find '/system/bin/gpu_init.sh', disabling 'gpu_init'
    init: cannot find '/system/bin/netd', disabling 'netd'
    init: cannot find '/system/bin/dispd', disabling 'dispd'
    init: cannot find '/system/bin/debuggerd', disabling 'debuggerd'
    init: cannot find '/system/bin/surfaceflinger', disabling 'surfaceflinger'
    init: cannot find '/system/bin/app_process', disabling 'zygote'
    init: cannot find '/system/bin/drmserver', disabling 'drm'
    init: cannot find '/system/bin/mediaserver', disabling 'media'
    init: cannot find '/system/bin/dbus-daemon', disabling 'dbus'
    init: cannot find '/system/bin/installd', disabling 'installd'
    init: cannot find '/system/etc/install-recovery.sh', disabling 'flash_recovery'
    init: cannot find '/system/bin/keystore', disabling 'keystore'
    init: cannot find '/system/bin/rild', disabling 'ril-daemon'
    init: cannot find '/system/bin/sh', disabling 'console'
    android_usb: already disabled
    adb_open
    mtp_bind_config
    adb_bind_config
    android_work: sent uevent USB_STATE=DISCONNECTED
    android_work: sent uevent USB_STATE=CONNECTED
    android_usb gadget: high speed config #1: android
    android_work: sent uevent USB_STATE=CONFIGURED
    

    ‘mmc part’ u-boot command seems to give a satisfactory answer:

    Partition Map for UNKNOWN device 0  --   Partition Type: DOS
    
    Partition     Start Sector     Num Sectors     Type
        1                    1           45569       b
        2                45570           45570       b
        3                91140         4207630       5 Extd
        4              4298770        11210220       b
        5                91141         1063299      83
        6              1154441          531649      83
        7              1686091         2111409      83
        8              3797501           30379      83
        9              3827881           30379      83
    

    Could you please advise if I’m missing a step when porting boundary devices ICS android build to this board? Do I need to modify the uramdisk.img file?

    Also, if I adb shell, I get this:

    - exec '/system/bin/sh' failed: No such file or directory (2) -
    

    and adb ls /system gives this:

    000041ed 00000000 53b0e158 .
    000041fd 00000000 00000001 ..
    
    • Andrew July 12, 2014 6:32 pm #

      I figured this out. Turns out I was not mounting the correct sd peripheral for the rootfs partition in the /system/vold.fstab file. My custom board uses a different sd peripheral number compared to the sabrelite

Leave a Reply