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