Giter Club home page Giter Club logo

elks's Introduction

logo

cross main

What is this ?

This is a project to write a Linux-like OS for systems based on the Intel IA16 architecture (16 bits processors: 8088, 8086, 80188, 80186, 80286, Nec V20, V30 and compatibles).

Such systems are ancient computers (IBM-PC XT / AT and clones), or more recent SBC / SoC / FPGA that reuse the huge hardware & software legacy from that popular platform.

Watch ELKS in action (thanks @xrayer): https://www.youtube.com/watch?v=6rwlqmdebxk

How to build ?

Prerequisites

To build ELKS, you need a GNU development environment, including:

  • flex
  • bison
  • texinfo
  • libncurses5-dev

Quickstart

A script is provided to automate the whole build process (cross toool chain, configuration, kernel, user land and target image), and make it easier for ELKS newbies:

./build.sh

Note: all the scripts must be executed within the top folder of the ELKS repository as the current one (= TOPDIR).

If you want to clean everything up afterwards (except the cross tool chain):

./clean.sh

Build steps

1- Create a cross subfolder:

mkdir cross

2- Build the cross tool chain, mainly based on a recent GCC-IA16 (DEV86 including BCC was used for previous versions, but has been dropped because it was obsolete and no more maintained):

tools/build.sh

Ubuntu 18.04 LTS users: as this step is quite long, you can download an already built cross folder from here: https://github.com/elks-org/elks/actions?query=workflow%3Across

3- Set up your environment (PATH, TOPDIR and CROSSDIR):

. ./env.sh (note the '.' before the script)

4- Configure the kernel, the user land and the target image format:

make menuconfig

5- Build the kernel, the user land and the target image:

make all

The target root folder is built in target', and depending on your configuration, that folder is packed as either a floppy disk image (fd360, fd720, fd1440), a hard disk image (hd, without MBR), or a file image (ROM, TAR), into the image folder.

6- Before writting that image on the real medium, you can test it first on QEMU:

./qemu.sh

7- You can then modify the configuration or the sources and repeat from the step 4 after cleaning only the kernel, the user land and the image:

make clean

More information

Questions? Problems? Patches? Open an issue in this project!

You can also join and email the 'Linux-8086' list at [email protected].

More information in the Documentation folder: Documentation/index.html

elks's People

Contributors

donghyun0224 avatar edoalive avatar fonin avatar georgp24 avatar ghaerr avatar jbruchon avatar lithoxs avatar marcin-laszewski avatar mfld-fr avatar mintsuki avatar segin avatar tkchia avatar transplier avatar

Stargazers

 avatar

Watchers

 avatar  avatar

elks's Issues

[ne2k] Georg's feedback

Feedback from @georgp24:

  • full3 has owner:group as root:root. The old makefile managed to generate a full3 file which does not have root as owner.
  • please do not include "-k fr" in qemu.sh as default. I got very strange keyboard reactions.
  • document as "tcpdump -r qemu-vlan0.pcap" (to help dummies)

Perhaps add a README-NE2K file with a few instructions in elks/root while developing.

Move ne2k.h

Can you move ne2k.h to linuxmt so I can better include it with ktcp?

[eth] Add ioctl() to get / set MAC address

The Ethernet driver should provide a way for the user to get or set the MAC address, that is needed to build the packet to send, or to filter the received packet in promiscuous mode.

Telnet test

Check that the existing telnet client is working.

ktcp will not start

You have to add "-serial pty" to the qemu.sh script or ktcp will not start since /dev/ttyS0 does not work.

Since your version still includes the faulty "fs/select.c" file, the command "netstat" will not work but crash with the "panic waitpt" message.

I suggest to use the fs/inode.c and fs/namei.c files from my commit as well to avoid hunting for errors unnecessarily.

Qemu script

As far as I am aware, it is "keyb=en-us" and not "keyb=us". However, en-us did not work for me, so it is better to specify "keyb=".

Menuconfig

In the current version there is only one network device drivers option: "NE2K device driver". Please leave the other options and just add the NE2K device driver.

[romfs] Replace low-level routines by generic code

The ROM filesystem implementation currently uses low-level routines in assembly that could be replaced by a little more C lines and using the existing memory routines.

Issue created as an outcome of the code review in jbruchon#160.

Make network card visible on the host

For testing one would need to send some data from the host to the network card. This way one could test the receive function. The card:
"ne2k_isa.0: index=0,type=nic,model=ne2k_isa,macaddr=52:54:00:12:34:56"
should show up on the host with ifconfig -a for this.

Since Marc-Francois knows Qemu in and out he could give some instructions how to do that.

I was thinking along the lines of these instructions perhaps:
https://en.wikibooks.org/wiki/QEMU/Networking
http://wiki.qemu-project.org/Features/HelperNetworking

kill command working?

For developing ktcp it is necessary to kill the ktcp process and start it again.

Can you please try to execute the kill command with the "corrected" select.c? When I tried "kill 5 &" will still crash. Not so with the old select.c of version 0.2.0

Recover ongoing activities from upstream

Back to personal fork after @jbruchon 'big reset' in jbruchon#352 :

  • Reactivate this fork as new origin
  • Redirect all forward branches to origin (master, next, marcin)

@marcin-laszewski's patching:

  • Apply the remaining patches : DONE in marcin branch
  • Push marcin branch to upstream : DONE in jbruchon#357

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.