element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet & Tria Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • About Us
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      • Japan
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Vietnam
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Avnet Boards Forums
  • Products
  • Dev Tools
  • Avnet & Tria Boards Community
  • Avnet Boards Forums
  • More
  • Cancel
Avnet Boards Forums
ZedBoard Hardware Design Zedboard hardware design for Linux
  • Forum
  • Documents
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Avnet Boards Forums to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Verified Answer
  • Replies 9 replies
  • Subscribers 340 subscribers
  • Views 1216 views
  • Users 0 members are here
Related

Zedboard hardware design for Linux

Former Member
Former Member over 9 years ago

I know, that this question is a little obvious, and might have been already asked, but I didn't find solution so I will ask it anyway.

I'm new to Zedboard, and I want to understand how should I make hardware design for Linux, in particular what to do in order to make OLED work with Linux driver from Digilent. The easiest way for it is to look at the example design, that is delivered with board out of the box. The problem is that it is only for ISE, and not for Vivado.

I already found two topics, in which some people asked for it, and answer was to go to Digilent support, so I did it, and I will share, if they give me the design.

But before they answer, could someone give me some hints on how to make design in other to make OLED and maybe also buttons and lends work with drivers for Linux provided by Digilent? I know it is something connected with EMIO, but I don't know how should I configure processor, and I don't know if I should add any additional IP cores, or something.

Thanks in advance for replies.

  • Sign in to reply
  • Cancel
  • Former Member
    0 Former Member over 9 years ago

    Hello,

     

    As you noted any support for the Digilent version of LInux will need to come from Digilent. That said, here are a couple of links that might be helpful:

     

    https://embeddedcentric.com/customized-hardware-design-and-integration/

     

    https://forums.xilinx.com/t5/Embedded-Development-Tools/Zedboard-oled/td-p/507957

     

    https://ez.analog.com/thread/73996

     

    http://stackoverflow.com/questions/29322127/oled-on-zedboard

     

    http://zedboard.org/content/oled-zed-board

     

    http://zedboard.org/content/zedboard-oled

     

    -Gary

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 9 years ago

    Thanks for the reply!
    I already saw most of the links you provided. But most of those designs uses dedicated logic for OLED, and that is not what I want to do.
    I would like to connect OLED to GPIO pins of PS in a way to be able to use Digilent OLED driver.

    But forget it for now. I decided to maybe go for something simpler. Now I just want to boot Linux on simplest possible design, without anything connected to PL, using as much as I can from OOB design. As far as I know it should be possible, because kernel should boot on slightly different hardware, if I provide proper device tree.

    I made hardware design in following way:
    1. New Vivado project
    2. New Block Design
    3. Added Zynq processing system, and customised it with preset for Zedboard
    4. Turned off AXI master port connected to PL (no need for it, and compiler complains about not connected clock, if I don't turn it off)
    5. Generated bitstream, exported hardware, launched SDK

    Then next steps were as follows:
    6. Generated device tree, as in tutorial from this link
    http://www.wiki.xilinx.com/Build+Device+Tree+Blob
    In bootargs I wrote
    "console=ttyPS0,115200 root=/dev/ram rw initrd=0x800000,8M earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0"
    And I also changed line
    compatible = "xlnx,zynq-7000";
    to
    compatible = "xlnx,zynq-zed";
    because it complains about I think incompatible processor, or system.
    7. Generated .dtb file with dtc compiler from Ubuntu repository
    8. Generated FSBL as described in
    http://www.wiki.xilinx.com/Build+FSBL
    9. Generated boot.bin with SDK tool - first added FSBL from (8), then added bitstream from Vivado, then added u-boot from Zedboard OOB files.
    10. To finish, I put 4 files to SD card formatted as fat32: bin.boot from (9), devicetree_ramdisk.dtb from (6), Linux image from OOB, and file system image from OOB.

    When I tried to boot this, it starts booting, but stops after line "turn off boot console earlycon0" What I am doing wrong, does my plan had any sense? I think I just made something wromg with device tree, but don't know what.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • zedhed
    0 zedhed over 9 years ago

    Hi saleksin,

    I think what you are trying to do makes sense.  However, keep in mind that the OOB image from Digilent is much older than the tools you are likely using today and it is possible that you are running into compatibility issues between your generated device tree and the older kernel image (possibly even the older U-Boot also).  Speaking of which, you mentioned that you were using Vivado but did not mention which version you are one.

    Here you be me suggestion for you, start with one of the Xilinx Linux releases (there are files included for ZedBoard):

    http://www.wiki.xilinx.com/Zynq+Releases

    Here is one for 2015.4 tools if that is what version you are using:

    http://www.wiki.xilinx.com/Zynq+2015.4+Release

    First make sure that the Xilinx provided files will boot your ZedBoard just fine.  After that, I would recommend making changes to the following pieces using your own version (in this order) one at a time so that if something does break along the way you have some idea of where it is breaking.

    1) FSBL
    2) Bitstream
    3) Devicetree
    4) Linux Kernel (if you want to)
    5) U-Boot (if you want to)
    6) Root Filesystem

    I know it seems like slow progress but at least you will be on a path that can be more easily tackled with a divide and conquer approach.

    Try that approach and see if you get some better results.

    Regards,

    -Kevin

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 9 years ago

    Thanks a lot!

    I managed to boot Linux for Zedboard (2016.1) with my FSBL, bitstream, and devicetree. Your tip was very good - device tree for OOB design is completely different than mine, and this from 2016.1 is very similar.

    I may be wrong, but AFAIR FSBL depends on hardware design (or at least Zynq config, which is part of it), and also device tree depends on hd, so if I want to change FSBL, I have to change also bistream and devicetree. Am I right?

    In device tree I set bootargs for value [00], which I found in original devtree from Linux package. What does this value mean, why Linux started with no bootargs?

    And for other people than may see this - it is very important to set properly serial console in device tree - most problems I had was caused by this.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • zedhed
    0 zedhed over 9 years ago

    Hi saleksin,

    That is great to hear that you are making some progress!  Thank you for reporting back to the community!

    You are correct, the FSBL depends upon the HW definition from which SDK derives the ps7_init.* files built into the FSBL.

    You need to make changes to the device tree only where you are changing the hardware that the kernel needs to be aware of.  This is because the device tree is providing information to the kernel drivers on the memory location (and configuration) of those hardware peripherals.

    Along similar lines, the bitstream can change without updating FSBL or device tree if you are touching Programmable Logic which is not connected to one of the AXI ports.  However, if you are changing AXI connected HW in the bitstream (like add/remove/relocate hardware in memory space) then yes it is fair to say that the bitstream and device tree should change at the same time.

    I am not sure about the devicetree entry "bootargs = [00];" since that appears to be new in the 2016.1 release and was not like that in the 2015.4 release.  Perhaps that is a question best asked to the Xilinx forums instead?

    Regards,

    -Kevin

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 9 years ago

    I asked about [00] on Xilinx forum, and I will post the answer here.

    Going back to the beginning - I managed to create proper hardware design, and I want to use oled driver from Xilinx. But it seems it is not in the file image from 2016.1 file image. Can you confirm that? It it is really not there, Is there a possibility to add new kernel module without recompiling whole kernel? I'm trying to keep it simple.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • zedhed
    0 zedhed over 9 years ago

    Hi saleksin,

    I am not familiar with a ZedBoard OLED driver from Xilinx.  The only one that I am aware of is the one from Digilent.  I think the latest version of that is here and you should be able to compile this as a kernel module.

    Here is the Digilent resource center link where you can find the project downloads with source code used for the ZedBoard OOB design:

    https://reference.digilentinc.com/zedboard:zedboard

    Regards,

    -Kevin

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 9 years ago

    Thanks again for the respond.
    Now to finish this topic - few days ago, after a few days of trials an errors I managed to compile Linux with this Digilent driver (I meant that one, when I wrote about Xilinx one), but I had to compile it together with whole kernel, not as a module. When I tried to make module from it, compilation failed.
    I will try to compile it as module, and I will report if I succeed.
    And going back to this strange [00] from dev tree - on Xilinx forum they said that it effect of decompilation of dtb, and it means that it was empty string in original dts.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Former Member
    0 Former Member over 9 years ago

    In case someone will need it in the future - the best reference hardware design can be found on Analog Devices Github repo.

    https://github.com/analogdevicesinc/hdl

    Manual: https://wiki.analog.com/resources/fpga/docs/hdl

    Where is a project called adv7511 which has not only hdmi, but also almost all other peripherials (including audio, gpio, oled).

    Instruction on building Linux on it: https://wiki.analog.com/resources/tools-software/linux-drivers/platforms/zynq

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Reject Answer
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube