GSOC'16 project update - RTEMS LwIP integration

Pavel Pisa pisa at
Sun May 22 23:44:48 UTC 2016

Hello Sai Charan Sane,

I have been busy with RTEMS on RPi till now.
But generally all materials  listed in your e-mail worth
to be read. You should read for sure

Beej's Guide to Network Programming

It is practical description and cookbook for users.

You should try some examples on Linux.

We have there some tasks and examples for our students prepared
in the frame of more subjects

  - latency measurement on UDP communication
    they port that to VxWorks

  - Simple webserver implementation

  - Simple TCP client

  - Simple TCP server with select

But you can find some better documented materials on the web. 

The discussed socket API is natively supported by actual RTEMS
TCP/IP stack as well as new standalone BSD stack. lwIP provides
this API as well but as separated from file system API (open,
read, write, close).  So as discussed earlier, main task is to
map RTEMS file API to lower layer of lwIP API.

The result of discussion with other mentors is that for testing
i386 BSP should be used because it is the best supported
platform by QEMU.

As the first steps, please, try to build toolchain and actual
RTEMS sources with use of RSB for i386 pc target

RTEMS should be configured without networking. Then start
work on lwIP support. QEMU provides e1000 as the default network
card for emulated i386 machine. It is not easiest target.
But you can find device address in emulated PCI space
by its vendor and device ID (8086:100e)

You can use next code from CIRUS graphic code as an example
code how to find PCI device in RTEMS. There can be better
example but I know this from my previous work.

According to my search, RTEMS classic TCP/IP stack does not
have support E1000 card on i386 machines but there is support
for PowerPC/Beatnik

This code could be combined with lwIP for i386 RTEMS under QEMU support.

The complete actual FreeBSD driver for all variants of this
card is there

But that seems to me as too complex. Anyway, RTEMS lwIP final
targets should be be much smaller and simpler network interfaces.
But optimal combination of some ARM or Sparc target with reasonable
network interface for QEMU is hard to find. There is list
of NIC I have identified as supported by QEMU sources

  e1000.c eepro100.c lance.c ne2000.c pcnet-pci.c pcnet.c rtl8139.c vmxnet3.c

in some documentation are mentioned

E1000     PCI - default on PC, actual record from PCI database
  8086:100e Name: 82540EM Gigabit Ethernet Controller


ne2k_pci  PCI 10Mb/s NE2000
rtl8139   PCI 10/100Mb/s Realtek Fast Ethernet

If the E1000 is too complex then other option can be tried.
Interesting is for example QEMU virtio network interface.

The result of the discussion is that we should try to use unmodified
lwIP as submodule of the RTEMS integration project. So setup
empty repository with name "lwip-rtems-support" (for example) under your
github account and add me (GitHub ppisa and Chris) write permission
to the repository. I try to setup lwIP as submodule and extract
code which we have in our OMK repo and try to make it work with
lwIP as submodule. Then I would need help with decision
which make system should be used and its setup.

Best wishes,


More information about the devel mailing list