tomasz lasko: my homepage

Little handy green box

Are you looking for something particular on this site?



or check the sitemap


If you would like to contact me,
click here


 

Embedded Mini Server

In this project I want to create an emebedded Internet storage server with minimal cost and using a minimal number of components. That's why it's name contains word "Mini".

My Internet server will have low energy consumption because I will not use many electronic chips and I will make use of some standby modes of the CPU and IDE HDD.

The project is now in phase of development simultaneously with my operating system, as I learn how to drive an IDE controller and a network card. Another nice skill which I learn is how to create my own TCP/IP stack. Currently I develop the server in a PC x86 environment (as a kind of "simulation" environment) - I run it as a bootable protected mode code inside an x86 virtual machine, where I have an IDE controller, a network card and many megabytes of memory... but I use only the 64 kB of it :) This means that the only hardware components which differ significantly from the target solution are the CPU and the latches. This way I made testing and debuging this software very easy. When I implement all the main functionality and the server works very good, I will start to compile the code to run on the specialised microprocessor - I plan tu use one of Atmel's ATmega series, because they are quite fast, they have many IO ports and I have some good experience with them.

 

I have the following components and will use them:

- ISA NIC (Network) card based on RTL 8019AS with integrated 16 kB RAM
- ISA Multi-IO card (with IDE, FDD, COM and LPT controller on board)
- two ISA card slots
- 80 GB IDE HDD
- 64 kBytes of S-RAM

I plan to use:
- Atmel's ATmega microprocessor as the CPU
- latches for the address/data shared bus (shared between ISA and RAM)

 

 Logical structure

The RS-232 serial link can be used to manage or debug the server. But I am thinking also about web/telnet ethernet management.

 

I am developing two seperate server programs which implement protocols HTTP and FTP. I think that the server will be able to process several requests simultaneously.

Here is the structure of the software for the embedded server:

Software 

 

Below I present a screen dump showing server's startup and shutdown:

---- INITIALIZING SYSTEM ----
---- SYSTEM INITIALIZED ----
[00000005][SVR] ==== STARTING UP THE SERVER ====
Found 00F9FC00 bytes of memory
[00000005][IDE] Starting up IDE driver
000000F0 = DHR
[00000005][IDE] Detecting HDD ...
UNIT 00000000: IDENTIFYING... OK
Found: 0020CEB0/0020CEB0 LBA/CHS sectors disk:
"BOCHS Virtual Hardrive ":"":"" OK
RECALIBRATING... OK
Device's bootsector:
X000E050
D08EC033FB7C00BC1F5007507C1BBEFC50061BBF01E5B957BECBA4F304B107BE097C2C38C6831575
CDF5E2108B148B1810C683EE38167449BEF6742CAC4E0710FA74003CB40007BBEB10CD0E254689F2
04468A960E3C06B40BB4117405740C3C2B75C43A2546C640BB247506B45055AA5813CD41FB811672
1075AA557401C1F688E08A0B06C724561EEB06A1BF04668801B8000A33DC8B0205FF83C94E8B037F
024E0325297213CD810757BE557DFE3E835A74AADA7F05EF8375F685EB072EBE5291988A08460399
E80A5613EB5A0012E4744FD513CDC0330000B8EB0000000056F633560650525610BE5153F48B5600
00B8525024568A42585A13CD7210648D0175400A02C780425EF8F7E24E74EBC37270656964697761
61776F88626174206163696C726170206A63797488420069702064A520797A726F646188696E6177
797320756D657473706F207563617265656E6A7942006F67206B61727473797320756D657265706F
6A7963616F67656E000000000000000000000000000000008B0000008B571EFC0000CBF500000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000018000003F0C0001003F13BFBAC100000000002000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000AA550000
IDE driver successfully initialized
[00000033][SVR] ==== SERVER IS UP AND RUNNING ====
Now the server is up. You can press any key to take the server down. So let's do it and see what happens.
[0003186F][SVR] ==== SHUTTING DOWN THE SERVER ====
[0003186F][IDE] Stopping IDE driver
[0003186F][SVR] ==== SERVER HAS BEEN SHUT DOWN ====
---- STOPPING THE SYSTEM ----
---- SYSTEM END ----


From these messages you can see the IDE driver autodetecting a hard disk and displaying it's bootsector. This driver works by default in LBA mode. So I have the IDE driver ready. Now I have to make a TCP/IP stack, both HTTP and FTP servers, a network card driver and the filesystem driver (I will use propably simple FAT, at least at the beginning). Want to join me? Then mail me.