Angstrom on Xilinx ML507

* Important this is an experimental and ongoing project
After several kernel panics and machine exceptions I’m now been able to boot Linux on Xilinx Ml507 development platform; This board combines a Powerpc 440 cpu with standard peripherals like ethernet, serial ports, DVI, sata, etc. plus a large re configurable area where custom hardware can be developed and interconnected to the main CPU via the processor bus.
Xilinx provides a development environment but the Linux board support is pretty old since most vendors don’t support this board any more. Since there was previous work on Openembedded supporting previous version of this platform (Powerpc 405 based) adding support for Ml507 board is simple.
Most of the problems that arise in my initial efforts was setting the correct Kernel options, erroneous hardware configurations, missing dev nodes in final root file system. Christopher ‘Embedded Linux premier’ book prove to be a great reference also many of the xilinx application notes that I have to check to learn about the gotchas.
At my github repo there’s the result hardware project there’s two branches the master branch holds the reference design as described in the application note [1] the second branch adds the device tree infrastructure to generate the hardware descriptor file (*.dts) that the Kernel uses to find out about the resources available in the target system.
I push some patches to Openembedded developers list to add the corresponding support, this was important in order to simplify the process of replicating my developing environment for new team members in the lab at my faculty. Some of the problems that I still have is that ethernet device is not working, I have read some applications notes that mention that the driver provided in the Linux kernel only works in certain configuration mode; Alternative I can use the soft-ethernet hardware module since is reported that works.
Soon I will post a quick howto with the steps to boot Linux, for the moment
On the next week I’m going to give a crash course using Openembedded at my faculty, and also seriously thinking that my current project is a good candidate for participating in Google summer of code which is right at the corner.
[1] Using U-Boot with the Xilinx ML507 Evaluation Platform

7 thoughts on “Angstrom on Xilinx ML507

  1. Dvorkin 2010/03/18 / 11:49 am

    what version of u-boot are you using?
    did you patched u-boot?

    to what memory address you’re loading u-boot into ?
    I tryed to load my unmodifyed build of u-boot (built using crosstools for BOARD_NAME=ml507) like this:

    dow -data ./u-boot.bin 0x03000000
    con 0x03007000
    without success,,, 😦

    • aalonso 2010/03/18 / 6:29 pm

      Hi, I’m using u-boot version located at xlnx git repo

      In my hardware project I generate the libraries and replace the parameters definitions in u-boot src three
      cp ppc440_0/include/xparameters.h /board/xilinx/ml507/xparameters.h

      Next I append some definitions
      #define XPAR_PCI_0_CLOCK_FREQ_HZ 0” >>

      Compile u-boot and copy the raw u-boot image to my project dir, which I use to create an ace image (bitstream + u-boot)
      the script generates the image, the result image
      is /ML50X/cfg2/ml507_bsp_u-boot.ace which I place on the compact flash [1], on the first partition.

      On power up the board by default loads the first ACE image found and executes u-boot (Check on your board the magic SW3 to enable loads from System ACE)

      This will prompt u-boot on the serial terminal, an I load the Linux kernel with the next options

      fatload ace 0 0x03000000 uimage.dtb 12288
      fatload ace 0 0x03020000 uimage.bin 1884397
      bootm 0x03020000 – 0x03000000

      [1] The compact flash holds two partitions an FAT16 boot flag enabled, size = 40Mb, the rest is formated as Ext2 where I place the rootfs

      The way you are doing it might be just matter of download the elf raw image “u-boot”
      dow -data ./u-boot 0×03000000
      Since u-boot.bin adds additional header info that the processor can’t execute.

      I will make some time to write a quick howto using Openembedded to target this board also I’m testing a couple of modifications to for automating
      the build of u-boot in OE.


  2. Dvorkin 2010/03/19 / 10:50 am

    thank you for your explanation! I tryed to make diff on xilinx u-boot GIT and latest stable u-boot and I don’t see code difference. So I need only your xparameters.h changes.
    May be it’s simpler to commit your changes to u-boot main repository?
    Your post pushed me to look at Openembedded closer. May be it’s better then simple crosstool.

    sorry for a lot of questions… 🙂

    >Since u-boot.bin adds additional header info that the processor can’t execute.
    yes, I understand. the question is how can I find an offset to start for .bin file?
    the other unclear thing is about .elf… I’m loading u-boot.elf directly into ram using
    “dow ./u-boot.elf”
    after load it shows me start point.
    and I’m doing
    from this point, but nothing happens in serial console at any speed. May be the problem that I’m using vanilla u-boot (2009.11) without xilinx patches and your parameters… Did you try it?

    • aalonso 2010/03/19 / 4:35 pm

      Well I spend a lot of time searching for the same, practically a review all xilinx app notes, but didn’t find any explanations on the load and start address
      of u-boot so I downloaded the ref design provided in xilinx site
      “ML507 Bluecat linux project” on boot up the print outs shows that u-boot has assigned a load and start address of 0x00000000.

      I haven’t test main stream u-boot version, also your hardware project must match the parameters definitions, thats way I don’t mind to push this on main or
      xilinx u-boot repos since this parameters are based on your hardware project if you add or remove additional peripherals the headers wouldn’t match and
      all you will get is funny machine exceptions.

      For your serial console problem check if your project is correctly assigning the RS232_Uart_1 module for standard IO, and also I recommend to first run
      the TespApp_Pheriperals test apps to see if the modules that you are integrated a correctly setup.

  3. Dvorkin 2010/03/19 / 11:00 am

    > I tryed to make diff on xilinx u-boot GIT and latest stable u-boot and I don’t see code difference
    don’t mind. I see big difference now 🙂

  4. hazem 2010/11/02 / 11:08 pm


    Since this blog was back in March and now we are in November. Is ML507 currently supported in openembedded ? I used openembedded to build Angstrom for beagleboard with no hassle at all, is it
    the same situation now or do I have to follow this blog.


    • aalonso 2010/11/03 / 9:08 pm

      Openembedded support for ML507 is upstream, actually all board variants that embedded a powerpc cpu (405, 440); An I have test this on ML507 and ML405
      theres only one tricky part and is that you need to set the project path for the xilinx xps project that defines the target and also the model of the board in the
      configuration file “local.conf”;

      XILINX_BSP_PATH ?= “${HOME}/workspace/xilinx-ml507”
      XILINX_BOARD ?= “ml507”

      I also port this integration in Poky and I’m going to start working on so this can be integrated in Yocto project which is much the same but with official support.

      For OE I just test building console-image and xfce46-image other images may require some fixes.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s