U-BOOT for Xilinx FPGA
DONATE
Donations are appreciated and gratefully received! They assist in the running cost and future developments of U-BOOT and Linux for Microblaze CPU.
<html>
<form action=“https://www.paypal.com/cgi-bin/webscr” method=“post”>
<input type=“hidden” name=“cmd” value=“_donations”>
<input type=“hidden” name=“business” value=“monstr@monstr.eu”>
<input type=“hidden” name=“item_name” value=“Linux & U-BOOT Microblaze maintaining”>
<input type=“hidden” name=“page_style” value=“PayPal”>
<input type=“hidden” name=“no_shipping” value=“0”>
<input type=“hidden” name=“return” value=“http://www.monstr.eu/wiki/doku.php?id=paypal:thanks”>
<input type=“hidden” name=“logo_custom” value=“https://www.paypal.com/en_US/i/btn/x-click-but04.gif”>
<input type=“hidden” name=“no_note” value=“1”>
<input type=“hidden” name=“currency_code” value=“EUR”>
<input type=“hidden” name=“tax” value=“0”>
<input type=“hidden” name=“bn” value=“PP-DonationsBF”>
<input type=“image” src=“https://www.paypal.com/en_US/i/btn/x-click-but04.gif” border=“0” name=“submit” alt=“PayPal - The safer, easier way to pay online!”>
<img alt=“” border=“0” src=“https://www.paypal.com/en_US/i/scr/pixel.gif” width=“1” height=“1”>
</form>
</html>
Links
What I would like to test?
Download
Microblaze
Rules
Step by Step manual
# cd /opt/petalogix/
# . setting.sh
# git clone git://www.denx.de/git/u-boot.git
# git clone git://www.denx.de/git/u-boot-microblaze.git
Download latest U-BOOT edk generator
Use edk_project_repository folder and point there EDK project (check *.xmp - ModuleSearchPath)
You have two choices how to build U-BOOT bsp
Part of MSS file for TOP bsp
BEGIN OS
PARAMETER OS_NAME = top
PARAMETER OS_VER = 1.00.b
PARAMETER name = ml505
PARAMETER PROC_INSTANCE = microblaze_0
PARAMETER timer = xps_timer_0
PARAMETER ethernet = Hard_Ethernet_MAC
PARAMETER lmb_memory = dlmb_cntlr
PARAMETER main_memory = DDR2_SDRAM
PARAMETER stdin = RS232_Uart_1
PARAMETER stdout = RS232_Uart_1
END
Part of MSS file for U-BOOT bsp
BEGIN OS
PARAMETER OS_NAME = uboot
PARAMETER OS_VER = 4.00.c
PARAMETER PROC_INSTANCE = microblaze_0
PARAMETER stdin = RS232_Uart_1
PARAMETER stdout = RS232_Uart_1
PARAMETER timer = xps_timer_0
PARAMETER ethernet = Hard_Ethernet_MAC
PARAMETER main_memory = DDR2_SDRAM
END
In microblaze_0/libsrc you can find generated folders with config files
Go to uboot_v$_$$_$ folder and there are two files
Copy those files to u-boot board folder in U-BOOT source tree (board/xilinx/ml401 or board/xilinx/xupv2p or later to board/mb_first/)
You can use prepared two folders for Microblaze boards
Building U-BOOT
# export ARCH=microblaze
# export CROSS_COMPILE=microblaze-uclinux-
# make ml401_config (or make xupv2p_config)
# make
board user
configdevice devicenr 1 idcode 0x5026093 irlength 8 partname XC18V04
configdevice devicenr 2 idcode 0x123e093 irlength 10 partname XC2VP4
debugdevice devicenr 2 cpunr 1
Creating own board (called mb_first) in U-BOOT
copy board/xilinx/ml401 to board/mb_first
go to board/mb_first and rename ml401.c to mb_first.c (the name must be the same as is name of board)
copy include/configs/ml401.h to include/configs/mb_first.h
change include file (#include “../board/xilinx/ml401/xparameters.h”) to #include “../board/mb_first/xparameters.h”
you can change others parameters too. For example #define CONFIG_ML401 1 to #define CONFIG_
MB_FIRST 1 and others
edit top level Makefile and add your new label for your board (tabs are important - look at ml401 board)
mb_first_config: unconfig
@mkdir -p $(obj)include
@echo "#define CONFIG_MB_FISRT 1" > $(obj)include/config.h
@$(MKCONFIG) -a $(@:_config=) microblaze microblaze mb_first
[monstr@monstr.eu u-boot-denx-de]$ make mb_first_config
Configuring for mb_first board...
[monstr@monstr.eu u-boot-denx-de]$ make
...
-Map u-boot.map -o u-boot
microblaze-uclinux-objcopy -O srec u-boot u-boot.srec
microblaze-uclinux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin
Bad flash sector size
If you can't see U-BOOT prompt and just see this line, you should check your board config file and sector size.
Warning - bad CRC, using default environment
U-BOOT failed
Here is the example where you can't use u-boot. It doesn't matter which U-BOOT version is it.
In this case run simple Xilinx test memory because this mean that you have problem with some access to main memory. In some cases you should look at size of cache.
SDRAM :
Enabling caches :
Icache:OK
aacc::OO UUooooSStttt::8dfc0000
MMllooSStttt::ffff0000
BBrrddnnffSStttt::ffffdddd
BBtt rraattee SSrrttxxff66dd0
FLASH:
-- Entering main() --
Starting MemoryTest for DDR_SDRAM:
Running 32-bit test...PASSED!
Running 16-bit test...FAILED!
Running 8-bit test...FAILED!
-- Exiting main() --
Smart U-BOOT building
Use output dir for storing temporary files
make O=/tmp/build distclean
make O=/tmp/build xupv2p_config
make O=/tmp/build all
Note that if the 'O=output/dir' option is used then it must be used for all invocations of make.
You can specify shell variable
export BUILD_DIR=/tmp/build
make distclean
make xupv2p_config
make all
U-BOOT with FS-BOOT
Create stub with PetaLinux tools for interaction with FS-BOOT
# petalinux-reloc-blob -l 0x90000000 -i u-boot -o /tftpboot/u-boot-s
Payload load address:0x8c000000
Payload size: 165352
#cp u-boot-s.bin /tftpboot/
Loading u-boot-s.bin with tftp and copy to flash memory
U-Boot-mONStR> ver
U-Boot 1.3.1-g93972a22 (Jan 29 2008 - 10:37:37)
U-Boot-mONStR> flinfo
Bank # 1: CFI conformant FLASH (8 x 8) Size: 16 MB in 128 Sectors
Intel Extended command set, Manufacturer ID: 0x89, Device ID: 0x18
Erase timeout: 4096 ms, write timeout: 1 ms
Buffer write timeout: 2 ms, buffer size: 32 bytes
Sector Start Addresses:
90000000 90020000 90040000 RO 90060000 E 90080000 E
900A0000 E 900C0000 E 900E0000 E 90100000 E 90120000 E
90140000 E 90160000 E 90180000 E 901A0000 E 901C0000 E
901E0000 E 90200000 E 90220000 E 90240000 E 90260000 E
90280000 E 902A0000 E 902C0000 E 902E0000 E 90300000 E
90320000 E 90340000 E 90360000 E 90380000 903A0000
903C0000 903E0000 90400000 90420000 90440000
90460000 90480000 904A0000 904C0000 904E0000
90500000 90520000 90540000 90560000 E 90580000 E
905A0000 E 905C0000 E 905E0000 E 90600000 E 90620000 E
90640000 E 90660000 E 90680000 E 906A0000 E 906C0000 E
906E0000 E 90700000 E 90720000 E 90740000 E 90760000 E
90780000 E 907A0000 E 907C0000 E 907E0000 E 90800000 E
90820000 E 90840000 E 90860000 E 90880000 E 908A0000 E
908C0000 E 908E0000 E 90900000 E 90920000 E 90940000 E
90960000 E 90980000 E 909A0000 E 909C0000 E 909E0000 E
90A00000 E 90A20000 E 90A40000 E 90A60000 E 90A80000 E
90AA0000 E 90AC0000 E 90AE0000 E 90B00000 E 90B20000 E
90B40000 E 90B60000 E 90B80000 E 90BA0000 E 90BC0000 E
90BE0000 E 90C00000 E 90C20000 E 90C40000 E 90C60000 E
90C80000 E 90CA0000 E 90CC0000 E 90CE0000 E 90D00000 E
90D20000 E 90D40000 E 90D60000 E 90D80000 E 90DA0000 E
90DC0000 E 90DE0000 E 90E00000 E 90E20000 E 90E40000 E
90E60000 E 90E80000 E 90EA0000 E 90EC0000 E 90EE0000 E
90F00000 E 90F20000 E 90F40000 E 90F60000 E 90F80000 E
90FA0000 E 90FC0000 E 90FE0000 E
U-Boot-mONStR> tftp 8d000000 u-boot-s.bin
TFTP from server 192.168.0.5; our IP address is 192.168.0.3
Filename 'u-boot-s.bin'.
Load address: 0x8d000000
Loading: ############
done
Bytes transferred = 165080 (284d8 hex)
U-Boot-mONStR> erase 90000000 9003ffff
.. done
Erased 2 sectors
U-Boot-mONStR> cp.b 8d000000 90000000 0x284d8
Copy to Flash... done
U-Boot-mONStR>
Use FIT with U-BOOT
You need ITS file for specifying image structure
/ {
description = "Multi image with single Linux kernel and multiple fs";
#address-cells = <3>;
images {
kernel@1 {
description = "Vanilla Linux kernel for Microblaze";
data = /incbin/("./linux.bin");
type = "kernel";
arch = "microblaze";
os = "linux";
compression = "none";
load = <20000000>;
entry = <20000000>;
hash@1 {
algo = "crc32";
};
/* hash@2 {
algo = "sha1";
};*/
};
fdt@1 {
description = "Flattened Device Tree blob";
data = /incbin/("./system.dtb");
type = "flat_dt";
arch = "microblaze";
compression = "none";
hash@1 {
algo = "crc32";
};
/* hash@2 {
algo = "sha1";
};*/
};
ramdisk@1 {
description = "ramdisk-work";
data = /incbin/("./romfs.img");
type = "ramdisk";
arch = "microblaze";
load = <0>;
os = "linux";
compression = "none";
hash@1 {
algo = "crc32";
};
/* hash@2 {
algo = "sha1";
};*/
};
ramdisk@2 {
description = "ramdisk-second";
data = /incbin/("./romfs-new.img");
type = "ramdisk";
arch = "microblaze";
load = <0>;
os = "linux";
compression = "none";
hash@1 {
algo = "crc32";
};
/* hash@2 {
algo = "sha1";
};*/
};
};
configurations {
default = "conf@2";
conf@1 {
description = "Boot Linux kernel";
kernel = "kernel@1";
fdt = "fdt@1";
};
conf@2 {
description = "Boot Linux kernel with FDT blob";
kernel = "kernel@1";
fdt = "fdt@1";
ramdisk = "ramdisk@1";
};
conf@3 {
description = "Boot Linux kernel with FDT blob romfs2";
kernel = "kernel@1";
fdt = "fdt@1";
ramdisk = "ramdisk@2";
};
};
};
Creating multi FIS image
./mkimage -f microblaze.its image
Booting kernel with FIS
U-Boot-mONStR> tftp 20800000 image
TFTP from server 192.168.1.102; our IP address is 192.168.1.120
Filename 'image'.
Load address: 0x20800000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
#################################################################
###########################################
done
Bytes transferred = 5395000 (525238 hex)
U-Boot-mONStR> imi
## Checking Image at 20800000 ...
FIT image found
FIT description: Simple image with single Linux kernel
Image 0 (kernel@1)
Description: Vanilla Linux kernel for Microblaze
Type: Kernel Image
Compression: uncompressed
Data Start: 0x208000ec
Data Size: 2134016 Bytes = 2 MB
Architecture: MicroBlaze
OS: Linux
Load Address: 0x20000000
Entry Point: 0x20000000
Hash algo: crc32
Hash value: 1e13778c
Image 1 (fdt@1)
Description: Flattened Device Tree blob
Type: Flat Device Tree
Compression: uncompressed
Data Start: 0x20a091d8
Data Size: 6812 Bytes = 6.7 kB
Architecture: MicroBlaze
Hash algo: crc32
Hash value: 0ad0592f
Image 2 (ramdisk@1)
Description: ramdisk-work
Type: RAMDisk Image
Compression: uncompressed
Data Start: 0x20a0ad24
Data Size: 1910784 Bytes = 1.8 MB
Architecture: MicroBlaze
Hash algo: crc32
Hash value: 2da3f91d
Image 3 (ramdisk@2)
Description: ramdisk-second
Type: RAMDisk Image
Compression: uncompressed
Data Start: 0x20bdd5f8
Data Size: 1341440 Bytes = 1.3 MB
Architecture: MicroBlaze
Hash algo: crc32
Hash value: d300b669
Default Configuration: 'conf@2'
Configuration 0 (conf@1)
Description: Boot Linux kernel
Kernel: kernel@1
FDT: fdt@1
Configuration 1 (conf@2)
Description: Boot Linux kernel with FDT blob
Kernel: kernel@1
Init Ramdisk: ramdisk@1
FDT: fdt@1
Configuration 2 (conf@3)
Description: Boot Linux kernel with FDT blob romfs2
Kernel: kernel@1
Init Ramdisk: ramdisk@2
FDT: fdt@1
U-Boot-mONStR> bootm
## Booting kernel from FIT Image at 20800000 ...
Using 'conf@2' configuration
Trying 'kernel@1' kernel subimage
Description: Vanilla Linux kernel for Microblaze
Type: Kernel Image
Compression: uncompressed
Data Start: 0x208000ec
Data Size: 2134016 Bytes = 2 MB
Architecture: MicroBlaze
OS: Linux
Load Address: 0x20000000
Entry Point: 0x20000000
Hash algo: crc32
Hash value: 1e13778c
Verifying Hash Integrity ... crc32+ OK
Loading Kernel Image ... OK
OK
## Flattened Device Tree from FIT Image at 20800000
Using 'conf@2' configuration
Trying 'fdt@1' FDT blob subimage
Description: Flattened Device Tree blob
Type: Flat Device Tree
Compression: uncompressed
Data Start: 0x20a091d8
Data Size: 6812 Bytes = 6.7 kB
Architecture: MicroBlaze
Hash algo: crc32
Hash value: 0ad0592f
Verifying Hash Integrity ... crc32+ OK
Booting using the fdt blob at 0x20a091d8
## Loading init Ramdisk from FIT Image at 20800000 ...
Using 'conf@2' configuration
Trying 'ramdisk@1' ramdisk subimage
Description: ramdisk-work
Type: RAMDisk Image
Compression: uncompressed
Data Start: 0x20a0ad24
Data Size: 1910784 Bytes = 1.8 MB
Architecture: MicroBlaze
Hash algo: crc32
Hash value: 2da3f91d
Verifying Hash Integrity ... crc32+ OK
## Transferring control to Linux (at address 20000000) ...
Booting using OF flat tree...root=romfs, 0x20a0ad24, 0x00000000
Found FDT at 0x20a091d8
Linux version 2.6.26-rc8-mONStR-00245-g25ad359-dirty (monstr@seznam.cz) (gcc version 3.4.1 ( PetaLinux 0.20 Build -rc1 050607 )) #2 Fri Jul 4 12:05:23 CEST 2008
setup_cpuinfo: initialising
setup_cpuinfo: Using full CPU PVR support
setup_memory: max_mapnr: 0x22000
setup_memory: min_low_pfn: 0x20000
setup_memory: max_low_pfn: 0x2000
On node 0 totalpages: 8192
Normal zone: 64 pages used for memmap
Normal zone: 0 pages reserved
Normal zone: 8128 pages, LIFO batch:0
Movable zone: 0 pages used for memmap
Self modified code enable
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 8128
Kernel command line: console=ttyUL0,115200
xlnx,xps-intc-1.00.a #0 at 0x40000000, num_irq=8, edge=0xb0002000
PID hash table entries: 128 (order: 7, 512 bytes)
xlnx,xps-timer-1.00.a #0 at 0x40400000, irq=0
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
Memory: 28208k/32772k available
Calibrating delay loop... 24.67 BogoMIPS (lpj=123392)
Mount-cache hash table entries: 512
net_namespace: 192 bytes
NET: Registered protocol family 16
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 1024 (order: 1, 8192 bytes)
TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
TCP: Hash tables configured (established 1024 bind 1024)
TCP reno registered
NET: Registered protocol family 1
msgmni has been set to 55
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)
40100000.serial: ttyUL0 at MMIO 0x40100003 (irq = 3) is a uartlite
console [ttyUL0] enabled
brd: module loaded
nbd: registered device at major 43
uclinux[mtd]: RAM probe address=0x20257220 size=0x1d3000
Creating 1 MTD partitions on "RAM":
0x00000000-0x001d3000 : "ROMfs"
uclinux[mtd]: set ROMfs to be root filesystem index=0
TCP cubic registered
NET: Registered protocol family 17
VFS: Mounted root (romfs filesystem) readonly.
Freeing unused kernel memory: 92k freed
Mounting proc:
Mounting var:
Populating /var:
Running local start scripts.
Mounting /etc/config:
Mounting sysfs:
Setting hostname:
Setting up interface lo:
Setting up interface eth0:
Starting portmap:
init: Booting to single user mode
#
or booting second configuration by:
bootm <addr>#conf@2
Look at U-boot documentation doc/uImage.FIT
U-BOOT and ROMFS support
This is the old approach which you can find in oldest U-BOOT repo. Currently romfs use special commands.
U-Boot-mONStR> pri
...
nor0=ml401-0
mtdparts=mtdparts=ml401-0:256k(u-boot),256k(env),3m(kernel),1m(romfs),1m(cramfs),-(jffs2)
mtdids=nor0=ml401-0
partition=nor0,3
mtddevnum=3
mtddevname=romfs
Environment size: 333/131068 bytes
U-Boot-mONStR> mtd
device nor0 <ml401-0>, # parts = 6
#: name size offset mask_flags
0: u-boot 0x00040000 0x00000000 0
1: env 0x00040000 0x00040000 0
2: kernel 0x00300000 0x00080000 0
3: romfs 0x00100000 0x00380000 0
4: cramfs 0x00100000 0x00480000 0
5: jffs2 0x00a80000 0x00580000 0
active partition: nor0,3 - (romfs) 0x00100000 @ 0x00380000
defaults:
mtdids : nor0=ml401-0
mtdparts: mtdparts=ml401-0:256k(u-boot),256k(env),3m(kernel),1m(romfs),1m(cramfs),-(jffs2)
U-Boot-mONStR> ls
dx 0 .
h- 0 .. -> .
dx 0 bin
dx 0 mnt
dx 0 etc
l- 8 tmp -> /var/tmp
dx 0 usr
dx 0 dev
dx 0 home
dx 0 var
dx 0 sys
dx 0 lib
dx 0 proc
U-Boot-mONStR>
Creating ACE file from Command line
You should have sourced Xilinx ISE and EDK tools. Copy generated u-boot file from u-boot folder.
Run this command from HW project folder for correct pointing to system.bit.
xmd -tcl genace.tcl -board ml505 -jprog -hw implementation/system.bit -elf u-boot -target mdm -ace ml505.ace
Supported peripherals
HW core | Driver | State |
Emac | drivers/net/xilinx_emac.c | in mainline |
Emaclite | drivers/net/xilinx_emaclite.c | in mainline |
LL-TEMAC | drivers/net/xilinx_ll_temac.c | in internal repository |
SystemACE | drivers/systemace.c | in mainline |
Uartlite | drivers/serial/xuartlite.c | in mainline |
Uart16550 | drivers/…/ | in mainline |
FSL | common/cmd_mfsl.c | in mainline |
U-BOOT script image
$ mkimage -T script -C none -n 'Demo Script File' -d setenv-commands setenv.img
U-BOOT list and disclamers
Comment from u-boot mailing list
Dear Amit,
Preliminary comment: Wolfgang is lashing out at stupid disclaimers,
don't take it personally. We all realize you didn't write the stupid
disclaimer and cannot remove it.
Amit Kumar wrote:
> > Dear Wolfgang,
> >
> > Kindly read disclaimer properly or show to your lawyer.
> >
> > "This e-mail contains PRIVILEGED AND CONFIDENTIAL INFORMATION
> > intended solely for the use of the addressee(s)."
No it doesn't. Your email was neither PRIVILEGED nor CONFIDENTIAL.
In the USofA, the term "privileged" as used in this context is a
specific type of communications with a lawyer who is in a formal, legal
way your (or your company's) representative. This email clearly falls
outside of that category.
Email is *never* CONFIDENTIAL if it is sent unencrypted on an
unprotected network. If it is encrypted and/or on a network internal to
your company or over a secured VPN, you may have a reasonable
expectation that the email is confidential within the bounds of your
company and/or the limitations of the encryption. This email clearly
falls outside of that category.
Further, this email list is known to be archived by several servers
(e.g. sourceforge, gmane, nabble) which are then indexed and cached by
several search engines (e.g. google, yahoo, microsoft), not to mention
snapshotted by archivers (e.g. the wayback engine). Anyone now and in
the future that has internet access can read it. Obviously the list of
addressees does not include everyone in the present and definitely not
everyone in the future.
> > You are not understanding the disclaimer at all. I am highly
> > surprised. If your lawyer says that you are correct then as mentioned
> > by you earlier you can report to management of my company.
If your company's legal disclaimer was actually written by a lawyer, and
I strongly suspect it was not, that lawyer is either totally ignorant of
the inherent characteristics of email or totally incompetent. If the
former, he should be educated on the inherent characteristics of email
(see the analogy below). If the latter, your company should replace him.
Rather than putting stupid useless disclaimers on non-PRIVILEGED,
non-CONFIDENTIAL emails, a competent lawyer would/should give competent
legal advice like DON'T EVER SEND PRIVILEGED OR CONFIDENTIAL INFORMATION
over a service that has no expectations of privacy or confidentiality
and "go medieval" on anybody that disregarded that advice.
As an analogy, sending PRIVILEGED AND CONFIDENTIAL information over
email is *worse* than sending PRIVILEGED AND CONFIDENTIAL information
written on a postcard and mailed out. For a postcard, anybody between
your outbox and the recipient's inbox can read the postcard, *most* of
them *legally.* This includes all of the mail handlers in your company,
all of the mail handlers in the route from your company to the
destination company (including any government security services,
especially if it crosses a border) and potentially industrial spies (OK,
*they* might be reading the postcard illegally, but legalities never
stop a good spy).
> > You are preventing people like us from sharing information on this
> > esteemed mailing list for which I think you are the moderator.
Relax. The information is still being shared.
> > Regards,
> > Amit
HTH,
gvb
PreBOOT
A smart way how to show log on first boot with cleaning
The part of config file
#define CONFIG_PREBOOT \
"echo ======================NOTICE============================;" \
"echo This is the first time that you boot up this board. You are;" \
"echo required to set a valid MAC address for your Ethernet interface.;"\
"echo MAKE SURE YOUR MAC ADDRESS IS CORRECTLY ENTERED!;" \
"echo You can always change it by using setenv ethaddr {MAC address};" \
"echo to change it again.;" \
"askenv ethaddr 'Please enter your MAC address:' 17;" \
"setenv preboot;" \
"printenv ethaddr;" \
"saveenv;"
Logbuffer
U-BOOT support logbuffer as is used in linux kernel - CONFIG_LOGBUFFER
There could be an issue if you use EDK toolchain.
make[1]: Leaving directory `/tmp/7/board/xilinx/microblaze-generic'
UNDEF_SYM=`mb-objdump -x board/xilinx/microblaze-generic/libmicroblaze-generic.a lib_generic/libgeneric.a lib_generic/lzma/liblzma.a lib_generic/lzo/liblzo.a cpu/microblaze/libmicroblaze.a lib_microblaze/libmicroblaze.a fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a fs/yaffs2/libyaffs2.a fs/ubifs/libubifs.a net/libnet.a disk/libdisk.a drivers/bios_emulator/libatibiosemu.a drivers/block/libblock.a drivers/dma/libdma.a drivers/fpga/libfpga.a drivers/gpio/libgpio.a drivers/hwmon/libhwmon.a drivers/i2c/libi2c.a drivers/input/libinput.a drivers/misc/libmisc.a drivers/mmc/libmmc.a drivers/mtd/libmtd.a drivers/mtd/nand/libnand.a drivers/mtd/onenand/libonenand.a drivers/mtd/ubi/libubi.a drivers/mtd/spi/libspi_flash.a drivers/net/libnet.a drivers/net/phy/libphy.a drivers/pci/libpci.a drivers/pcmcia/libpcmcia.a drivers/power/libpower.a drivers/spi/libspi.a drivers/rtc/librtc.a drivers/serial/libserial.a drivers/twserial/libtws.a drivers/usb/gadget/libusb_gadget.a drivers/usb/host/libusb_host.a drivers/usb/musb/libusb_musb.a drivers/usb/phy/libusb_phy.a drivers/video/libvideo.a drivers/watchdog/libwatchdog.a common/libcommon.a libfdt/libfdt.a api/libapi.a post/libpost.a | sed -n -e 's/.*\(__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`; cd /tmp/7 && mb-ld -Bstatic -T u-boot.lds -Ttext 0x29000000 $UNDEF_SYM cpu/microblaze/start.o --start-group lib_generic/libgeneric.a lib_generic/lzma/liblzma.a lib_generic/lzo/liblzo.a cpu/microblaze/libmicroblaze.a lib_microblaze/libmicroblaze.a fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a fs/yaffs2/libyaffs2.a fs/ubifs/libubifs.a net/libnet.a disk/libdisk.a drivers/bios_emulator/libatibiosemu.a drivers/block/libblock.a drivers/dma/libdma.a drivers/fpga/libfpga.a drivers/gpio/libgpio.a drivers/hwmon/libhwmon.a drivers/i2c/libi2c.a drivers/input/libinput.a drivers/misc/libmisc.a drivers/mmc/libmmc.a drivers/mtd/libmtd.a drivers/mtd/nand/libnand.a drivers/mtd/onenand/libonenand.a drivers/mtd/ubi/libubi.a drivers/mtd/spi/libspi_flash.a drivers/net/libnet.a drivers/net/phy/libphy.a drivers/pci/libpci.a drivers/pcmcia/libpcmcia.a drivers/power/libpower.a drivers/spi/libspi.a drivers/rtc/librtc.a drivers/serial/libserial.a drivers/twserial/libtws.a drivers/usb/gadget/libusb_gadget.a drivers/usb/host/libusb_host.a drivers/usb/musb/libusb_musb.a drivers/usb/phy/libusb_phy.a drivers/video/libvideo.a drivers/watchdog/libwatchdog.a common/libcommon.a libfdt/libfdt.a api/libapi.a post/libpost.a board/xilinx/microblaze-generic/libmicroblaze-generic.a --end-group -L /mnt/projects/Xilinx/11.4/EDK/gnu/microblaze/lin/bin/../lib/gcc/microblaze-xilinx-elf/4.1.1/bs/m -lgcc -Map u-boot.map -o u-boot
mb-ld:u-boot.lds:1: syntax error
make: *** [u-boot] Error 1
Apply this patch to fix the problem.
diff --git a/board/xilinx/microblaze-generic/u-boot.lds b/board/xilinx/microblaze-generic/u-boot.lds
index c20c6dd..afdea55 100644
--- a/board/xilinx/microblaze-generic/u-boot.lds
+++ b/board/xilinx/microblaze-generic/u-boot.lds
@@ -22,6 +22,8 @@
* MA 02111-1307 USA
*/
+#undef microblaze
+
OUTPUT_ARCH(microblaze)
ENTRY(_start)
Netconsole
fpga-load
http://forums.xilinx.com/t5/Embedded-Linux/zynq-u-boot-fpga-command/td-p/262414
zynq-uboot> fatload mmc 0 0 fpga.bin
reading fpga.bin
4045564 bytes read
zynq-uboot> fpga load 0 0 0x3dbafc
Wrong parameters for FPGA request
fpga - loadable FPGA image support
zynq-uboot> fatload mmc 0 0x1000000 fpga.bin
reading fpga.bin
4045564 bytes read
zynq-uboot> fpga info 0
Xilinx Device
Descriptor @ 0x3ffb89c4
Family: Zynq PL
Interface type: Device configuration interface (Zynq)
Device Size: 4045564 bytes
Cookie: 0x0 (0)
No Device Function Table.
zynq-uboot> fpga load 0 0x1000000 0x3dbafc
zynq-uboot>