zynq在u-boot里面的分区

u-boot : u-boot-xlnx
ref    : https://github.com/xilinx/u-boot-xlnx.git
tag    : xilinx-v2017.1

# git checkout xilinx-v2017.1

其关于分区的信息都可以从include/configs/zynq-common.h里面获取

#define CONFIG_EXTRA_ENV_SETTINGS       \
        "ethaddr=00:0a:35:00:01:22\0"   \
        "kernel_image=uImage\0" \
        "kernel_load_address=0x2080000\0" \
        "ramdisk_image=uramdisk.image.gz\0"     \
        "ramdisk_load_address=0x4000000\0"      \
        "devicetree_image=devicetree.dtb\0"     \
        "devicetree_load_address=0x2000000\0"   \
        "bitstream_image=system.bit.bin\0"      \
        "boot_image=BOOT.bin\0" \
        "loadbit_addr=0x100000\0"       \
        "loadbootenv_addr=0x2000000\0" \
        "kernel_size=0x500000\0"        \
        "devicetree_size=0x20000\0"     \
        "ramdisk_size=0x5E0000\0"       \
        "boot_size=0xF00000\0"  \
        "fdt_high=0x20000000\0" \
        "initrd_high=0x20000000\0"      \
        "bootenv=uEnv.txt\0" \
        "loadbootenv=load mmc 0 ${loadbootenv_addr} ${bootenv}\0" \
        "importbootenv=echo Importing environment from SD ...; " \
                "env import -t ${loadbootenv_addr} $filesize\0" \
        "sd_uEnvtxt_existence_test=test -e mmc 0 /uEnv.txt\0" \
        "preboot=if test $modeboot = sdboot && env run sd_uEnvtxt_existence_test; " \
                        "then if env run loadbootenv; " \
                                "then env run importbootenv; " \
                        "fi; " \
                "fi; \0" \
        "mmc_loadbit=echo Loading bitstream from SD/MMC/eMMC to RAM.. && " \
                "mmcinfo && " \
                "load mmc 0 ${loadbit_addr} ${bitstream_image} && " \
                "fpga load 0 ${loadbit_addr} ${filesize}\0" \
        "norboot=echo Copying Linux from NOR flash to RAM... && " \
                "cp.b 0xE2100000 ${kernel_load_address} ${kernel_size} && " \
                "cp.b 0xE2600000 ${devicetree_load_address} ${devicetree_size} && " \
                "echo Copying ramdisk... && " \
                "cp.b 0xE2620000 ${ramdisk_load_address} ${ramdisk_size} && " \
                "bootm ${kernel_load_address} ${ramdisk_load_address}         
                 ${devicetree_load_address}\0" \
        "qspiboot=echo Copying Linux from QSPI flash to RAM... && " \
                "sf probe 0 0 0 && " \
                "sf read ${kernel_load_address} 0x100000 ${kernel_size} && " \
                "sf read ${devicetree_load_address} 0x600000 ${devicetree_size} && " \
                "echo Copying ramdisk... && " \
                "sf read ${ramdisk_load_address} 0x620000 ${ramdisk_size} && " \
                "bootm ${kernel_load_address} ${ramdisk_load_address} 
                ${devicetree_load_address}\0" \

由上面可以提出QSPI相关的信息如下:

kernel_load_address=0x2080000
ramdisk_load_address=0x4000000
devicetree_load_address=0x2000000
kernel_size=0x500000                 #5M
devicetree_size=0x20000              #128K
ramdisk_size=0x5E0000                #5.8M

再看QSPI相关

        "qspiboot=echo Copying Linux from QSPI flash to RAM... && " \
                "sf probe 0 0 0 && " \
                "sf read ${kernel_load_address} 0x100000 ${kernel_size} && " \
                "sf read ${devicetree_load_address} 0x600000 ${devicetree_size} && " \
                "echo Copying ramdisk... && " \
                "sf read ${ramdisk_load_address} 0x620000 ${ramdisk_size} && " \
                "bootm ${kernel_load_address} ${ramdisk_load_address} 
                ${devicetree_load_address}\0" \

把上面参数代进去可以得到

sf read  [addr]       [off]      [len]
sf read  0x02080000   0x10_0000  0x50_0000   #5M
sf read  0x02000000   0x60_0000  0x2_0000    #128K
sf read  0x04000000   0x62_0000  0x5e_0000   #5.9M


bootm 0x0208_0000 0x0400_0000 0x0200_0000 # bootm kernel ramdisk dtb

由此不难得到分区如下:

.name        start-addr       end-addr       #len
.u-boot      0                10_0000        #1M
.kernel      10_0000          60_0000        #5M
.dtb         60_0000          2_0000         #128K
.fs          62_0000          C0_0000        #0x5e_0000 (5.8M)

那环境变量存在哪里呢?

看u-boot里面

define CONFIG_ENV_OFFSET             0xE0000

即     0xE0000  ~  0x10_0000   # 128K

#ifndef CONFIG_ENV_IS_NOWHERE

	# ifndef CONFIG_SYS_NO_FLASH
		/* Environment in NOR flash */
		#  define CONFIG_ENV_IS_IN_FLASH
	# elif defined(CONFIG_ZYNQ_QSPI)
		/* Environment in Serial Flash */
		#  define CONFIG_ENV_IS_IN_SPI_FLASH
	# elif defined(CONFIG_NAND_ZYNQ)
		/* Environment in NAND flash */
		#  define CONFIG_ENV_IS_IN_NAND
	# elif defined(CONFIG_SYS_NO_FLASH)
		#  define CONFIG_ENV_IS_NOWHERE
	# endif

	# define CONFIG_ENV_SECT_SIZE           CONFIG_ENV_SIZE

	/* cc108 requires to be 0xF00000 to have boot.bin with bitstream included */
	# ifndef CONFIG_ENV_OFFSET
		#  define CONFIG_ENV_OFFSET             0xE0000
	# endif
#endif

由配置.config可知,CONFIG_SYS_NO_FLASH, CONFIG_ZYNQ_QSPI都由定义,则CONFIG_ENV_IS_IN_SPI_FLASH

即bootenv和u-boot放在一起,即

.name        start-addr       end-addr       #len
.u-boot      0                E_0000         #896K
.env         E_00000          10_0000        #128K (0x20000)
.kernel      10_0000          60_0000        #5M
.dtb         60_0000          2_0000         #128K
.fs          62_0000          C0_0000        #0x5e_0000 (5.8M)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值