Skip to content

ELKS v0.4.0

Compare
Choose a tag to compare
@ghaerr ghaerr released this 21 Nov 21:58
· 2905 commits to master since this release
3074172

ELKS v0.4.0 Downloads

Prebuilt disk images for floppy and hard disks are downloadable below from Github Assets for this release. These images can be used to boot from PC/XT/AT hardware, or an emulator, such as QEMU. The images are built with network support by default, using the NE2K network card, set for I/O address=0x300 and IRQ=12. See the Wiki HowTo for more information.

ELKS v0.4.0 Enhancements

Kernel

  • Tested and works on PCs with 8088, 8086, 80286, 80386 … CPUs and later
  • No compiler warnings on kernel build
  • Strace working, calculates kernel stack usage
  • Implement task zombie state, rewrite wait
  • Implement kernel local heap (@mfld-fr)
  • Improved memory segment allocator (@mfld-fr)
  • Fix userland signals
  • Use single far address for kernel process signaling (@tkchia)
  • New synchronization primitives
  • Remove unneeded and slow kernel locks
  • Add race-safe sleep/wait prepare_to_wait etc
  • Fix select busylooping, network semaphore lockups
  • Much improved kernel debug macros and mechanism
  • ^P kernel/application debug mechanism using SIGURG
  • Restartable system calls
  • Reduce kernel stack to 600 bytes from 988
  • Align stack pointer to even boundary to save malloc issues
  • Kernel FAR text section, saves 11k bytes of .text space
  • Enhance I/O performance w/direct fmemcpy to/from user space
  • Rewritten fmemcpy routines to use word copy

System Call Fixes: wait, rmdir, access, brk, link, stat, gettimeofday

Exec

  • Separate heap & stack, v1 a.out header
  • chmem command enhanced
  • New compiler options for heap and stack (@tkchia)
  • Tuned 4k stack / 4k heap for all processes, tuned min memory usage
  • Run programs w/historical Minix a.out header (@tkchia)
  • Load medium-model programs (@tkchia)

Filesystems

  • FAT filesystem debugged and working
  • Mountable Minix and FAT partitions
  • Improved MBR, use sect_offset to support MBR boots to /dev/hda1 etc
  • Add VFAT long filename support, virtual /dev directory
  • Fix Minix mount/unmount superblock checking/write
  • 16-bit or 32-bit inodes in kernel
  • Mount readonly, remount options, can boot readonly
  • Fix romdisk read directory
  • Allow ramdisk size larger than 64k
  • Allow preloaded ramdisks in upper memory
  • FAT32 fixes, large drive mount fix

Disk & I/O Subsystem

  • Rename /dev/bdX to /dev/hdX
  • Support for USB drives
  • Variable number of L2 buffers
  • Revise /dev/hda from 4 to 8, implement partitions
  • Floppy I/O to use DMASEG only when necessary
  • IDE query to BIOS HD driver for reliable CHS data (@Mellvik)
  • Replaced DDPT allows running on IBM XT v1 BIOS machines (@tkchia)
  • Align buffers on 1K to remove DMASEG requirement
  • Floppy track caching, improves floppy speed tremendously
  • Block I/O subsystem enhanced, no mapbuffer or buffer copying
  • 32-bit block numbers for FAT

Console

  • Direct Console fnkey sequences
  • Direct console CapsLock/Numlock and LED support (@Mellvik)
  • Direct Console ANSI sequences for vi and sh line editing
  • Combine ANSI code in BIOS and Direct Console
  • Direct and BIOS console driver refactoring and cleanup
  • Serial console rewritten, improved structure
  • Kernel printk allowed before console init
  • Add headless console for SBC systems

Drivers

  • Fast serial driver
  • Serial driver FIFO
  • Add O_EXCL for serial com/mouse
  • Implement VMIN/VMAX, termios cleanup in applications
  • Dynamically allocate TTY I/O queues
  • Char I/O excess wakeup calls removed for speed
  • Character queues don’t have to be power of 2
  • Customizable IRQ and I/O ports for all drivers
  • Use simpler wait routines in network drivers
  • New WD8003 network driver (@pawosm-arm)
  • NE2K network driver rewritten (@Mellvik)

Networking

  • Packet statistics via netstat
  • Fixed ARP, Added ARP cache list display
  • Debug RTO values
  • Multiple session support to telnetd
  • Tune timeouts for TCP transmissions
  • Remove double buffering in network drivers
  • Tuned network buffer sizes, implement send window write throttling
  • Network throughput increased substantially
  • File transfers both ways now supported

Networking Bug Fixes

  • Tons of TCP/IP fixes to ktcp and kernel
  • Fixed Async ARP packet handling
  • Fixes to telnet, telnetd and httpd to get them actually working
  • Implement SLIP driver
  • Fix SLIP buffer overrun
  • Fix odd length IP/ICMP checksum calcs
  • Networking fixes for connections, PTY fixes, keypress to continue fix

Boot

  • Boot option parsing in /bootopts
  • Serial console via /bootopts
  • Init run modes for multi-user/multi-console
  • FAT 12/16 boot (@tkchia)
  • FAT32 boot
  • Improved FAT booter, /linux and /dev first 8 entries (@tkchia)
  • Implement ELKS parameter block in boot blocks (@tkchia)
  • MBR boot loader
  • Revised single stage boot loader design for Minix (@mfld-fr)
  • Minix boot loader enhancements (@tkchia)
  • Major setup.S cleanup, source cleanups
  • Refactor REL_SYS, remove !REL_SYS, CONFIG_ROMCODE working

New Commands

  • sys - transfer system images
  • makeboot command to write boot blocks
  • mkfat - create FAT filesystems
  • kilo - visual editor enhancements (@georgp24)
  • cron - schedule background jobs (@georgp24)
  • arp - display ARP cache
  • net - network start/stop script
  • df - disk free
  • time - calculate elapsed time running command (@Mellvik)
  • busyelks - BusyBox for ELKS (@marcin-laszewski)
  • tty - display current TTY (@Mellvik)
  • hd - hex dump
  • unreal - switch to 8086 unreal mode (@georgp24)
  • uuencode/uudecode - encode / decode binary files for network transmission (@Mellvik)
  • fdtest - floppy disk tester
  • sercat - serial port tester
  • mouse - mouse tester
  • Add Nano-X and games into build tree

Improved Commands

  • Sh line editing (@georgp24)
  • BASH command completion
  • Sash history (@Mellvik)
  • Dynamic window size for vi, kilo
  • ANSI /etc/termcap for vi, vi works from serial port
  • Enhanced ps, meminfo, miniterm, ls
  • Major bug fixes to init, getty
  • ^C handling, no shell exit
  • Workaround kernel directory rename with improved mv command
  • Add recursive option to cp to copy entire disks
  • Fixed mkfs and fsck to work
  • Fixed fdisk to work
  • Fixed clock and added to startup for correct date/time from BIOS at boot
  • Fixed init to properly read /etc/inittab, with single and multi-user run modes
  • Fixed getty to handle multiuser logins on serial ports

C Library

  • Debug malloc heap trace
  • Libc Routines added or fixed: putenv, basename/dirname (@cjsthompson), chgrp, snprintf/ vsnprintf (@tkchia), getpass, times, tzset, sleep, rand, srand, gmtime, in_aton, in_ntoa, in_gethostbyname
  • Header file cleanup and all prototypes
  • No warnings on libc compile
  • Split all functions to separate .c files (@marcin-laszewski)
  • Localtime support and TZ=
  • Add stdcall support (@tkchia)
  • Add multilib support (@tkchia)

Build

  • MacOS build
  • Disk images built with mfs tool, no root or host filesystem driver needed
  • Add setboot for managing boot blocks
  • Elkscmd/ reorganization, all commands built w/any config

Compiler / Tools

  • Toolchain enhancements for medium model (@tkchia)
  • Enhance thunk code for 0-6 argument near calls from fartext (@tkchia)
  • Move to new elf linker (@tkchia)
  • Use ligbcc from toolchain (@tkchia)
  • Add objdump86
  • Elksemu enhancements (@tkchia)
  • GCC tools update for GCC v10 (@tkchia)
  • mfs tool to create Minix images w/o being root

Images

  • Build all disk images automatically
  • Images include 2.88M, 1.44M, 1.2M, 720k and 360k, FAT and Minix, 32MB HD, 32MB MBR
  • Config image build system for app category and disk image size
  • Select applications by image size as well as application category
  • Consolidate commands to /bin

Documentation

  • Wiki
  • Improved HTML documentation (@georgp24)