getting-started
getting-started copied to clipboard
[HDMI2USB] Port Linux to the lm32 CPU and support HDMI2USB firmware functionality
Brief explanation
The HDMI2USB gateware currently includes a lm32 soft core. The misoc version has an MMU and should support running a full Linux kernel.
Expected results
Linux booting on the HDMI2USB gateware.
Detailed Explanation
There is a bunch of extra information in the LiteX Linux Support Random Notes Google Doc.
The HDMI2USB-misoc-firmware embeds a LM32 soft-core for controlling and configuring the hardware. See the diagram below;

This soft-core should be able to run Linux Kernel, which means we would get access to a lot of good things;
- Access to well tested TCP/IP stack (useful for IP based streaming).
- Access to well tested USB stack (useful for the USB-OTG connector).
- Access to kernel mode setting for edid processing and DisplayPort stuff.
Work on this was started by the MilkyMist / M-Labs people.
There is a port of the lm32 to qemu which will help, see https://github.com/timvideos/HDMI2USB-misoc-firmware/issues/86
Further reading
- https://en.wikipedia.org/wiki/LatticeMico32
- https://lwn.net/Articles/647949/
- http://m-labs.hk/milkymist-wiki/wiki/index.php%3Ftitle=Milkymist_Linux_cheat_sheet.html
- https://wiki.debian.org/HelmutGrohne/rebootstrap#lm32
- www.latticesemi.com/view_document?document_id=28118 - Linux Port to LatticeMico32 System Reference Guide
- http://www.ubercomp.com/jslm32/src/ - Javascript LatticeMico32 Emulator (runs Linux) - Ubercomp
Knowledge Prerequisites
- Linux Kernel knowledge
- Strong C knowledge.
Just dropping a note so that people know a good amount of work on this has been done in linux-lm32
http://j.mp/pre-fpga-lca2018
Linux isn't possible on lm32, due to bitrot. However we have it booting on or1k. 10/100 Ethernet is also working as of Jan 2018. See above instructions.
Google DocsLinux.conf.au 2018 FPGA Miniconf Set Up Instructions https://j.mp/pre-fpga-lca2018 Aim Requirements Pre-work for the Miniconf Download & Install Vivado Download & Install LiteX Dependencies Download & setup udev rules Download & setup the LiteX Build Environment Resuming Development Test build...
Also, I might add that current lm32 Linux port, whatever its bitrot state, isn't using the MMU. It's uCLinux (noMMU). MMU is experimental also.