如何在mmcblk0boot0而不是mmcblk0p1中编写u-boot环境变量

时间:2015-07-16 15:59:14

标签: android embedded embedded-linux bootloader u-boot

我正在开发基于定制iMX6的电路板。我使用的是iMX6 Sabre SD板上的Android软件包,并且大部分工作都是从eMMC上启动的,这些内容在板载上,但我面临的问题是' saveenv' u-boot。

首先,每次开机时都有一个印刷品:

*** Warning - bad CRC or MMC, using default environment

我在网上搜索,发现我们必须做' saveenv'一旦让这个错误消失了。所以我做了saveenv但是之后董事会没有完全启动并且卡在'Uncompressing Linux ...'上!

然后我使用SD卡启动电路板并获得/ dev / block / mmcblk0boot0和/ dev / block / mmcblk0p1的hexdump(两者都是eMMC分区,SD卡是dev / block / mmcblk1)

令我惊讶的是,从hexdump我发现' saveenv'将环境变量数据写入/ dev / block / mmcblk0p1而不是/ dev / block / mmcblk0boot0这是因为boot.img在dev / block / mmcblk0p1分区被u破坏时,该板没有启动的原因-boot执行saveenv并覆盖boot.img数据。

所以,我的问题是如何更改u-boot代码以修改它以在/dev/block/mmcblk0boot0而不是/dev/block/mmcblk0p1上读取和保存环境变量

我试图深入研究代码,到目前为止,我发现common/env_mmc.c是具有读取/写入环境变量的所有函数的文件,而include/configs/mx6solo_sabresd.h包含了root@imx6:/ # cat /proc/partitions major minor #blocks name 31 0 64 mtdblock0 179 0 3833856 mmcblk0 179 1 15640 mmcblk0p1 179 2 7840 mmcblk0p2 179 3 1 mmcblk0p3 179 5 500024 mmcblk0p5 179 6 500024 mmcblk0p6 179 7 78136 mmcblk0p7 259 0 500024 mmcblk0p8 259 1 19544 mmcblk0p9 259 2 2212568 mmcblk0p10 179 16 1024 mmcblk0boot1 179 8 1024 mmcblk0boot0 179 24 3887104 mmcblk1 179 25 7168 mmcblk1p1 179 26 484352 mmcblk1p2 179 27 1 mmcblk1p3 179 29 289792 mmcblk1p5 179 30 550912 mmcblk1p6 179 31 570368 mmcblk1p7 259 3 799744 mmcblk1p8 root@imx6:/ # root@imx6:/ # cat /proc/mtd dev: size erasesize name mtd0: 00010000 00008000 "bootloader" mtd1: 00000000 00000000 "kernel" root@imx6:/ # root@imx6:/ # fdisk -l /dev/block/mmcblk0 Disk /dev/block/mmcblk0: 3925 MB, 3925868544 bytes 4 heads, 16 sectors/track, 119808 cylinders Units = cylinders of 64 * 512 = 32768 bytes Device Boot Start End Blocks Id System /dev/block/mmcblk0p1 1 489 15640 83 Linux /dev/block/mmcblk0p2 490 734 7840 83 Linux /dev/block/mmcblk0p3 735 119808 3810368 5 Extended /dev/block/mmcblk0p5 735 16360 500024 83 Linux /dev/block/mmcblk0p6 16361 31986 500024 83 Linux /dev/block/mmcblk0p7 31987 34428 78136 83 Linux /dev/block/mmcblk0p8 34429 50054 500024 83 Linux /dev/block/mmcblk0p9 50055 50665 19544 83 Linux /dev/block/mmcblk0p10 50666 119808 2212568 83 Linux root@imx6:/ # root@imx6:/ # fdisk -l /dev/block/mmcblk0boot0 Disk /dev/block/mmcblk0boot0: 1 MB, 1048576 bytes 4 heads, 16 sectors/track, 32 cylinders Units = cylinders of 64 * 512 = 32768 bytes Disk /dev/block/mmcblk0boot0 doesn't contain a valid partition table root@imx6:/ # fdisk -l /dev/block/mmcblk0boot1 Disk /dev/block/mmcblk0boot1: 1 MB, 1048576 bytes 4 heads, 16 sectors/track, 32 cylinders Units = cylinders of 64 * 512 = 32768 bytes Disk /dev/block/mmcblk0boot1 doesn't contain a valid partition table root@imx6:/ # 的配置。我的董事会。

P.S。 :u-boot本身位于/ dev / block / mmcblk0boot0

编辑:有关分区的信息:

/*
 * Copyright (C) 2012 Freescale Semiconductor, Inc.
 *
 * Configuration settings for the MX6DL SabreSD Freescale board.
 * The board is configured with SOLO and 32-bit DDR bus-width.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 * MA 02111-1307 USA
 */

#ifndef __CONFIG_H
#define __CONFIG_H

#include <asm/arch/mx6.h>

 /* High Level Configuration Options */
#define CONFIG_ARMV7    /* This is armv7 Cortex-A9 CPU core */
#define CONFIG_MXC
#define CONFIG_MX6DL
#define CONFIG_MX6DL_DDR3
#define CONFIG_MX6DL_SABRESD
#define CONFIG_DDR_32BIT /* for DDR 32bit */
#define CONFIG_FLASH_HEADER
#define CONFIG_FLASH_HEADER_OFFSET 0x400
#define CONFIG_MX6_CLK32       32768

#define CONFIG_SKIP_RELOCATE_UBOOT

#define CONFIG_ARCH_CPU_INIT
#undef CONFIG_ARCH_MMU /* disable MMU first */
#define CONFIG_L2_OFF  /* disable L2 cache first*/

#define CONFIG_MX6_HCLK_FREQ    24000000

#define CONFIG_DISPLAY_CPUINFO
#define CONFIG_DISPLAY_BOARDINFO

#define CONFIG_SYS_64BIT_VSPRINTF

#define BOARD_LATE_INIT

#define CONFIG_CMDLINE_TAG  /* enable passing of ATAGs */
#define CONFIG_SERIAL_TAG
#define CONFIG_REVISION_TAG
#define CONFIG_SETUP_MEMORY_TAGS
#define CONFIG_INITRD_TAG
#define CONFIG_MXC_GPIO
/*
 * Size of malloc() pool
 */
#define CONFIG_SYS_MALLOC_LEN       (2 * 1024 * 1024)
/* size in bytes reserved for initial data */
#define CONFIG_SYS_GBL_DATA_SIZE    128

/*
 * Hardware drivers
 */
#define CONFIG_MXC_UART
#define CONFIG_UART_BASE_ADDR   UART1_BASE_ADDR

/* allow to overwrite serial and ethaddr */
#define CONFIG_ENV_OVERWRITE
#define CONFIG_CONS_INDEX       1
#define CONFIG_BAUDRATE         115200
#define CONFIG_SYS_BAUDRATE_TABLE   {9600, 19200, 38400, 57600, 115200}

/***********************************************************
 * Command definition
 ***********************************************************/

#include <config_cmd_default.h>

#define CONFIG_CMD_PING
#define CONFIG_CMD_DHCP
#define CONFIG_CMD_MII
#define CONFIG_CMD_NET
#define CONFIG_NET_RETRY_COUNT  100
#define CONFIG_NET_MULTI 1
#define CONFIG_BOOTP_SUBNETMASK
#define CONFIG_BOOTP_GATEWAY
#define CONFIG_BOOTP_DNS

#define CONFIG_CMD_SPI
#define CONFIG_CMD_I2C
#define CONFIG_CMD_IMXOTP

/* Enable below configure when supporting nand */
#define CONFIG_CMD_SF
#define CONFIG_CMD_MMC
#define CONFIG_CMD_ENV
#define CONFIG_CMD_REGUL

#define CONFIG_CMD_CLOCK
#define CONFIG_REF_CLK_FREQ CONFIG_MX6_HCLK_FREQ

#undef CONFIG_CMD_IMLS

#define CONFIG_CMD_IMX_DOWNLOAD_MODE

#define CONFIG_BOOTDELAY 3

#define CONFIG_PRIME    "FEC0"

#define CONFIG_LOADADDR     0x10800000  /* loadaddr env var */
#define CONFIG_RD_LOADADDR  (CONFIG_LOADADDR + 0x300000)

#define CONFIG_EXTRA_ENV_SETTINGS                   \
    "netdev=eth0\0"                         \
    "ethprime=FEC0\0"                       \
    "uboot=u-boot.bin\0"                        \
    "kernel=uImage\0"                       \
    "nfsroot=/opt/eldk/arm\0"                   \
    "bootargs_base=setenv bootargs console=ttymxc0,115200 nosmp\0"  \
    "bootargs_nfs=setenv bootargs ${bootargs} root=/dev/nfs "   \
        "ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp\0"   \
    "bootcmd_net=run bootargs_base bootargs_nfs; "          \
        "tftpboot ${loadaddr} ${kernel}; bootm\0"       \
    "bootargs_mmc=setenv bootargs ${bootargs} ip=dhcp "     \
        "root=/dev/mmcblk0p1 rootwait\0"            \
    "bootcmd_mmc=run bootargs_base bootargs_mmc; "          \
    "mmc dev 3; "                           \
    "mmc read ${loadaddr} 0x800 0x2000; bootm\0"            \
    "bootcmd=run bootcmd_net\0"                 \


#define CONFIG_ARP_TIMEOUT      200UL

/*
 * Miscellaneous configurable options
 */
#define CONFIG_SYS_LONGHELP     /* undef to save memory */
#define CONFIG_SYS_PROMPT       "MX6Solo SABRESD U-Boot > "
#define CONFIG_AUTO_COMPLETE
#define CONFIG_SYS_CBSIZE       1024    /* Console I/O Buffer Size */
/* Print Buffer Size */
#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
#define CONFIG_SYS_MAXARGS      16  /* max number of command args */
#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE   /* Boot Argument Buffer Size */

#define CONFIG_SYS_MEMTEST_START    0x10000000  /* memtest works on */
#define CONFIG_SYS_MEMTEST_END      0x10010000

#undef  CONFIG_SYS_CLKS_IN_HZ       /* everything, incl board info, in Hz */

#define CONFIG_SYS_LOAD_ADDR        CONFIG_LOADADDR

#define CONFIG_SYS_HZ           1000

#define CONFIG_CMDLINE_EDITING

#define CONFIG_FEC0_IOBASE      ENET_BASE_ADDR
#define CONFIG_FEC0_PINMUX      -1
#define CONFIG_FEC0_MIIBASE     -1
#define CONFIG_GET_FEC_MAC_ADDR_FROM_IIM
#define CONFIG_MXC_FEC
#define CONFIG_FEC0_PHY_ADDR        1
#define CONFIG_ETH_PRIME
#define CONFIG_RMII
#define CONFIG_CMD_MII
#define CONFIG_CMD_DHCP
#define CONFIG_CMD_PING
#define CONFIG_IPADDR           192.168.1.103
#define CONFIG_SERVERIP         192.168.1.101
#define CONFIG_NETMASK          255.255.255.0

/*
 * OCOTP Configs
 */
#ifdef CONFIG_CMD_IMXOTP
    #define CONFIG_IMX_OTP
    #define IMX_OTP_BASE        OCOTP_BASE_ADDR
    #define IMX_OTP_ADDR_MAX    0x7F
    #define IMX_OTP_DATA_ERROR_VAL  0xBADABADA
#endif

/*
 * I2C Configs
 */
#ifdef CONFIG_CMD_I2C
    #define CONFIG_HARD_I2C
    #define CONFIG_I2C_MXC          1
    #define CONFIG_SYS_I2C_PORT             I2C2_BASE_ADDR
    #define CONFIG_SYS_I2C_SPEED            100000
    #define CONFIG_SYS_I2C_SLAVE            0x8
    #define CONFIG_MX6_INTER_LDO_BYPASS 0
#endif

/*
 * SPI Configs
 */
#ifdef CONFIG_CMD_SF
    #define CONFIG_FSL_SF
    #define CONFIG_SPI_FLASH_IMX_M25PXX
    #define CONFIG_SPI_FLASH_CS     0
    #define CONFIG_IMX_ECSPI
    #define IMX_CSPI_VER_2_3        1
    #define MAX_SPI_BYTES           (64 * 4)
#endif

/* Regulator Configs */
#ifdef CONFIG_CMD_REGUL
    #define CONFIG_ANATOP_REGULATOR
    #define CONFIG_CORE_REGULATOR_NAME  "vdd1p1"
    #define CONFIG_PERIPH_REGULATOR_NAME    "vdd1p1"
#endif

/*
 * MMC Configs
 */
#ifdef CONFIG_CMD_MMC
    #define CONFIG_MMC
    #define CONFIG_GENERIC_MMC
    #define CONFIG_IMX_MMC
    #define CONFIG_SYS_FSL_USDHC_NUM        4
    #define CONFIG_SYS_FSL_ESDHC_ADDR       0
    #define CONFIG_SYS_MMC_ENV_DEV      2
    #define CONFIG_DOS_PARTITION
    #define CONFIG_CMD_FAT
    #define CONFIG_CMD_EXT2

    /* detect whether SD1, 2, 3, or 4 is boot device */
    #define CONFIG_DYNAMIC_MMC_DEVNO

    /* SD3(Mircro SD) 4 bit, SD4(EMMC) are 8 bit */
    #define CONFIG_MMC_8BIT_PORTS       0x8

    /* Setup target delay in DDR mode for each SD port */
    #define CONFIG_GET_DDR_TARGET_DELAY
#endif

/*
 * GPMI Nand Configs
 */
/* #define CONFIG_CMD_NAND */

#ifdef CONFIG_CMD_NAND
    #define CONFIG_NAND_GPMI
    #define CONFIG_GPMI_NFC_SWAP_BLOCK_MARK
    #define CONFIG_GPMI_NFC_V2

    #define CONFIG_GPMI_REG_BASE        GPMI_BASE_ADDR
    #define CONFIG_BCH_REG_BASE     BCH_BASE_ADDR

    #define NAND_MAX_CHIPS          8
    #define CONFIG_SYS_NAND_BASE        0x40000000
    #define CONFIG_SYS_MAX_NAND_DEVICE  1

    /* NAND is the unique module invoke APBH-DMA */
    #define CONFIG_APBH_DMA
    #define CONFIG_APBH_DMA_V2
    #define CONFIG_MXS_DMA_REG_BASE ABPHDMA_BASE_ADDR
#endif

/*-----------------------------------------------------------------------
 * Stack sizes
 *
 * The stack sizes are set up in start.S using the settings below
 */
#define CONFIG_STACKSIZE    (128 * 1024)    /* regular stack */

/*-----------------------------------------------------------------------
 * Physical Memory Map
 */
#define CONFIG_NR_DRAM_BANKS    1
#define PHYS_SDRAM_1        CSD0_DDR_BASE_ADDR
#define PHYS_SDRAM_1_SIZE   (1u * 1024 * 1024 * 1024)
#define iomem_valid_addr(addr, size) \
    (addr >= PHYS_SDRAM_1 && addr <= (PHYS_SDRAM_1 + PHYS_SDRAM_1_SIZE))

/*-----------------------------------------------------------------------
 * FLASH and environment organization
 */
#define CONFIG_SYS_NO_FLASH

/* Monitor at beginning of flash */
#define CONFIG_FSL_ENV_IN_MMC
/* #define CONFIG_FSL_ENV_IN_NAND */

#define CONFIG_ENV_SECT_SIZE    (8 * 1024)
#define CONFIG_ENV_SIZE         CONFIG_ENV_SECT_SIZE

#if defined(CONFIG_FSL_ENV_IN_NAND)
    #define CONFIG_ENV_IS_IN_NAND 1
    #define CONFIG_ENV_OFFSET   0x100000
#elif defined(CONFIG_FSL_ENV_IN_MMC)
    #define CONFIG_ENV_IS_IN_MMC    1
    #define CONFIG_ENV_OFFSET   (768 * 1024)
#elif defined(CONFIG_FSL_ENV_IN_SF)
    #define CONFIG_ENV_IS_IN_SPI_FLASH  1
    #define CONFIG_ENV_SPI_CS       1
    #define CONFIG_ENV_OFFSET       (768 * 1024)
#else
    #define CONFIG_ENV_IS_NOWHERE   1
#endif

/* #define CONFIG_SPLASH_SCREEN */
/* #define CONFIG_MXC_EPDC */

/*
 * SPLASH SCREEN Configs
 */
//#define CONFIG_SPLASH_SCREEN
#ifdef CONFIG_SPLASH_SCREEN
    /*
     * Framebuffer and LCD
     */
    #define CONFIG_LCD
    #define CONFIG_FB_BASE              (TEXT_BASE + 0x300000)
    #define CONFIG_SYS_CONSOLE_IS_IN_ENV
#ifdef CONFIG_MXC_EPDC
    #undef LCD_TEST_PATTERN
    /* #define CONFIG_SPLASH_IS_IN_MMC          1 */
    #define LCD_BPP                 LCD_MONOCHROME
    /* #define CONFIG_SPLASH_SCREEN_ALIGN       1 */

    #define CONFIG_MXC_EPDC             1

    #define CONFIG_WORKING_BUF_ADDR         (TEXT_BASE + 0x100000)
    #define CONFIG_WAVEFORM_BUF_ADDR        (TEXT_BASE + 0x200000)
    #define CONFIG_WAVEFORM_FILE_OFFSET     0x600000
    #define CONFIG_WAVEFORM_FILE_SIZE       0xF0A00
    #define CONFIG_WAVEFORM_FILE_IN_MMC

#ifdef CONFIG_SPLASH_IS_IN_MMC
    #define CONFIG_SPLASH_IMG_OFFSET        0x4c000
    #define CONFIG_SPLASH_IMG_SIZE          0x19000
#endif
#else /* !CONFIG_MXC_EPDC */
    #define CONFIG_IPU_V3H
    #define CONFIG_VIDEO_MX5
    #define CONFIG_IPU_CLKRATE          260000000
    #define CONFIG_SYS_CONSOLE_ENV_OVERWRITE
    #define CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE
    #define LCD_BPP                 LCD_COLOR16
    #define CONFIG_CMD_BMP
    #define CONFIG_BMP_8BPP
    #define CONFIG_SPLASH_SCREEN_ALIGN
    #define CONFIG_SYS_WHITE_ON_BLACK

    #define CONFIG_IMX_PWM
    #define IMX_PWM1_BASE    PWM1_BASE_ADDR
    #define IMX_PWM2_BASE    PWM2_BASE_ADDR
#endif
#endif /* CONFIG_SPLASH_SCREEN */
#endif              /* __CONFIG_H */

U-Boot配置文件:

{{1}}

0 个答案:

没有答案