下面来分析,uboot_xlnx_2013.4默认的zynq_common.h的配置文件。大部分需要改动的内容,都在这个里面。
#define CONFIG_IPADDR 10.10.70.102
默认IP地址,修改成板子需要设置的地址。例如192.168.1.10
#define CONFIG_SERVERIP 10.10.70.101
默认SERVERIP地址,修改成板子需要的地址。例如192.168.1.11
#define CONFIG_SYS_SDRAM_BASE 0
SDRAM_BASE,保持为0.
#define CONFIG_SYS_SDRAM_SIZE PHYS_SDRAM_1_SIZE
SDRAM_SIZE,保持为PHYS_SDRAM_1_SIZE。这个宏,在板子的配置文件里定义。
#define CONFIG_SYS_TEXT_BASE 0x04000000
UBOOT的执行地址,这是DDR的起始地址,表示将代码搬移到DDR中,并重定位到DDR中,从DDR执行。
#define CONFIG_ENV_SIZE (128 << 10) /*128KB*/
定义ENV_SIZE的大小。
#define CONFIG_ENV_OVERWRITE
允许overwrite serial and ethaddr。
#define CONFIG_SYS_MALLOC_LEN 0x400000
定义Size of malloc() pool。
#define CONFIG_BAUDRATE 115200
定义串口波特率。
#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 38400, 115200 }
定义串口波特率表。
#if defined(CONFIG_ZYNQ_SERIAL_UART0) || defined(CONFIG_ZYNQ_SERIAL_UART1)
#define CONFIG_ZYNQ_SERIAL
#endif
定义代码中包含了串口。CONFIG_ZYNQ_SERIAL_UART1这个宏,需要在板子配置文件中定义。
/* Ethernet driver */
#if defined(CONFIG_ZYNQ_GEM0) || defined(CONFIG_ZYNQ_GEM1)
#define CONFIG_NET_MULTI
#define CONFIG_ZYNQ_GEM
#define CONFIG_MII
#define CONFIG_SYS_FAULT_ECHO_LINK_DOWN
#define CONFIG_PHYLIB
#define CONFIG_PHY_MARVELL
#define CONFIG_SYS_ENET
#endif
定义代码中包含以太网。
CONFIG_ZYNQ_GEM0这个宏,需要在板子配置文件中定义。
另外,还需要定义CONFIG_ZYNQ_GEM_PHY_ADDR0这个宏。例如zed,定义为0.
#define CONFIG_ZYNQ_GEM_PHY_ADDR0 0
/* Miscellaneous configurable options */
#define CONFIG_SYS_PROMPT "zynq-uboot> "
定义显示的提示字符。
#define CONFIG_SYS_HUSH_PARSER /* use "hush" command parser */
#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
#define CONFIG_CMDLINE_EDITING
支持命令行修改,为CMDLINE配置inputbuffer。
#define CONFIG_AUTO_COMPLETE
支持命令行自动完成。
#define CONFIG_SYS_LONGHELP
支持长篇帮助。
#define CONFIG_CLOCKS
#define CONFIG_CMD_CLK
支持时钟功能。
#define CONFIG_BOARD_LATE_INIT
支持BOARD_LATE_INIT。
#define CONFIG_SYS_MAXARGS 32
命令行最大参数数量。
#define CONFIG_SYS_CBSIZE 2048
命令行字符缓存区大小。
#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \
sizeof(CONFIG_SYS_PROMPT) + 16)
命令行打印字符缓冲区大小。
#define CONFIG_OF_LIBFDT
支持FDT。
/* NOR */
#ifndef CONFIG_SYS_NO_FLASH
#define CONFIG_SYS_FLASH_BASE 0xE2000000
#define CONFIG_SYS_FLASH_SIZE (16 * 1024 * 1024)
#define CONFIG_SYS_MAX_FLASH_BANKS 1
/* max number of sectors/blocks on one chip */
#define CONFIG_SYS_MAX_FLASH_SECT 512
#define CONFIG_SYS_FLASH_ERASE_TOUT 1000
#define CONFIG_SYS_FLASH_WRITE_TOUT 5000
#define CONFIG_FLASH_SHOW_PROGRESS 10
#define CONFIG_SYS_FLASH_CFI
#undef CONFIG_SYS_FLASH_EMPTY_INFO
#define CONFIG_FLASH_CFI_DRIVER
#undef CONFIG_SYS_FLASH_PROTECTION /* don't use hardware protection */
/* use buffered writes (20x faster) */
#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE
#define CONFIG_ZYNQ_M29EW_WB_HACK
#endif
定义是否包含NOR功能。CONFIG_SYS_NO_FLASH这个宏,需要在板子的配置文件里定义。
/* SPI */
#ifdef CONFIG_ZYNQ_SPI
#define CONFIG_SPI_FLASH
#define CONFIG_SPI_FLASH_SST
#define CONFIG_CMD_SPI
#define CONFIG_CMD_SF
#endif
定义是否包含SPI功能。
/* QSPI */
#ifdef CONFIG_ZYNQ_QSPI
#define CONFIG_SF_DEFAULT_SPEED 30000000
#define CONFIG_SPI_FLASH
#define CONFIG_SPI_FLASH_BAR
#define CONFIG_SPI_FLASH_SPANSION
#define CONFIG_SPI_FLASH_STMICRO
#define CONFIG_SPI_FLASH_WINBOND
#define CONFIG_CMD_SPI
#define CONFIG_CMD_SF
#endif
定义是否包含QSPI功能。CONFIG_ZYNQ_QSPI这个宏,需要在板子的配置文件里定义。
/* MMC */
#if defined(CONFIG_ZYNQ_SDHCI0) || defined(CONFIG_ZYNQ_SDHCI1)
#define CONFIG_MMC
#define CONFIG_GENERIC_MMC
#define CONFIG_SDHCI
#define CONFIG_ZYNQ_SDHCI
#define CONFIG_CMD_MMC
#define CONFIG_CMD_FAT
#define CONFIG_SUPPORT_VFAT
#define CONFIG_CMD_EXT2
#define CONFIG_DOS_PARTITION
#endif
定义是否包含MMC功能。CONFIG_ZYNQ_SDHCI0这个宏,需要在板子配置文件里定义。
/* NAND */
#ifdef CONFIG_NAND_ZYNQ
#define CONFIG_CMD_NAND
#define CONFIG_CMD_NAND_LOCK_UNLOCK
#define CONFIG_SYS_MAX_NAND_DEVICE 1
#define CONFIG_SYS_NAND_SELF_INIT
#define CONFIG_SYS_NAND_ONFI_DETECTION
#define CONFIG_MTD_DEVICE
#endif
定义是否包含NAND功能。
/* I2C */
#if defined(CONFIG_ZYNQ_I2C0) || defined(CONFIG_ZYNQ_I2C1)
#define CONFIG_CMD_I2C
#define CONFIG_SYS_I2C
#define CONFIG_SYS_I2C_ZYNQ
/* # define CONFIG_SYS_I2C */
#define CONFIG_SYS_I2C_ZYNQ_SPEED 100000
#define CONFIG_SYS_I2C_ZYNQ_SLAVE 1
#endif
定义是否包含I2C功能。
/* EEPROM */
#ifdef CONFIG_ZYNQ_EEPROM
#define CONFIG_CMD_EEPROM
#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1
#define CONFIG_SYS_I2C_EEPROM_ADDR 0x54
#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 4
#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 5
#define CONFIG_SYS_EEPROM_SIZE 1024 /* Bytes */
#endif
定义是否包含EEPROM功能。
/* For development/debugging */
#ifdef DEBUG
#define CONFIG_CMD_REGINFO
#define CONFIG_PANIC_HANG
#endif
定义是否支持DEBUG。DEBU
G这个宏,需要在板子配置文件里定义。
/* Default environment */
#ifndef CONFIG_EXTRA_ENV_SETTINGS
#define CONFIG_EXTRA_ENV_SETTINGS \
"ethaddr=00:0a:35:00:01:22\0" \
"kernel_image=uImage\0" \
"ramdisk_image=uramdisk.image.gz\0" \
"devicetree_image=devicetree.dtb\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=fatload mmc 0 ${loadbootenv_addr} ${bootenv}\0" \
"importbootenv=echo Importing environment from SD ...; " \
"env import -t ${loadbootenv_addr} $filesize\0" \
"mmc_loadbit_fat=echo Loading bitstream from SD/MMC/eMMC to RAM.. && " \
"mmcinfo && " \
"fatload 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 0x3000000 ${kernel_size} && " \
"cp.b 0xE2600000 0x2A00000 ${devicetree_size} && " \
"echo Copying ramdisk... && " \
"cp.b 0xE2620000 0x2000000 ${ramdisk_size} && " \
"bootm 0x3000000 0x2000000 0x2A00000\0" \
"qspiboot=echo Copying Linux from QSPI flash to RAM... && " \
"sf probe 0 0 0 && " \
"sf read 0x3000000 0x100000 ${kernel_size} && " \
"sf read 0x2A00000 0x600000 ${devicetree_size} && " \
"echo Copying ramdisk... && " \
"sf read 0x2000000 0x620000 ${ramdisk_size} && " \
"bootm 0x3000000 0x2000000 0x2A00000\0" \
"uenvboot=" \
"if run loadbootenv; then " \
"echo Loaded environment from ${bootenv}; " \
"run importbootenv; " \
"fi; " \
"if test -n $uenvcmd; then " \
"echo Running uenvcmd ...; " \
"run uenvcmd; " \
"fi\0" \
"sdboot=if mmcinfo; then " \
"run uenvboot; " \
"echo Copying Linux from SD to RAM... && " \
"fatload mmc 0 0x3000000 ${kernel_image} && " \
"fatload mmc 0 0x2A00000 ${devicetree_image} && " \
"fatload mmc 0 0x2000000 ${ramdisk_image} && " \
"bootm 0x3000000 0x2000000 0x2A00000; " \
"fi\0" \
"nandboot=echo Copying Linux from NAND flash to RAM... && " \
"nand read 0x3000000 0x100000 ${kernel_size} && " \
"nand read 0x2A00000 0x600000 ${devicetree_size} && " \
"echo Copying ramdisk... && " \
"nand read 0x2000000 0x620000 ${ramdisk_size} && " \
"bootm 0x3000000 0x2000000 0x2A00000\0" \
"jtagboot=echo TFTPing Linux to RAM... && " \
"tftp 0x3000000 ${kernel_image} && " \
"tftp 0x2A00000 ${devicetree_image} && " \
"tftp 0x2000000 ${ramdisk_image} && " \
"bootm 0x3000000 0x2000000 0x2A00000\0" \
"rsa_norboot=echo Copying Image from NOR flash to RAM... && " \
"cp.b 0xE2100000 0x100000 ${boot_size} && " \
"zynqrsa 0x100000 && " \
"bootm 0x3000000 0x2000000 0x2A00000\0" \
"rsa_nandboot=echo Copying Image from NAND flash to RAM... && " \
"nand read 0x100000 0x0 ${boot_size} && " \
"zynqrsa 0x100000 && " \
"bootm 0x3000000 0x2000000 0x2A00000\0" \
"rsa_qspiboot=echo Copying Image from QSPI flash to RAM... && " \
"sf probe 0 0 0 && " \
"sf read 0x100000 0x0 ${boot_size} && " \
"zynqrsa 0x100000 && " \
"bootm 0x3000000 0x2000000 0x2A00000\0" \
"rsa_sdboot=echo Copying Image from SD to RAM... && " \
"fatload mmc 0 0x100000 ${boot_image} && " \
"zynqrsa 0x100000 && " \
"bootm 0x3000000 0x2000000 0x2A00000\0" \
"rsa_jtagboot=echo TFTPing Image to RAM... && " \
"tftp 0x100000 ${boot_image} && " \
"zynqrsa 0x100000 && " \
"bootm 0x3000000 0x2000000 0x2A00000\0"
#endif
定义CONFIG_EXTRA_ENV_SETTINGS。用来配置默认的环境变量。这个宏需要修改。
#define CONFIG_BOOTDELAY 3 /* -1 to Disable autoboot */
定义BOOT时的读秒。
#define CONFIG_SYS_LOAD_ADDR 0 /* default? */
定义加载地址。
#define CONFIG_ZERO_BOOTDELAY_CHECK 1
定义读秒检查。
/* Physical Memory map */
#define CONFIG_NR_DRAM_BANKS 1
#define PHYS_SDRAM_1 0
定义内存的使用与编号。
#define CONFIG_SYS_MEMTEST_START PHYS_SDRAM_1
定义内存自检的起始地址。
#define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_MEMTEST_START + \
PHYS_SDRAM_1_SIZE - (16 * 1024 * 1024))
定义内存自检的结束地址。
#define CONFIG_SYS_INIT_RAM_ADDR 0xFFFF0000
#define CONFIG_SYS_INIT_RAM_SIZE 0x1000
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INIT_RAM_ADDR + \
CONFIG_SYS_INIT_RAM_SIZE - \
GENERATED_GBL_DATA_SIZE)
定义初始化内存地址区间。
/* Enable the PL to be downloaded */
#define CONFIG_FPGA
#define CONFIG_FPGA_XILINX
#define CONFIG_FPGA_ZYNQPL
#define CONFIG_CMD_FPGA
定义包含PL下载功能。
/* FIT support */
#define CONFIG_FIT 1
#define CONFIG_FIT_VERBOSE 1 /* enable fit_format_{error,warning}() */
定义支持FIT。
/* Boot FreeBSD/vxWorks from an ELF image */
#if defined(CONFIG_ZYNQ_BOOT_FREEBSD)
#define CONFIG_API
#define CONFIG_CMD_ELF
#define CONFIG_SYS_MMC_MAX_DEVICE 1
#endif
定义包含FreeBSD。CONFIG_ZYNQ_BOOT_FREEBSD这个宏,需要在板子配置文件中定义。
再来分析zynq_test.h。
#define PHYS_SDRAM_1_SIZE (1024 * 1024 * 1024)
#define CONFIG_ZYNQ_SERIAL_UART1
#define CONFIG_ZYNQ_GEM0
#define CONFIG_ZYNQ_GEM_PHY_ADDR0 0
#define CONFIG_SYS_NO_FLASH
#define CONFIG_ZYNQ_SDHCI0
#define CONFIG_ZYNQ_QSPI
#define CONFIG_ZYNQ_BOOT_FREEBSD
以上都和zynq_zed.h一样。
#define CONFIG_ZYNQ_USB
这里增加了对USB的支持。
#define CONFIG_ENV_OFFSET 0x080000
#define CONFIG_ENV_SIZE (128*1024)
#define CONFIG_ENV_SECT_SIZE (4*1024) // W25Q128 is 4KB sector type
增加了对NOR FLASH的支持。
#define CONFIG_DEFAULT_DEVICE_TREE zynq-test
定义了设备树的默认名称。但是旧版本不使用设备树。
#define CONFIG_IPADDR 192.168.1.55
#define CONFIG_SERVERIP 192.168.1.13
定义网络地址。这一步可以直接在zynq_common.h里面改,不需要在这里改。
#define CONFIG_EXTRA_ENV_SETTINGS \
........
定义默认环境变量。这一步可以直接在zynq_common.h里面改,不需要在这里改。
#include <configs/zynq_common.h>
最后一步,包含zynq_common.h。实现裁剪配置。