1. 下载xilinx的u-boot源码。
命令:git clone git://git.xilinx.com/u-boot-xlnx.git
2. 取到自己想要的分支。
我们用上面的命令得到的源码默认是master分支,我们可以用checkout来取到我们想要的tag的源码。
首先用git status可以得到:
# On branch master
nothing to commit (working directory clean)
确认我们是在master分支,然后登录https://github.com/Xilinx/u-boot-xlnx,查看master分支有哪些tag。 选择自己想要的tag,比如我使用的是ISE14.6, 所以我就选择了xilinx-v14.6.01版本。 使用命令:git checkout -b xilinx-v14.6.01 xilinx-v14.6.01 结束后使用git status看,已经切换到xilinx-v14.6.01了。 # On branch xilinx-v14.6.01 nothing to commit (working directory clean) 3. 编辑自己的配置文件 对单板u-boot的配置主要通过配置头文件来完成,比如xilinx提供的u-boot里,如果要对zedboard配置,可以使用zynq_zed.h这个头文件,那么配置的命令如下: make distclean make zynq_zed_config make 但是我想对u-boot做一些修改。 首先我将zynq_zed.h文件复制一份,命名为zynq_hello.h。 然后对zynq_hello.h做一些修改。 1)修改环境变量: 添加如下: /* Default environment */ #undef CONFIG_EXTRA_ENV_SETTINGS #define CONFIG_EXTRA_ENV_SETTINGS \ "ethaddr=00:0a:35:00:01:22\0"\ "kernel_image=zImage\0"\ "ramdisk_image=ramdisk32M.image.gz\0"\ "devicetree_image=devicetree.dtb\0"\ "bitstream_image=system.bit.bin\0"\ "loadbit_addr=0x100000\0"\ "kernel_size=0x500000\0"\ "devicetree_size=0x20000\0"\ "ramdisk_size=0x5E0000\0"\ "fdt_high=0x20000000\0"\ "initrd_high=0x20000000\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" \ "sdboot=echo Copying Linux from SD to RAM... && " \ "mmcinfo && " \ "fatload mmc 0 0x8000 ${kernel_image} && " \ "fatload mmc 0 0x1000000 ${devicetree_image} && " \ "fatload mmc 0 0x2000000 ${ramdisk_image} && " \ "go 0x8000\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 0x8000 ${kernel_image} && " \ "tftp 0x1000000 ${devicetree_image} && " \ "tftp 0x2000000 ${ramdisk_image} && " \ "go 0x8000\0" 这个环境变量主要决定了zImage, devicetree和文件系统的名称。比如默认的文件系统名称是uramdisk.image.gz, 我改为ramdisk32M.image.gz这个名称。另外改变这些文件在内存上的放置的位置。 还添加: #undef CONFIG_IPADDR #define CONFIG_IPADDR172.19.67.186 #undef CONFIG_SERVERIP #define CONFIG_SERVERIP172.19.67.185 修改IP设置。 添加: /* Default boot from SD card. */ #undef CONFIG_BOOTCOMMAND #define CONFIG_BOOTCOMMAND "run jtagboot" 将boot的方式改为tftp加载。 大家当然也可以添加一些自己想要修改的参数。 4. 修改boards.cfg文件,添加如下: zynq_hello arm armv7 zynq xilinx zynq 5. 使用指令,就可以生成u-boot文件。 make distclean make zynq_hello_config make