[Libwebsockets] MBED3 LWS Port
andy at warmcat.com
Sat Nov 14 10:02:21 CET 2015
On 11/13/2015 11:15 AM, Andy Green wrote:
> Hi -
> After saying there are no new big things to do with lws, pretty
> quickly a new big thing turned up.
> Lws has always been designed to be especially lightweight, but it has
> always assumed the platform was at least Posix-ish.
> However there are a lot of Cortex-M chips out there that could
> theoretically run lws, but they lack Posix. Traditionally that
> low-middle embedded space has been a minefield of different
> proprietary or roll-your-own RTOS type OS, but recently ARM are making
> efforts to unify the platform of choice to be their MBED3 OS. (Not to
> be confused with "mbed", https://developer.mbed.org, that has existed
> for a while, MBED3 is a rewrite that is still incomplete and somewhat
> buggy... however it is the future).
> If you're curious about it, you can read a series of blog posts with
> my adventures with it here.
> Basically it only supports one board / SoC at the moment, it's a US$35
> dev board with nice development support on it and a SoC with 1MB Flash
> + 256KB SRAM, and Ethernet.
> MBED3 itself is a bit of an interesting challenge, it has sockets
> support via LWIP but the whole OS is an event queue, and there is no
> threading and no real Posix. So the port basically has external
> callbacks coming that are already serialized and call straight into
> lws guts: there is no more lws service loop the whole OS is the
> service loop. And the whole OS and all other dependencies are one
> static-linked binary at the end of the build.
> I succeeded in porting lws, but bugs in the mbed3 network stack wrt
> listening socket accept flow have stalled the effort
> Even so, it can work both for HTTP serving of the example server
> test.html and if the mbed3 networking stack functions enough, it will
> succeed with the upgrade handshake and communication in both
> directions on ws already; I have not been able to test mirror protocol
> but dumb increment has been seen to work.
> Including MBED3, network stack, lws, the sample app, and the sameple
> app assets (test.html, favicon.ico, the logo png) the whole working
> binary is 117KB. So targeting Cortex M3 with 128KB Flash is workable.
> Which gives a new meaning to "lightweight" ^^
> You can find the lws port itself on a separate branch for now, it does
> some major #ifdef surgery and needs a round of integration cleanups
> before it can go in the main tree
I cleaned this up a bit and confirmed using Appveyor + Travis that he
still builds on everything, and that the test apps work on Linux and
mbed3 (as far as the networking stack will allow). Then I removed the
mbed3 branch and pushed the whole integrated thing on master branch.
There's some docs added to README.build.md about how to build it for
mbed3. MBED3 is still a bit avant guarde but if you want a modern GUI
on a headless very cheap one-chip solution, the cost / performance ratio
is (or will be when it does listening sockets properly) hard to beat.
> There is a separate project for the test server (which uses mbed3
> dependency system to 'want' libwebsockets)
> Libwebsockets mailing list
> Libwebsockets at ml.libwebsockets.org
More information about the Libwebsockets