在之前的文档中笔者已经写了有关内核源码树、根文件系统的定制笔记,但是工程中用的u-boot.elf文件还是例子中的,没有亲自动手编译过,心里总觉得不太明白,于是乎就下载了uboot的源码,仔细查看了有关README并成功的编译生成了启动引导加载程序u-boot.elf,下面是详细的步骤

1、下载uboot源码,https://github.com/Digilent/u-boot-digilent笔者用的源码是2012-04-01版本的,为了方便笔者将其共享出来。

2、解压缩源码,并进入该目录

3、查看README,可以看到,UBOOT的最简单的编译方法是按照对应的主板的config文件来make就可以了,而具体的目录是在include/configs,笔者切换工作目录到该文件夹下,查看是否有zynq相关配置文件,具体如图1所示:

     

1

可以看到最后一个选项即为我们要找的头文件,使用vim打开该文件,具体如下所示(部分截图)

             

2

可以看到这个文件里面定义了一些特定的参数,例如IP地址,内核大小、根文件系统大小等等,如果需要修改的话可以修改如下,为了和官方提供的uboot区分开,笔者修改了参数CONFIG_SYS_PROMPT的值,将其改为jefby-boot,下一步,我们开始配置uboot并编译生成u-boot.elf文件,

4、配置并编译

切换目录到第2步解压缩的目录下,输入如下所示命令

make zynq_zed_config

make

5、拷贝u-bootU盘中,并打开ISE工程,使用XILINX PROGRAM工具制作BOOT.BIN文件。如图3所示:

   

3

请注意烧写的顺序,制作完成后将生成的 u-boot.bin文件修改为BOOT.BIN文件,连同devicetree.dtbramdisk8M.image.gzzImage一起拷贝到SD卡中,完成后使用串口和ZEDBOARD连接,并设置从SD卡启动,启动后在串口窗口中输入任意键,这样就可以手动来引导linux系统具体如图4所示:

在图4中可以看到,此时系统的CONFIG_SYS_PROMPT值已经是我们刚才设置的jefby-boot,输入mmcinfo查看mmc信息,接着输入如下命令:

fatload mmc 0 0x8000 zImage //mmc的第一个FAT分区加载zImage到处理器的0x8000内存处

fatload mmc 0 0x1000000 devicetree.dtb//mmc的第一个FAT分区加载devicetree.dtb到处理器的0x1000000内存处

fatload mmc 0 0x800000 ramdisk8M.image.gz //mmc的第一个FAT分区加载ramdisk8M.image.gz到处理器的0x800000内存处

go 0x8000 //从内存的0x8000处开始运行linux内核

具体如图5所示:

完成后,可以看到已经成功启动了!具体如图6所示:说明我们制作的uboot引导加载器已经成功运行了!

   

4

   

                                                                5

   

                              图6