Agnix is an Open-Source project, which has been founded to provide an educational, network operating systemkernel. Agnix is an extended kernel, written in pure C code. It is ideal starting point to learn about operating system kernel architecture. In addition Agnix is a very fast and small kernel and I advice for using it in an embedded systems and everywhere where is needed fast, small and stable operating system kernel.
How do I get Agnix?
If you want to download sources or images go to the download section, or use some Sourceforge mirror
Subscription to new releases
If you want to be notified when new version of Agnix Kernel will be released, go to the subscription section
Agnix's features
Agnix has been written from scratch in assembler and C languages by me. The first version of the kernel was released in August 2004.
The main feature of Agnix is clean code which analyze may provide valuable informations of operating systems architecture.
The current version is 0.0.4. This version supports now following modules:
Memory: 32-bit protected mode, support for paging
Virtual memory: supports for memory allocation algorithms (binary and buddy)
Interrupts: interrupts serviced in fastirq kernel thread
Timers: RT timers, 100Hz system clock
Network: support for ethernet, ARP and IP protocols
Driver interface: own driver interface named ADI (Agnix Driver Interface)
Drivers: 8254, 8259, RTC, DMA chips, PCI bus, support for RTL-8029(AS) network card
Power management: support for APM
Support for busses: full support for PCI bus, PCI devices and PCI IRQs
Terminals: support for switched terminals
Data structures: hashing with open adressing, lists, queues
Goals
The main goal of the project is to provide an educational, network operating system kernel which will be fully compatible with the Linux Kernel in the system call layer. The compatibility with Linux kernel is very important, because Agnix has to enable running programs compiled for Linux. This is a base of the Agnix kernel project.
In the future (timeline)
ver 0.0.5
Support for user-mode
Support for floppy driver
Support for VFS
Support for FAT filesystem (sorry, but FAT is simpler than EXT2)
More documentation!
ver 0.0.6
Support for ELF format
Support for ELF execution
Support for exec() syscall
More documentation!
ver 0.0.7
Support for EXT2 filesystem
ver 0.0.8
Support for sockets
Support for all other Linux syscalls
More documentation!
ver 1.0.0
Full support for running Linux binaries (shell, binutils, X server etc)
Full support for network stack
More device drivers (maybe some ports from other kernels)
More documentation!
Status of the project
The project is early, I have to write many modules. The following table is a list of completness:
Memory allocation subsystem
Binary algorithm
Completed
Buddy algorithm
Completed
Slab allocator
Not started
Page fault servicing routine
Started
Copy on write
Not started
demand paging
Not started
Memory tests
Completed
Task management subsystem
fork()
Completed
Hardware switched tasks
Completed
Kernel mode processes
Completed
User mode processes
Not started
Idle thread
Completed
Sleeping threads
Completed
Waking up threads
Completed
Wait queues
Completed
Round-robin scheduler
Completed
IPC Subsystem (System V)
Shared memory
Not started
Semaphores
Not started
Message queues
Not started
Hardware dependent layer (i386)
Timer initialization
Completed
Interrupts initialization
Completed
Traps initialization
Completed
Paging initialization
Completed
Support for 4MB pages
Completed
Memory mapping at 0xc0000000
Completed
Procesor identification
Completed
Procesor capabilities identification
Completed
Processor speed identification
Completed
Support for TSC
Completed
Support for MSR
Not started
Support for MTRR
Not started
Support for PMC
Not started
do_machine_reboot()
Completed
do_machine_powerdown()
Completed
do_machine_halt()
Completed
Support for APM
Completed
Support for SMBios
Started
Interrupt servicing in threads
Completed
Drivers subsystem
Drivers interface
Completed
Characted drivers management
Completed
Block drivers management
Started
Network drivers management
Completed
Text console driver
Completed
Keyboard driver
Completed
8254 chip driver
Completed
8259a chip driver
Completed
RTC driver
Completed
DMA driver
Completed
i387 driver
Not started
PCI bus driver
Completed in 90% (there isn't only a secondary bus scanning)
RTL 8029(AS) network card driver
Completed
Floppy driver
Started
Network stack subsystem
Layer 2 management
Completed
Layer 3 management
Started
Ethernet protocol
Completed
ARP protocol
Completed
IP protocol
Started
IP Routing
Not started
TCP protocol
Not started
UDP protocol
Not started
ICMP protocol
Not started
Sockets interface
Not started
Filesystem
Support for VFS
Started
Support for RamFS
Not started
Support for EXT2
Not started
Support for FAT
Not started
Timers
sleep_timeout()
Completed
One-shot timers
Completed
Periodic timers
Completed
Data structures
Hashing interface
Completed
Hashing with open addressing
Completed
Queues interface
Completed
FIFO and LIFO queues
Completed
Lists
Completed
Other subsystems
Counters management
Completed
System resources management
Completed
How you can see Agnix is not completed yet. In the 0.0.4 version I have added support for the VFS stub named PseudoFS. I have added also the kernel console for kernel monitoring and some kernel statistics reading. It is very important in this phase of project, but in the future it will be removed and all kernel's parameters configuration moved to the user space. Users will can configure kernel (network interfaces, routing, network filters etc) by system calls such as in the Linux kernel.
Documentation
Documentation to the Agnix project I have generated by great program Doxygen. It can extract the code structure from source files and can generate an online documentation and an offline reference manual in Latex from a set of source files. It can also automatically generate visual relations between the various elements by dependency graphs, inheritance diagrams, and collaboration diagrams. Doxygen is coded by Dimitri van Heesch.
Help
All modules marked by red color are not started yet. If you would like to help in Agnix development mail me please. I am opened for cooperation with all peoples whose want to help me.
Tests
Agnix has been tested on the QEMU, Bochs and VMware emulators and real machines. But I am using only emulators, because writing the kernel required many machine resets, and without emulators it would be very time-consuming