2015/12/31

ethernet service eneble/disable in android 5

ethernet service:
./services/java/com/android/server/SystemServer.java:674:                if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_ETHERNET)) {


    private void startOtherServices() {
        ...
        ...
                if (mPackageManager.hasSystemFeature(PackageManager.FEATURE_ETHERNET)) {
                    mSystemServiceManager.startService(ETHERNET_SERVICE_CLASS);
                }
茶一下 FEATURE_ETHERNET...
./core/java/android/content/pm/PackageManager.java:1570:    public static final String FEATURE_ETHERNET = "android.hardware.ethernet";
這個: android.hardware.ethernet 是在:
frameworks/native/data/etc/android.hardware.ethernet.xml:

<permissions>
    <feature name="android.hardware.ethernet" />
</permissions>


這個 file 是被copy ...
device/fsl/imx6/sabreauto_6q.mk:

PRODUCT_COPY_FILES += \
        frameworks/native/data/etc/android.hardware.audio.output.xml:system/etc/permissions/android.hardware.audio.output.xml \
        frameworks/native/data/etc/android.hardware.sensor.compass.xml:system/etc/permissions/android.hardware.sensor.compass.xml \
        ....
        ...
        frameworks/native/data/etc/android.hardware.ethernet.xml:system/etc/permissions/android.hardware.ethernet.xml \
把這行刪掉以後,ethernet service 就不會起來了。

2015/12/28

正確的 SD init..
mmc_attach_sd
mmc_sd_get_cid ocr:60000
 | SD_OCR_CCS
 | SD_OCR_S18R
sd_get_host_max_current
300
 | SD_OCR_XPC
mmc2: host does not support reading read-only switch. assuming write-enable.
sd_get_host_max_current
300
mmc2: new ultra high speed SDR104 SDHC card at address 59b4


build . BoardConfig.mk 中 bootloader 部份:
TARGET_BOARD_DTS_CONFIG := imx6q:imx6q-sabreauto.dtb imx6dl:imx6dl-sabreauto.dtb
所以是 dtb 不同。

這兩個 dts. 很多不一樣:
dl 只有兩個mxcfb
q 有四個

Write Protect:
static unsigned int esdhc_pltfm_get_ro(struct sdhci_host *host)
{
        struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
        struct pltfm_imx_data *imx_data = pltfm_host->priv;
        struct esdhc_platform_data *boarddata = &imx_data->boarddata;

        switch (boarddata->wp_type) {
        case ESDHC_WP_GPIO:
                return mmc_gpio_get_ro(host->mmc);
        case ESDHC_WP_CONTROLLER:
                return !(readl(host->ioaddr + SDHCI_PRESENT_STATE) &
                               SDHCI_WRITE_PROTECT);
        case ESDHC_WP_NONE:
                break;
        }

        return -ENOSYS;
}

.....

        if (of_get_property(np, "fsl,wp-controller", NULL))
                boarddata->wp_type = ESDHC_WP_CONTROLLER;

 
        boarddata->wp_gpio = of_get_named_gpio(np, "wp-gpios", 0);
        if (gpio_is_valid(boarddata->wp_gpio))
                boarddata->wp_type = ESDHC_WP_GPIO;

.....


CD PIN:
        switch (boarddata->cd_type) {
        case ESDHC_CD_GPIO:
                err = mmc_gpio_request_cd(host->mmc, boarddata->cd_gpio);
                if (err) {
                        dev_err(mmc_dev(host->mmc),
                                "failed to request card-detect gpio!\n");
                        goto disable_clk;
                }
                /* fall through */

        case ESDHC_CD_CONTROLLER:
                /* we have a working card_detect back */
                host->quirks &= ~SDHCI_QUIRK_BROKEN_CARD_DETECTION;
                break;

        case ESDHC_CD_PERMANENT:
                host->mmc->caps |= MMC_CAP_NONREMOVABLE;
                break;

        case ESDHC_CD_NONE:
                break;
        }

....
        if (of_get_property(np, "non-removable", NULL))
                boarddata->cd_type = ESDHC_CD_PERMANENT;

        if (of_get_property(np, "fsl,cd-controller", NULL))
                boarddata->cd_type = ESDHC_CD_CONTROLLER;
        ....

        boarddata->cd_gpio = of_get_named_gpio(np, "cd-gpios", 0);
        if (gpio_is_valid(boarddata->cd_gpio))
                boarddata->cd_type = ESDHC_CD_GPIO;

2015/12/25

uboot - debug uart config

有關 debug UART setting:
mx6qsabreauto.h:#define CONFIG_MXC_UART_BASE UART4_BASE
mx6sabresd.h:   #define CONFIG_MXC_UART_BASE UART1_BASE

mx6slevk.h:#define CONFIG_MXC_UART_BASE  UART1_IPS_BASE_ADDR
mx6sx_arm2.h:#define CONFIG_MXC_UART_BASE  UART1_BASE
mx6sxsabreauto.h:#define CONFIG_MXC_UART_BASE  UART1_BASE
mx6sxsabresd.h:#define CONFIG_MXC_UART_BASE  UART1_BASE

所以 auto 是 UART4, SD是 UART1

這是included by..include/config.h
內容是..
/* Automatically generated - do not edit */
#define CONFIG_IMX_CONFIG       board/freescale/mx6qsabreauto/mx6solo.cfg
#define CONFIG_MX6SOLO  1
#define CONFIG_DEFAULT_FDT_FILE "imx6dl-sabreauto.dtb"
#define CONFIG_DDR_MB   1024
#define CONFIG_SYS_BOOT_NAND    1
#define CONFIG_SYS_NOSMP        "nosmp"
#define CONFIG_SYS_ARCH  "arm"
#define CONFIG_SYS_CPU   "armv7"
#define CONFIG_SYS_BOARD "mx6qsabreauto"
#define CONFIG_SYS_VENDOR "freescale"
#define CONFIG_SYS_SOC    "mx6"
#define CONFIG_BOARDDIR board/freescale/mx6qsabreauto
#include  < config_cmd_defaults.h >
#include  < config_defaults.h >
#include  < configs/mx6qsabreauto.h >
#include  < asm/config.h >
#include  < config_fallbacks.h >
#include  < config_uncmd_spl.h >

這是由 mkconfig 產生...
...
cat << EOF >> config.h
#include < config_cmd_defaults.h >
#include < config_defaults.h >
#include < configs/${CONFIG_NAME}.h >
#include < asm/config.h >
...

其中 CONFIG_NAME 就是..
if [ "$options" ] ; then
        echo "Configuring for ${BOARD_NAME} - Board: ${CONFIG_NAME}, Options: ${options}"
else



還有 pad mux 的部份:
./mx6qsabreauto/mx6qsabreauto.c:326:  static void setup_iomux_uart(void)
./mx6sabresd   /mx6sabresd.c   :250:  static void setup_iomux_uart(void)

uboot , make and board config

刪除掉 out target 的 u-boot*
make showcommands bootloader
看一下 config 成 auto 時,u-boot 的 config files 有哪些...

Configuring for mx6qsabreautoandroid - Board: mx6qsabreauto, 
Options: 
IMX_CONFIG=board/freescale/mx6qsabreauto/mx6q.cfg,
MX6Q,
DEFAULT_FDT_FILE="imx6q-sabreauto.dtb",
DDR_MB=2048,
ANDROID_SUPPORT


Configuring for mx6dlsabreautoandroid - Board: mx6qsabreauto, 
Options: 
IMX_CONFIG=board/freescale/mx6qsabreauto/mx6dl.cfg,
MX6DL,
DEFAULT_FDT_FILE="imx6dl-sabreauto.dtb",
DDR_MB=2048,
ANDROID_SUPPORT


Configuring for mx6solosabresdandroid - Board: mx6sabresd, 
Options: 
IMX_CONFIG=board/freescale/mx6sabresd/mx6solo_4x_mt41j128.cfg,
MX6SOLO,
DEFAULT_FDT_FILE="imx6dl-sabresd.dtb",
DDR_MB=512,
SYS_USE_SPINOR,
SYS_NOSMP="nosmp",
ANDROID_SUPPORT


Configuring for mx6qsabreautoandroid_nand - Board: mx6qsabreauto, 
Options: 
IMX_CONFIG=board/freescale/mx6qsabreauto/mx6q.cfg,
MX6Q,
DEFAULT_FDT_FILE="imx6q-sabreauto.dtb",
DDR_MB=2048,
SYS_BOOT_NAND,
ANDROID_SUPPORT


Configuring for mx6dlsabreautoandroid_nand - Board: mx6qsabreauto, 
Options: 
IMX_CONFIG=board/freescale/mx6qsabreauto/mx6dl.cfg,
MX6DL,
DEFAULT_FDT_FILE="imx6dl-sabreauto.dtb",
DDR_MB=2048,
SYS_BOOT_NAND,
ANDROID_SUPPORT


Configuring for mx6solosabreauto_nand - Board: mx6qsabreauto, 
Options: 
IMX_CONFIG=board/freescale/mx6qsabreauto/mx6solo.cfg,
MX6SOLO,
DEFAULT_FDT_FILE="imx6dl-sabreauto.dtb",
DDR_MB=1024,
SYS_BOOT_NAND,
SYS_NOSMP="nosmp"



這些都定義在 boards.cfg:
Active  arm   armv7          mx6         freescale       mx6qsabreauto       mx6dlsabreautoandroid
mx6qsabreauto:
IMX_CONFIG=board/freescale/mx6qsabreauto/mx6dl.cfg,
MX6DL,
DEFAULT_FDT_FILE="imx6dl-sabreauto.dtb",
DDR_MB=2048,
ANDROID_SUPPORT


對照一下 sabresd:
Active  arm   armv7          mx6         freescale       mx6sabresd          mx6dlsabresdandroid    
mx6sabresd:
IMX_CONFIG=board/freescale/mx6sabresd/mx6dl_4x_mt41j128.cfg,
MX6DL,
DEFAULT_FDT_FILE="imx6dl-sabresd.dtb",
DDR_MB=1024,
SYS_USE_SPINOR,
ANDROID_SUPPORT

Active  arm         armv7          mx6         freescale       mx6sabresd          mx6qsabresdandroid
mx6sabresd:
IMX_CONFIG=board/freescale/imx/ddr/mx6q_4x_mt41j128.cfg,
MX6Q,
DEFAULT_FDT_FILE="imx6q-sabresd.dtb",
DDR_MB=1024,
SYS_USE_SPINOR,
ANDROID_SUPPORT    

2015/12/18

大概是..
repo forall -c '~/mypathch.sh'

然後就可以依照 manifest.xml 到每個 project 操作..

2015/12/11

wandboard -- with official freescale bsp

project bootable/bootloader/uboot-imx/          branch wand
project device/fsl/                             branch wand
project hardware/broadcom/libbt/                branch wand
project hardware/imx/                           branch wand
project hardware/libhardware_legacy/            branch wand
project kernel_imx/                             branch wand
project system/core/                            branch wand

有一個 brcm 的 folder, 所以找一下有沒有用到...
./linux-linaro-stable-mx6/include/linux/platform_data/brcmfmac-sdio.h
./out/target/product/wandboard/system/etc/firmware/brcm/brcmfmac4329-sdio.txt
./out/target/product/wandboard/system/etc/firmware/brcm/brcmfmac4330-sdio.txt
./out/target/product/wandboard/system/etc/firmware/brcm/brcmfmac4330-sdio.bin
./out/target/product/wandboard/system/etc/firmware/brcm/brcmfmac4329-sdio.bin
./out/target/product/wandboard/system/lib/modules/brcmfmac.ko
./device/fsl/wandboard/brcm-firmware/brcmfmac4329-sdio.txt
./device/fsl/wandboard/brcm-firmware/brcmfmac4330-sdio.txt
./device/fsl/wandboard/brcm-firmware/brcmfmac4330-sdio.bin
./device/fsl/wandboard/brcm-firmware/brcmfmac4329-sdio.bin
./kernel_imx/include/linux/platform_data/brcmfmac-sdio.h
./kernel_imx/include/config/brcmfmac.h
./kernel_imx/drivers/net/wireless/brcm80211/brcmfmac/brcmfmac.mod.o
./kernel_imx/drivers/net/wireless/brcm80211/brcmfmac/brcmfmac.mod.c
./kernel_imx/drivers/net/wireless/brcm80211/brcmfmac/brcmfmac.o
./kernel_imx/drivers/net/wireless/brcm80211/brcmfmac/brcmfmac.ko
./kernel_imx/.tmp_versions/brcmfmac.mod
./brcm/brcmfmac4329-sdio.txt
./brcm/brcmfmac4330-sdio.txt
./brcm/brcmfmac4330-sdio.bin
./brcm/brcmfmac4329-sdio.bin

覆蓋後 branch:
*  copy-wand                 | in:
                                   bootable/bootloader/uboot-imx
                                   build
                                   device/fsl
                                   hardware/broadcom/libbt
                                   hardware/imx
                                   hardware/libhardware_legacy
                                   kernel_imx
                                   prebuilts/gcc/darwin-x86/x86/x86_64-linux-android-4.9
還有新增了 cooker folder,
另外新增的 brcm linux-linaro-stable-mx6 好像沒用到。

原來的 kernel bootcmd 已經有 androidboot.selinux=disabled
只要把 device/fsl/imx6/etc/init.rc 的 adb.secure 1 改 0 之後,adb 就可以動了。
-- 如果要使用 Vysor, 要用 adb remount 讓 system 變成 rw

因為uboot 用了 SPL. 所以一起 build 的時候,如果使用太多 thread 來 build, 就會 fail. -- 說找不到 SPL
所以要先 build 好 uboot:
make bootloader
之後就可以了。

OK..make bootloader && make -j10 就可以 build 完,之後 copy cooker 過來。
一樣run env_wb.sh 後 flashcard /dev/sdb 就可以。


另一個,在 官方 bsp 覆蓋 wandboard source 的方式。
最後, bt, wifi 都 working 的修改...
project bootable/bootloader/uboot-imx/          branch wand
project device/fsl/                             branch wand
project hardware/broadcom/libbt/                branch copy-wand
project hardware/imx/                           branch copy-wand
project hardware/libhardware_legacy/            branch copy-wand
project kernel_imx/                             branch copy-wand


所以把patch 放到 github: https://github.com/checko/wandboard-5.0.2_r1

先依照 freescale bsp 的 user guide 準備好 android-5.0.2_r1 的 source.
然後依照 github readme 的目錄位置一一 patch 就可以了

這個patch 只有修改 source code,所以燒錄與 eMMC/SD 的 pattition layout 都和標準 freescale bsp 一樣。
所以燒錄SD的方式是用 fsl-sdcard-partition.sh

2015/12/3

wandbord bsp and freescale official bsp ...

結果, sabresd 的 eMMC 是 SDHC4, wandboard 的 eim sd slot 是 SDHC3
wandboard 的 bootmode 是 boot to SD3
所以 u-boot 去 check SD3 的 CD pin, 發現level 不對。就沒 init 了。

只要改
diff --git a/board/freescale/mx6sabresd/mx6sabresd.c b/board/freescale/mx6sabresd/mx6sabresd.c
index d24eea1..9646438 100644
--- a/board/freescale/mx6sabresd/mx6sabresd.c
+++ b/board/freescale/mx6sabresd/mx6sabresd.c
@@ -549,7 +549,7 @@ int board_mmc_getcd(struct mmc *mmc)
                ret = !gpio_get_value(USDHC2_CD_GPIO);
                break;
        case USDHC3_BASE_ADDR:
-               ret = !gpio_get_value(USDHC3_CD_GPIO);
+               ret = 1; /* wandboard : assum always boot from SD3 *?
                break;
        case USDHC4_BASE_ADDR:
                ret = 1; /* eMMC/uSDHC4 is always present */

就可以開機了..
然後開機到 kernel.....
之後因為 wandboard 是用 LDO 分散式的 電源,sabresd 是用 pmic , ,, 所以....

兩邊用 tig 看一下 git log, 發現wandboard 真的是基於 l5.0.0_1.0.0-ga 這個tag 開始修改。


/hardware/imx/wlan/atheros/compat-wireless/config.mk:49: 
*** "ERROR: your kernel has CONFIG_CFG80211=y, you should have it CONFIG_CFG80211=m if you want to use this thing.".  Stop.
wandboard 的 bsp 是:
diff --git a/wlan/Android.mk b/wlan/Android.mk
index 5fb1071..25f5781 100644
--- a/wlan/Android.mk
+++ b/wlan/Android.mk
@@ -1,4 +1,4 @@
 atheros_dirs := compat-wireless
 ifeq ($(BOARD_WLAN_DEVICE),$(filter $(BOARD_WLAN_DEVICE),ar6003 UNITE))
-    include $(call all-subdir-makefiles,$(atheros_dirs))
+    #include $(call all-subdir-makefiles,$(atheros_dirs))
 endif
所以是用 kernel 的 source.


燒錄出問題。
dd: failed to open ‘boot-imx6dl.img’: No such file or directory
dd: failed to open ‘recovery-imx6dl.img’: No such file or directory

看一下 燒錄 script:
function flash_android
{
    bootloader_file="u-boot-${soc_name}.imx"
    bootimage_file="boot-${soc_name}.img"
    recoveryimage_file="recovery-${soc_name}.img"
if [ "${flash_images}" -eq "1" ]; then
    echo "flashing android images..."    
    echo "bootloader: ${bootloader_file}"
    echo "boot image: ${bootimage_file}"
    echo "recovery image: ${recoveryimage_file}"
    echo "system image: ${systemimage_file}"
    dd if=/dev/zero of=${node} bs=1k seek=384 count=129
    dd if=${bootloader_file} of=${node} bs=1k seek=1
    dd if=${bootimage_file} of=${node}${part}1
    dd if=${recoveryimage_file} of=${node}${part}2
    dd if=${systemimage_file} of=${node}${part}5
    sync
fi
}

soc_name 就是 -f 的 option

所以要看一下 有沒有..
  • u-boot-XXX.imx
  • boot-XXX.img
  • recovery-XXX.img
  • system.img
先從 boot-XXX.img 開始..
$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_FILES)

        for dtsplat in $(TARGET_BOARD_DTS_CONFIG); do \
                DTS_PLATFORM=`echo $$dtsplat | cut -d':' -f1`; \
                DTS_BOARD=`echo $$dtsplat | cut -d':' -f2`; \
                BOOT_IMAGE_BOARD=$(patsubst %.img,%-$$DTS_PLATFORM.img,$@); \
                $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) --second $(PRODUCT_OUT)/$$DTS_BOARD $(BOARD_MKBOOTIMG_ARGS) --output $@; \
                $(BOOT_SIGNER) /boot $@ $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VERITY_SIGNING_KEY) $@;\
                $(call assert-max-image-size,$@,$(BOARD_BOOTIMAGE_PARTITION_SIZE)); \
                cp -f $@ $$BOOT_IMAGE_BOARD; \
        done
其中
     BOOT_IMAGE_BOARD=$(patsubst %.img,%-$$DTS_PLATFORM.img,$@); \
決定 boot-$$DTS_PLATFORM.img
就是從 TARGET_BOARD_DTS_CONFIG 來的。
這個宣告在 device/fsl/wandboard/BoardConfig.mk:
wandboard/BoardConfig.mk:
TARGET_BOARD_DTS_CONFIG := imx6q-wandboard.dtb imx6dl-wandboard.dtb
所以是這裡寫錯了...
應該是..
TARGET_BOARD_DTS_CONFIG := imx6q:imx6q-wandboard.dtb imx6dl:imx6dl-wandboard.dtb

這樣就會 build 出 xxx=imx6dl 的 image

2015/12/2

uboot - from imx to wandboard

來看 wandboard.
device/fsl/wandboard/BoardConfig.mk:
TARGET_BOOTLOADER_CONFIG := wandboard_spl_android_defconfig
TARGET_BOARD_DTS_CONFIG := imx6q-wandboard.dtb imx6dl-wandboard.dtb

build/core/Makefile是一樣的,
所以 UBOOT_CONFIG 會是 null
所以 最後 build 出來的 bin 會是 u-boot-wandboard_spl_android_defconfig.img

wandboard 的 uboot 版本(2014.10)跟 freescale 標準 bsp 不同(2014.04)。
wandboard 使用kconfig, 所以跟 kernel 一樣,是用 defconfig
不是用 mkconfig 解析 target string

wandboard 的 defconfig 都放在 configs 下。
所以,會是 wandboard_spl_android_defconfig

Makefile % -- uboot

ref: http://www.gnu.org/software/make/manual/html_node/Pattern-Rules.html#Pattern-Rules

說明 '%' 代表萬用字,就有點像 shell command 的 '*'

所以 uboot Makefile 中:
%_config:: outputmakefile
        @$(MKCONFIG) -A $(@:_config=)
就是任意以 _config 結尾的 target.

所以uboot 的 readme 說... make (board_name)_config

會把 (board_name) 餵進 MKCONFIG (就是 mkconfig 是一個 shell script)

uboot - imx6

device/fsl/sabresd_6dq/BoardConfig.mk
TARGET_BOOTLOADER_CONFIG := imx6q:mx6qsabresdandroid_config imx6dl:mx6dlsabresdandroid_config
TARGET_BOARD_DTS_CONFIG := imx6q:imx6q-sabresd.dtb imx6dl:imx6dl-sabresd.dtb imx6q-ldo:imx6q-sabresd-ldo.dtb

Makefile:
BOOTLOADER_CROSS_TOOLCHAIN := `pwd`/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
BOOTLOADER_ENV := ARCH=arm CROSS_COMPILE=$(BOOTLOADER_CROSS_TOOLCHAIN)
HOST_PROCESSOR := $(shell cat /proc/cpuinfo | grep processor | wc -l)
TARGET_BOOTLOADER_IMAGE := $(PRODUCT_OUT)/u-boot.imx

BOOTLOADER_PATH := bootable/bootloader/uboot-imx/
BOOTLOADER_CONFIG_FILE := $(BOOTLOADER_PATH)/include/config.h

bootloader: $(TARGET_BOOTLOADER_IMAGE)

$(TARGET_BOOTLOADER_IMAGE):
        for ubootplat in $(TARGET_BOOTLOADER_CONFIG); do \
                UBOOT_PLATFORM=`echo $$ubootplat | cut -d':' -f1`; \
                UBOOT_CONFIG=`echo $$ubootplat | cut -d':' -f2`; \
        echo $(UBOOT_PLATFORM); \
        echo $(UBOOT_CONFIG); \
                $(MAKE) -C bootable/bootloader/uboot-imx/ distclean $(BOOTLOADER_ENV); \
                $(MAKE) -C bootable/bootloader/uboot-imx/ $$UBOOT_CONFIG $(BOOTLOADER_ENV); \
                $(MAKE) -C bootable/bootloader/uboot-imx/ $(BOOTLOADER_ENV); \
                install -D bootable/bootloader/uboot-imx/u-boot.imx $(PRODUCT_OUT)/u-boot-$$UBOOT_PLATFORM.imx; \
                install -D bootable/bootloader/uboot-imx/u-boot.imx $@; \
        done

所以不管 lunch 選的是什麼,bootloader 一定會 build 兩個 target (imx6q, imx6dl) 出來。
所以:
  • imx6q : mx6qsabresdandroid_config
  • imx6dl: mx6dlsabresdandroid_config

make 的 command 就是:
export ARCH=arm
export CROSS_COMPILE=`pwd`/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-

cd bootable/bootlaoder/uboot-imx
make distclean
make mx6dlsabresdandroid_config
uboot 的 README 說:
Selection of Processor Architecture and Board Type:
---------------------------------------------------

For all supported boards there are ready-to-use default
configurations available; just type "make _config".

Example: For a TQM823L module type:

        cd u-boot
        make TQM823L_config

For the Cogent platform, you need to specify the CPU type as well;
e.g. "make cogent_mpc8xx_config". And also configure the cogent
directory according to the instructions in cogent/README.


Configuration Options:
----------------------

Configuration depends on the combination of board and CPU type; all
such information is kept in a configuration file
"include/configs/.h".

Example: For a TQM823L module, all configuration settings are in
"include/configs/TQM823L.h".
所以 make mx6dlsabresdandroid_config , board_name 就是 mx6dlsabreshandroid

刪除 target out folder 的 u-boot-*, 之後 make bootloader, 才會重新 build
可以看到 make log 有:
Configuring for mx6qsabresdandroid - 
Board: mx6sabresd, 
Options: 
IMX_CONFIG=board/freescale/imx/ddr/mx6q_4x_mt41j128.cfg,
MX6Q,
DEFAULT_FDT_FILE="imx6q-sabresd.dtb",
DDR_MB=1024,
SYS_USE_SPINOR,
ANDROID_SUPPORT
Configuring for mx6dlsabresdandroid - 
Board: mx6sabresd, 
Options: 
IMX_CONFIG=board/freescale/mx6sabresd/mx6dl_4x_mt41j128.cfg,
MX6DL,
DEFAULT_FDT_FILE="imx6dl-sabresd.dtb",
DDR_MB=1024,
SYS_USE_SPINOR,
ANDROID_SUPPORT