Toolchain -> Toolchain prefix -> arm-xilinx-linux-gnueabi (no "-" at the end)
Toolchain -> External toolchain gcc version -> <the-toolchain-version-you-noted>
Toolchain -> External toolchain C library -> glibc/eglibc
Toolchain -> Toolchain has RPC support? -> yes
Toolchain -> Toolchain has C++ support? -> yes
Toolchain -> Purge unwanted locales -> yes
Toolchain -> Locales to keep -> C en_US
Toolchain -> Generate locale data -> en_US.UTF-8
System configuration -> System hostname -> secbus
System configuration -> System banner -> Welcome to SecBus (c) Telecom ParisTech. Root password: secbus
System configuration -> Root password -> secbus
Kernel -> Linux Kernel -> no
Target packages -> BusyBox configuration file to use? -> <BUILDDIR>/busybox.config
Bootloaders -> U-Boot -> no
```
Note: do not use the `$BUILDDIR` environment variable. Replace <BUILDDIR> by the absolute path (`/opt/build` in our example) in the examples above. Quit with saving. We are almost done. Save the `buildroot` and `busybox` configurations and build the root file system:
```bash
make O=$BUILDDIR/initramfs savedefconfig
make O=$BUILDDIR/initramfs busybox-update-config
make O=$BUILDDIR/initramfs
```
If you get an error:
```
Incorrect selection of kernel headers: expected x.x.x, got y.y.y
```
note the `y.y.y` run again the `buildroot` configuration:
```bash
make O=$BUILDDIR/initramfs menuconfig
```
change:
```
Toolchain -> External toolchain kernel headers series -> the-kernel-version-you-noted
```
quit with saving, save again the configuration and build:
```bash
make O=$BUILDDIR/initramfs savedefconfig
make O=$BUILDDIR/initramfs
```
## Generate the U-Boot image of the root file system image
```bash
cd$BUILDDIR
mkimage -A arm -T ramdisk -Cgzip-d initramfs/images/rootfs.cpio.gz rootfs.cpio.uboot
```
## Generate the Device Tree Sources (DTS) for your system
We assume that you used Vivado to create a Zynq design and that you synthesized it. You should find its Hardware Description File (HDF) in the Vivado output results. Its name is something like `xxx.sysdef`. We also assume that you have the Xilinx tools in your `PATH`. Download the provided [dts.hsi.tcl](zedboard-linux-uboot-dtb-buildroot/dts.hsi.tcl) TCL script and save it in `$BUILDDIR`. Use it to generate the DTS using the `hsi` utility from the Xilinx SDK:
## Generate the First Stage Boot Loader (FSBL) for your system
Download the provided [fsbl.hsi.tcl](zedboard-linux-uboot-dtb-buildroot/fsbl.hsi.tcl) TCL script and save it in `$BUILDDIR`. Use it to generate the FSBL using the `hsi` utility from the Xilinx SDK:
Pack the FSBL ELF, the bitstream (if any) for the programmable logic and the U-Boot ELF. First Download the provided [boot.bif](zedboard-linux-uboot-dtb-buildroot/boot.bif) boot image specification file and save it in `$BUILDDIR`. If you do not have a bitstream for the programmable logic edit `boot.bif` and comment out the line corresponding to the bitstream:
```
// bitstream.bit
```
Else, copy the bitstream (which should be in the same directory where you found the `xxx.sysdef` Hardware Description File) in `$BUILDDIR`:
Unmount and eject the SD card, plug it to the ZedBoard, connect the USB UART cable, launch a serial console (minicom, cu, putty, screen...) and finally power up the ZedBoard. The first time you boot, the U-Boot environment variables are probably not what they should be. Stop the U-Boot count-down, restore the default environment variables (print and save the previous configuration if needed):
```
zynq-uboot> env default -a -f
```
Modify the following U-Boot environment variable to reflect the name of our root file system: