思路是这样:
    板子本身是支持emmc启动。另外norflash很小。目前计划是装入U-boot即可.
    首先要保证u-boot的img放在nor_flash里面:
      我的做法是:通过dd命令写入nor_flash分区
      在android正常从emmc上启动以后;
      dd if=/dev/zero of=/dev/block/mtdblock0
      dd if=/data/u-boot-imx8qm.imx of=/dev/block/mtdblock0 bs=1k seek=4
      dd if=/data/qspi-header of=/dev/block/mtdblock0 bs=1k seek=1

这里面:

      1. u-boot-imx8qm.imx编译的时候需要修改参数,目标文件是device/fsl/vinson/AndroidUboot.mk
          

 device/fsl/vinson/AndroidUboot.mk: cp$(FSL_PROPRIETARY_PATH)/fsl-proprietary/uboot-firmware/imx8q/mx$$SCFW_PLATFORM-scfw-tcm.bin $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/scfw_tcm.bin; \       cp  $(FSL_PROPRIETARY_PATH)/fsl-proprietary/uboot-firmware/imx8q/bl31-$(strip $(2)).bin $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/bl31.bin; \                     $(MAKE) -C $(IMX_MKIMAGE_PATH)/imx-mkimage/ clean; \                     $(MAKE) -C $(IMX_MKIMAGE_PATH)/imx-mkimage/ SOC=$$MKIMAGE_PLATFORM flash; \                     cp $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/flash.bin $(PRODUCT_OUT)/u-boot-$(strip $(2)).imx;            +        $(MAKE) -C $(IMX_MKIMAGE_PATH)/imx-mkimage/ clean; \            +        $(MAKE) -C $(IMX_MKIMAGE_PATH)/imx-mkimage/ SOC=$$MKIMAGE_PLATFORM flash_flexspi; \            +        cp $(IMX_MKIMAGE_PATH)/imx-mkimage/$$MKIMAGE_PLATFORM/flash.bin $(PRODUCT_OUT)/u-boot-$(strip $(2))_flexspi.imx;             endef


        生成需要的flex_spi uboot

      2. 需要在boot之前的地址增加qspi-header的文件:
            qspi-header是根据mfg里面的ucl2_classic.xml里面的命令生成的
                                                            [源文件是qspi-header.sh.tar,ucl2_classic.xml,都在mfg工具里面]
                                                            qspi包里面还有指定nor_flash的config文件


      3. 硬件是要短接,保证走spi流程启动[需要跳帽]

修改:
uboot/arch/arm/cpu/armv8/imx8/cpu.c
@@ -802,6 +802,7 @@ int mmc_get_env_dev(void)

            switch(dev_rsrc) {
            case SC_R_SDHC_0:
    +       case SC_R_FSPI_0:
                   devno = 0;
                   break;
            case SC_R_SDHC_1:
    

uboot/common/image-android.c
@@ -109,7 +109,7 @@ int android_image_get_kernel(const struct andr_img_hdr *hdr, int verify,
                sprintf(newbootargs,
                        " androidboot.storage_type=sd");
        } else if (bootdev == MMC1_BOOT || bootdev == MMC2_BOOT ||
                bootdev == MMC3_BOOT || bootdev == MMC4_BOOT) {
+               bootdev == MMC3_BOOT || bootdev == MMC4_BOOT || bootdev == FLEXSPI_BOOT) {
                sprintf(newbootargs,
                        " androidboot.storage_type=emmc");
        } else if (bootdev == NAND_BOOT) {
    

uboot/drivers/usb/gadget/f_fastboot.c
    @@ -1189,6 +1189,7 @@ void board_fastboot_setup(void)
            case MMC2_BOOT:
            case MMC3_BOOT:
            case MMC4_BOOT:
    +       case FLEXSPI_BOOT:
                    dev_no = mmc_get_env_dev();
                    sprintf(boot_dev_part,"mmc%d",dev_no);
                    if (!getenv("fastboot_dev"))

按照以上流程修改完毕。能够保证uboot流程里面拥有一条nor_引导emmc启动kernel的通路。

更多相关文章

  1. 2010.06.04日志:关于android正在运行程序的关闭问题
  2. Android视图加载流程(3)之ViewRootImpl的UI刷新机制
  3. Android判断app是不是第一次启动
  4. Android(安卓)P wakeup 亮屏流程
  5. # Android中Activity四种启动模式和taskAffinity属性详解 #(6原
  6. Android(安卓)4.4 Kitkat Phone工作流程浅析(四)__RILJ工作流程
  7. android 开机自启动的几种方法,监听不到RECEIVE_BOOT_COMPLETED的
  8. android 在Service中启动Activity
  9. android graphic(3)—surfaceflinger的启动流程

随机推荐

  1. 最简单的基于FFmpeg的移动端例子:Android(
  2. Wifi启动流程分析
  3. 理解Android安全机制
  4. Android的多媒体框架OpenCore介绍
  5. Android开发资源推荐
  6. Android(安卓)签名
  7. Android初步了解入门
  8. android layout_weight 使用总结
  9. android 开发框架
  10. ADB的使用