ELKS 0.2.0 and ELKS disk images released!

Jody Bruchon
2015-03-01T21:18:46Z

A new minor release of ELKS, version 0.2.0, has been released. Source
code and pre-built generic disk images are available at:

https://github.com/jbruchon/elks/releases/tag/v0.2.0

Quick summary of changes and features:

- An easy build script (build.sh) was written to simplify builds for
people new to ELKS

- The general build process is now explained in a README file

- Disk images are now completely fixed and will now build properly

- Fix builds when host system is x86_64

- Tons of kernel fixes, some of which were major long-term problems

- Numerous errors, warnings, and compilation failures are now fixed

As always, please test things out and let me know if anything doesn't
work as expected.

***

Full changelog sine 0.1.5 follows.

commit 3c302cad12d34de58aba1b166da06c9173a43364
Author: Jody Bruchon <jody@c02ware.com>
Date: Sun Mar 1 14:46:23 2015 -0500

Release ELKS 0.2.0 with massive improvements

Many improvements in this commit:

- Add a script "build.sh" that makes building ELKS dead simple

- Add a script "elkscmd/image_stats.sh" to get detailed image file
statistics such as free space and inode counts

- Fix failure to build 360K floppy images due to insufficient
available inodes. mkfs.minix defaults to 128 inodes for a 360K
Minix filesystem, but the minimal root filesystem "min_rfs"
would populate the image with well over 128 inodes. A disk image
that has no free inodes is useless anyway, so the mkfs.minix
options were modified to make 360 inodes for all images. The
largest image available still has over 100 inodes available when
fully populated, so there is plenty of room for the future.

- Add a new disk image type called 'full1722'. This image is made
to fit on a 1.722MB formatted floppy disk. Most 1.44MB floppies
can be formatted to 1.722MB using the Linux 'fdformat' command
and special options. The only reason this has been added is to
increase the available disk space for capable systems.

- Improved disk image creation options. There are now four ways to
build all of the disk images and package them up:
make images - build all image types but don't make an archive
make images.zip - make images into a Zip archive
make images.tar.xz - make images into a Gzip-compressed tarball
make images.tar.xz - make images into a XZ-compressed tarball
(images.tar.xz compresses to about 1/7 the size of the others)

- Disk image builds will automatically link /bin/sh to either ash
(preferred) or sash, depending on what is available.

- All disk image build types were tested in QEMU to ensure they
boot correctly.

- Bump kernel version to 0.2.0 (yay!)

- Pre-built disk images for ELKS 0.2.0 will be made generally
available at: https://github.com/jbruchon/elks/releases

Special thanks to Juan Perez-Sanchez for all his recent ELKS
kernel patches!

commit dbffde5de94d40d1531f4b389a944db451146a3a
Author: Jody Bruchon <jody@c02ware.com>
Date: Sun Mar 1 14:27:46 2015 -0500

Update .gitignore to include some kernel build files

commit 71d9477adb6b693c8a61da540858e7000b0bfa60
Author: Jody Bruchon <jody@c02ware.com>
Date: Sun Mar 1 14:24:22 2015 -0500

rootfs_template: remove some unnecessary stuff, fix root shell

ELKS has two shells: ash and sash. The proper system shell should
be symlinked at /bin/sh and the default shell for root should be
set to this symlink. Some totally unnecessary bogus users exist in
the passwd/group files and just happened to make those files a bit
larger than a 1K disk block, so a few of these were removed to
lower the default size of these files and possibly save a tiny bit
of disk space.

commit c8f1a49c3167565ae813a93b3389406ec130c6fa
Author: Jody Bruchon <jody@c02ware.com>
Date: Sun Mar 1 11:16:41 2015 -0500

elksnet: allow parallel make

commit a5a7dee9ce8431073c5754c20714909714c85d5a
Author: Jody Bruchon <jody@c02ware.com>
Date: Sun Mar 1 11:12:12 2015 -0500

ash/mkinit.c: change from K&R C to ANSI C; fix compiler warnings

commit b472cc1f3364149ae1b0e78098d48cb4be18a67f
Author: Jody Bruchon <jody@c02ware.com>
Date: Sat Feb 28 15:00:37 2015 -0500

Add a README file with project information and build procedure

commit 0928f61e0d4b639b9982a3a626c4756c7b434c6f
Author: Jody Bruchon <jody@c02ware.com>
Date: Sat Feb 28 14:32:13 2015 -0500

Update .gitignore to not include 'dev86' directory

commit d0a74229dc58d1baddce87ec587ea5452f8dbf2a
Author: Juan Perez-Sanchez <lithoxs@gmail.com>
Date: Sat Feb 28 14:30:30 2015 -0500

Simplify file structure initialization

Functions sys_execve(), get_pipe_inode(), sys_open(), close_fp()
and get_fd() repeated a lot of code. Now most of the work is done in
the new functions open_filp() and close_filp().

The new kernel was tested under QEMU and a PentiumPro PC booting
from floppy.

There was a reduction of 176 bytes in code size.

commit 1f83c20dfb4341fa83907646daabcc44f9e533c9
Author: Juan Perez-Sanchez <lithoxs@gmail.com>
Date: Sat Feb 28 14:29:23 2015 -0500

Fix to exec syscall, improve find_buffer performance

In function sys_execve() in file fs/exec.c, if after opening an
executable file an error was found, closed the file and returned an
error
code, but the corresponding inode structure was not released. Now,
the inode is released on errors.

In file fs/buffer.c, function find_buffer() now looks for the
requested block in the direction most likely to find it faster.

Moved prototype for function get_unused_fd() from include/arch/system.h
to the more reasonable place in include/linuxmt/fs.h.

Code size was reduced by 16 bytes.

commit 9e99aad2123a868817697a312ea0af6c95f67f3a
Author: Jody Bruchon <jody@c02ware.com>
Date: Mon Dec 8 08:24:41 2014 -0500

lxdialog: update headers and C flags for modern systems

The Makefile in scripts/lxdialog used -fomit-frame-pointer but
there is no reason to use it. Added flags for C99 and pedantic
warnings. Also added strings.h to dialog.h since some of the
string functions are supposed to use it. Without strings.h there
were many implicit function declaration warnings.

commit 70c62f6e3ba60e4f3a75bb661ea538f0d10a1436
Author: Jody Bruchon <jody@c02ware.com>
Date: Mon Dec 8 08:00:04 2014 -0500

lxdialog: code cleanups

Fixed some lxdialog compiler warnings and removed an unused
variable. The unused "y" variable cannot be removed because
the ncurses standard interface getyx() requires it.

commit b0e951dd49187be0a51d75aea7076a03b6cb0541
Author: Juan Perez-Sanchez <lithoxs@gmail.com>
Date: Mon Dec 8 07:37:52 2014 -0500

fdisk: create boot signature after partition table

Disk partitions created with ELKS fdisk are not recognized by the
ELKS kernel because they lack a signature. This patch fixes the
problem.

commit dac696b17cb75e6da6be6f581849424542883b8b
Author: Juan Perez-Sanchez <lithoxs@gmail.com>
Date: Mon Dec 8 07:37:05 2014 -0500

Fix a bug when processing backspaces

Fixed a bug in ntty.c when processing backspaces.
Rewrited xt-key.c to reduce code size.
Clean code in some functions in fs directory.

Code size was reduced by 288 bytes and data size increased 84 bytes.

commit 62a1a88fc95481c9c2188abce3527200d14b7041
Author: Juan Perez-Sanchez <lithoxs@gmail.com>
Date: Mon Dec 8 07:36:03 2014 -0500

Fix write to an array beyond its size

This patch fixes a bug in file fs/devices.c, function kdevname(),
where it overwrites the memory location following the end of static
array "buffer".

In file fs/minix/dir.c, function minix_dir_read(), changed its
declaration from using traditional C to ansi C.

Several improvements to code in fs and fs/minix directories

Code size was reduced by 176 bytes and data size reduced in 96 bytes.

commit 194c46b5c75bb189a4efd043c9adc8a5cb9bd217
Author: Juan Perez-Sanchez <lithoxs@gmail.com>
Date: Mon Dec 8 07:35:19 2014 -0500

Fix for release of pipe buffers

After finishing using pipes, the allocated buffers should be
freed, but the required functions were missing. The pipe
syscall allocated a new buffer on each call, until available
buffers were exhausted. Then, it returned ENFILE (NOT -ENFILE),
crashing the system.

This patch provides the missing functions and returns the
right value when buffers are not available, besides other minor
improvements to code in the fs directory.

Code size was reduced by 48 bytes.

commit a72b23c9db65014b7089b09493a9b8dcdc64866f
Author: Juan Perez-Sanchez <lithoxs@gmail.com>
Date: Thu Nov 27 11:53:27 2014 -0500

Simplify inode initialization

Initialization of inode structures was done in functions
get_empty_inode() and minix_new_inode(). But some
initializations were repeated at later stages.

The attached patch puts rationality to the initialization
of inode structures, placing initial values at the
earliest possible place and removing repeated initializations.

Also the simplification of several functions in the
fs/minix directory and prepare function get_pipe_inode()
for a future implementation of named pipes.

The new functions are simpler, easier to understand with
smaller code size.

Code size was reduced by 144 bytes.

commit dd97f4ac2e171953d3c26f941ff592d5fe941e81
Author: Juan Perez-Sanchez <lithoxs@gmail.com>
Date: Thu Nov 27 11:51:28 2014 -0500

Fix symlinks, clean up inode functions

Symlinks can't be correctly created by ELKS. If a prebuilt filesystem
with symlinks is mounted under ELKS, it is recognized by command
ls, but programs cannot follow the link.

The attached patch fixes both problems. In addition, also fixes
the function strlen_fromfs(), which always returned zero.

I also took the opportunity to rewrite some functions in
fs/inode.c and fs/minix/inode.c to make them clearer and reduce
code size.

Code size was reduced by 128 bytes and data increased by 32 bytes.

commit 5bad583d4f9cfc8a5334ceffe6b697d3a693ec7f
Author: Juan Perez-Sanchez <lithoxs@gmail.com>
Date: Sun Nov 16 09:20:56 2014 -0500

Loop code cleanups, sys_execve() error handling bug fix

Transform "while" and "for" loops to "do {} while()" loops, when it
made cleaner code.

Cleaned handling of error in sys_execve().

Code size was reduces by 112 bytes.

commit e618adbf1df344fad65d7a05559ba23a250421f1
Author: Juan Perez-Sanchez <lithoxs@gmail.com>
Date: Sun Nov 16 09:19:31 2014 -0500

peek/poke fixups, unused variable cleanups

Some functions still used peek*/poke* to access userspace. Those
were replaced by architecture neutral get_user_*/put_user_*.

Unused functions peekd, pokeb, poked, get_bp, get_sp were removed.
Files for the first 3 functions remain in the source tree, together
with many other unused files. Unused variables "end" (in function
stack_check), "arch_segs", "marker" (in file sleepwake.c) and code
to initialize their never used contents was removed

Messages for printing startup errors were moved from init_task()
to a single print statement in function run_init_process().

Code size was reduced by 160 bytes and data reduced by 124 bytes.

commit efe4aa9037480c9fb670de84bc25b1f0bb9fd292
Author: Juan Perez-Sanchez <lithoxs@gmail.com>
Date: Sun Nov 16 09:18:22 2014 -0500

fork()/tswitch() bug fixes, task_struct init cleanup

System call fork() did not preserved user registers SI and DI
for the child task, and getting user register BP was unnecessa-
rily complex. The code was greatly simplified and assembly
function fake_save_regs() was completely removed.

Function tswitch() preserved registers BX and DX, but this is
not required by the calling conventions. The code was
simplified.

Initialization of struct task_struct was repeated at several
places in the source tree. Now, function find_empty_process()
does some initialization.

Code size was reduced by 128 bytes.

commit b012851309dc256ee4374b5c99a7e4220cebc9a9
Author: Juan Perez-Sanchez <lithoxs@gmail.com>
Date: Sun Nov 16 09:16:56 2014 -0500

File struct init unification, get_pipe_mem() improvements

Function get_empty_filp() now initializes some fields of file struct.
Previously, these initializations were repeated at several points in
the source tree: open.c, pipe.c, socket.c and exec.c.

Variable nr_files always equals NR_FILE. So, removed it and simplified
the code that uses it.

Function get_pipe_mem() uses a boolean array. Replaced it with a
bitmap.

Code size was reduced by 112 bytes and data reduced by 20 bytes.

commit 66b26efbc309c97619bf9cc6cd61620a57accd75
Author: Juan Perez-Sanchez <lithoxs@gmail.com>
Date: Sun Nov 16 09:12:28 2014 -0500

Task 0 cleanups, code size reduction

Claim 768 bytes memory used for the stack of task 0 during startup.
This task has 1 Kbytes reserved for stack in its task-struct, but
instead used a memory space reserved in file arch/i86/boot/ctr0.S.

Cleans a bit the mess of conditional compilation statements in
file arch/i86/boot/ctr0.S.

Removes unneeded function redirect_main() in file kernel/printk.c.
See comments in file arch/i86/boot/crt0.S.

Code size gets reduced by 64 bytes and data reduced by 768 bytes.

commit 68a726f1ab949dfa986b4a029074c86c0ad69f48
Author: Jody Bruchon <jody@c02ware.com>
Date: Sat Apr 26 23:12:31 2014 -0400

Various build fixes

commit 637f687f3542f8280657ce86572dd7e280eb6afa
Author: Jody Bruchon <jody@c02ware.com>
Date: Sat Apr 26 20:48:44 2014 -0400

elkscmd: Makefile fixes

commit b7af2e9f4df1d87750385e12b0c86ca7351ea29e
Author: Jody Bruchon <jody@c02ware.com>
Date: Sat Apr 26 20:20:18 2014 -0400

Do not offer XMS support if CPU is not 80286 or higher

commit 3f584bc1856608d4fe2f8c4d24ef6f02d04dd291
Author: Jody Bruchon <jody@c02ware.com>
Date: Sat Apr 26 19:59:05 2014 -0400

menuconfig: Fix hang when changing "int" values, add bounds check

commit 36f298516f1573c3d68d4d58fd0363b93045c737
Author: Jody Bruchon <jody@c02ware.com>
Date: Sat Apr 26 18:45:18 2014 -0400

elkscmd: Easier dev86 path, add kernel check, add bootblock build rule

commit 824e1d4e53c5e6bfa9b93256c8bc6802ac46a505
Author: Jody Bruchon <jody@c02ware.com>
Date: Sat Apr 26 18:30:59 2014 -0400

Minor improvements to "make clean"

commit 7507be9d0e1747b565791b18d61ab4f299bc9ef4
Author: Jody Bruchon <jody@c02ware.com>
Date: Sat Apr 26 18:26:33 2014 -0400

Add compress.host to Makefiles for compressed target manpages

commit 3f4f84dc093540ffe97b5f161ef62805837ea6fb
Author: Jody Bruchon <jody@c02ware.com>
Date: Sat Apr 26 18:16:14 2014 -0400

misc_utils: Make "compress" compile with GCC and add to Makefile

commit 9e125e94bbe1672bca3003f102c93d019a756522
Author: Jody Bruchon <jody@c02ware.com>
Date: Sat Apr 26 00:24:08 2014 -0400

Fix more elkscmd compilation errors

commit 21196b2c737dc65bf14c9593f328f1bec0c7f38f
Author: Jody Bruchon <jody@c02ware.com>
Date: Sat Apr 26 00:12:18 2014 -0400

Fix elksnet program suite compilation failures

commit 4ae48abe91fe3c399d5166ff4645000cb551b5f0
Author: Jody Bruchon <jody@c02ware.com>
Date: Sat Apr 26 00:02:19 2014 -0400

Fix elkscmd inet program compilation failures

commit 2688a73b2bdb7a2f407f20290d8b96508dcf176f
Author: Jody Bruchon <jody@c02ware.com>
Date: Fri Apr 25 18:19:40 2014 -0400

German to English change: mkurlader.c -> mkbootloader.c

commit b44030b35957c137659df4322dbd8cd36810b914
Author: Jody Bruchon <jody@c02ware.com>
Date: Fri Apr 25 17:22:23 2014 -0400

Moved currently irrelevant documentation out of the way

commit e38ddc542db10c0c07d1264dae81972cd9cf48d7
Author: Jody Bruchon <jody@c02ware.com>
Date: Fri Apr 25 15:37:05 2014 -0400

Fix building on 64-bit systems by using better types from stdint.h

commit 016d11fda5107814509c95c4a97214e5fa7adfd8
Author: Jody Bruchon <jody@c02ware.com>
Date: Fri Apr 25 12:29:48 2014 -0400

Fix erroneous Makefile newlines

commit 7aa31c8a602e8b414150e8576d1b692abf369ba6
Author: Jody Bruchon <jody@c02ware.com>
Date: Fri Apr 25 12:03:18 2014 -0400

Add .gitignore

commit e77732305254b19b8d5d5dfac51c8998c084d237
Author: Jody Bruchon <jody@jodybruchon.com>
Date: Mon Mar 18 12:03:24 2013 -0400

fsck fix and general optimizations by Juan Perez-Sanchez:

Fixed a problem which produced a kernel message error when running
the command "fsck". Now that the implementation of read and write file
is cleaner, it was very easy to find and fix the problem in file
fs/block_dev.c.

General optimization in files arch/i86/drivers/block/doshd.c,
arch/i86/mm/init.c, arch/i86/mm/malloc.c, arch/i86/mm/user.c,
fs/buffer.c fs/minix/file.c, kernel/printk.c and kernel/sched.c,
removing unused variables and redundant statements, using pointers
instead of array indexing, using do{}while() whenever possible and
simplifying code.

3. As result of the modifications the code size was reduced in 112
bytes.

commit ea71dbdc894ba1ae03a44fde89412cdc18761d66
Author: Jody Bruchon <jody@jodybruchon.com>
Date: Mon Mar 18 11:58:43 2013 -0400

Speed patch by Juan Perez-Sanchez:

Modified the implementation of functions find_first_non_zero_bit()
and find_first_zero_bit() in file arch/i86/lib/bitops.c to make them
faster. This came at the cost of an increase in code size. To
compensate for this, also optimized numerous functions in the
arch/i86/lib directory.

Code size increased by 32 bytes.

commit d7422cd0ab5495464511e5c0e368261572ecf2ad
Author: Jody Bruchon <jody@jodybruchon.com>
Date: Mon Mar 18 11:54:06 2013 -0400

Driver and cleanup patch by Juan Perez-Sanchez:

In block driver doshd.c (the default driver), reading and writing
sectors is now done directly from/to block buffers. Previously the
sectors were copied to a buffer located at BUFSEG:0x0000 as an
intermediate and unnecessary step. These changes were tested copying a
lot of files running elks under qemu, checking the integrity of the
copied files and running fsck for the modified filesystem under linux.
Under the dioscuri emulator, with the ability to emulate the processor
speed, obtained a reduction of 15 sec. in running time when copying
the entire /bin directory from a total of 80 secs.

The modifications above, and other small changes to have a closer
implementation with "directhd.c" also reduced the code size.

Small changes in fs/exec.c and kernel/sys.c to remove unused
variables and redundant statements.

As result of the modifications the code size was reduced in 112 bytes.

commit ad990a059d496a0684e44e1ac02eb0e664bb7625
Author: Jody Bruchon <jody@jodybruchon.com>
Date: Mon Mar 18 11:52:57 2013 -0400

Another FS patch from Juan Perez-Sanchez:

General optimization of fs/inode.c code. Changed the role of variable
"first_inode", changed the direction of walking through the inode list
depending in the intended operation, prefer the use of pointers over
array indexing, use do {}while() loops when possible (which bcc
"prefers"). The changes reduce both code size and processing time and
were tested copying a lot of files running elks under qemu, checking
the integrity of the copied files and running fsck for the modified
filesystem under linux.

A small optimization in file fs/minix/file.c, function
minix_file_read().

Code size reduced by 192 bytes.

commit 29dbcd46dda2d9650f431f18ce16a83baa8c290b
Author: Jody Bruchon <jody@jodybruchon.com>
Date: Mon Mar 18 11:51:25 2013 -0400

FS patch by Juan Perez-Sanchez:

Modification of file read and write operations in fs/block_dev.c,
fs/minix/file.c and fs/pipe.c to have a closer implementation. Also,
fixed some minor problems in file.c (e.g. minix_file_read checks
*inode to be nonzero after actually dereferencing it).

The purpose of a closer implementation of these functions is to see
what are the important differences and provide insight on how to write
a unique generic implementation (as in mainstream linux).

The modified functions do the same things than the originals, only
the pointers and counters book keeping was greatly simplified. These
were tested copying a lot of files running elks under qemu, checking
the integrity of the copied files and running fsck for the modified
filesystem under linux.

As result of the modifications the code size was reduced in 352 bytes.

commit b5ae5d96196087be52ba2ea7fc30e81d13e33d35
Author: Jody Bruchon <jody@jodybruchon.com>
Date: Mon Mar 18 11:47:30 2013 -0400

IRQ patch from Juan Perez-Sanchez:
A small modification to reduce interrupt latency time.
Code cleanup in file arch/i86/kernel/irqtab.c.
Code size reduced by 16 bytes.

commit da0faa30ad44bdad02064fbe863f324a95ae5d9b
Author: Jody Bruchon <jody@jodybruchon.com>
Date: Mon Mar 18 11:46:02 2013 -0400

elkscmd patch my Juan Perez-Sanchez: "Fix to more pager"

commit 3ccc3cf4092c7241dd831d2c5e764d72eacbec9e
Author: Jody Bruchon <jody@jodybruchon.com>
Date: Thu Dec 6 19:00:14 2012 -0500

Huge patch set from Juan Perez-Sanchez <lithoxs@gmail.com>:

[PATCH] Bug fixes to block drivers
[PATCH] standardization of get_user_* and put_user_* functions
[PATCH] Standardization of memcpy_form/tofs functions
[PATCH] Fix for bug in inode list
[PATCH] Improvements to block device code
[PATCH] Fixed bug when copying many files