Portable TCP/IP/PPP Implementation for
Low Memory Embedded Systems
by Adrian O'Grady
(Yes, it's a web server for the GBA!)
Last Update: 6th April 2002
A web server on the GBA? But why?!
Because I can? :-)
But that wouldn't do as justification for my final project, so it's really an
investigation into the possibility of including very small web servers in every
day equipment in order to monitor it. A good example would be a burglar alarm.
You could easily check that it was still working and that everything was ok in
your house while you were on holiday if the alarm was connected to the internet.
Fair enough, but why the long name?
Well, GBA Web Server wouldn't sound too professional and could lead people to
questioning the validity of my project!
Portable never used to be in the name, what's changed?
After spending a lot of time thinking about it, I want to develop the web server
for the Dreamcast as well anyway. The portable in the name simply means that the
source code (other than the kernel) should recompile for other systems without
needing any major changes. Basically, the word portable gives me a get out
clause so that I can target the web server for any system (hey, I'd love to do
an Xbox version) and still fulfill my original aim.
Where will the web servers live when you complete it?
This I'm not 100% sure of. It depends on where my ISP
finds space for it (not that it requires much!). It'll either be in Manchester,
Bradford or Harrogate. However, these details are of little interest to
yourself! All you need to know is that the URL will be http://gba.fivemouse.com
and http://dreamcast.fivemouse.com when the server goes live.
So what will be involved in making this project a reality?
Lots of things, but here's a list of the most important features (in no
particular order). Expect this list to change as I add more details.
Very small Multi-tasking kernel (no memory management required)
Com port driver
Display and input driver
PPP protocol
IP protocol
TCP protocol
Method to connect the GBA to a server
Please see the project plan and the to do list for a more complete list.
How will you be developing the web server?
The first items that I will develop will be the protocols. Because these are
platform independent, I will be able to develop them under Windows using VC++.
This is because I can use the PC com port for I/O and easily debug the modules
as I work on them. When I have got these working and have tested them fully, I
will simply run the source files through GCC
targeted at the ARM processor.
As for the kernel and device drivers, hopefully, by the time I come round to
developing these, KOS
might have full support for IRQs on the GBA. I will then use KOS
to provide a kernel and drivers. If KOS doesn't supply the required level of
support by the time that I require it, I will then have to develop my own
micro-kernel and drivers. (Note, even though KOS does have some TCP/IP support,
I wont be using it as I aim to write my own to serve a particular need.)
What will you do if you can't get the web server to work on
the GBA?
The other advantage of having an ambiguous project name is that it doesn't
specify the target system. :-)
If getting the web server on the GBA is beyond my reach, I will simply move
development over to the Dreamcast. After all, it could be argued that the
Dreamcast is a low memory embedded system. I aim to have a vast majority of the
project written in portable C so that it can easily be moved from one platform
to another. The only parts that wont be portable will be the micro-kernel and
the device drivers. To save myself time, I will develop these last.
So where did you get the idea for this from?
I've been thinking about it for quite a while now. The first time I thought of
putting a web server on a games console was over a year ago, around the time the
Xbox was announced. But the original idea goes back further than that! About two
years ago, I stumbled across this
web site and thought to myself, what a great idea, I've love to build a tiny
web server one day. Of course, a GBA web server will be quite a bit bigger, but
it's still quite dinky!
That all sounds really cool! Can I help?
I'm afraid not. As it's my final project, I have to work on it alone. However, I
do plan to release all my sources as I'm working on it so you can follow it that
way if you wish.
Right, now that's all cleared up, what have you got to
show us?
Erm, not much really. I have one last major document to put up before I start
development work, and that is an explanation of how a web server works.
If you want to keep up to date with my progress, read my development diary.
My Documents:
Acknowledgments (04-04-2002)
Time Table (08-10-2001)
This is just a copy of my university time table for the year. It should give
you an idea of how much time I have to work on the project.
Project Proposal v1 (08-10-2001)
System Layout (12-10-2001)
Project Planning (22-10-2001)
To Do List (06-04-2002)
This document should be updated quite frequently.
Project Status Snapshot (06-04-2002)
Project Proposal v2 (17-10-2001)
Kernel API documentation (02-11-2001)
mkgbafs and libgbafs (06-04-2002)
Fivemouse General Public License (08-01-2002)
My Code:
AdiOS Release 1 (28-10-2001)
AdiOS Release 2 (02-11-2001)
PPP Driver (02-11-2001)
GBA Text Routines (18-11-2001)
GBA UART Demo (18-11-2001)
Reference Documents:
Using
PICmicro MCUs to Connect to the Internet via PPP
This is a very good document. Well worth a read for anyone thinking of
doing something similar.
RFC 1122 (Requirements for Internet Hosts -- Communication Layers)
Other Links of Interest