For building the source code you need the below listed toolchain components in your system:
gcc-avr version 2 (it is needed for time.h and date)
Other Dependences:
make, gcc-avr, avr-libc, avrdude (for flashing), flex, bison, make
There are several short and quick examples applications for getting started with multi-tasking embedded system programming using Xinu OS (some of them come from the Comer's Book). These are easy to understand, just follow the few steps in the README file of each one. Check them here: Xinu examples apps source code.
Note: the only requirement for proper concurrent programming is to understand basic OS topics, like multi-task programming (priorities, processes states, etc), syncronization between processes, semaphores and mutexes. If you not, don't worry, you can play with the examples for a while while reading about those topics in some OS book.
# 1. get the repositoy
git clone http://github.com/zrfa/xinu-avr cd xinu-avr/
# 2. build
cd compile/ make clean make
# 3. flash and test
make flash screen /dev/ttyUSB0 # it could be /dev/ttyACM0 or whatever. Check dmesg
If everything was okey then you will see the Xinu shell prompt, ready for using your mini AVR microcontroller like a retro Xinu/UNIX-like computer.
The output below is an example of a Xinu shell session:
Welcome to Xinu!
        Xinu OS Copyright (c) 2012, 2015
        Douglas E. Comer and CRC Press, Inc.
        Xinu OS for AVR atmega328p v0.1 (c) 2020
        Rafael Ignacio Zurita 
naminit (devices):
  /dev/console
  /dev/nulldev
  /dev/namespace
FreeMEM:1050 (bytes)
xsh $ help
Commands:
 memdump : display SRAM memory contents
 editor : text editor
 basic : BASIC language interpreter
 help : this help
 sleep n : sleep n seconds
 forever : for (;;);
 uptime : tell how long the Xinu system has been running
 reboot : reset the Xinu system sw. THIS IS NOT a hw reset
 kill n : kill (terminates) the n (ID) process
 free : display amount of free and used memory
 clear : clear the terminal screen
 ps : display current processes table
 echo [arg ...] : write arguments to standard output
 date [MM/DD/YY HH:MM:SS] : set or get the date and time
 cal [mon] year : calendar
xsh $ sleep 3
xsh $ date
Sat Jan 01 00:00:10 2000
xsh $ uptime
 0 day(s) & 0h:0m:12s
xsh $ 
xsh $ 
xsh $ date 07/20/20 19:59:03
xsh $ 
xsh $ date
Mon Jul 20 19:59:04 2020
xsh $ uptime
 0 day(s) & 0h:13m:0s
xsh $ 
xsh $ sleep 10
xsh $ 
xsh $ forever &			# <- background process
xsh $ ps
table of current processes
name    id      parent  prio    state   stklen  sem waits
--
nullp   0       0       10      2       64      -1
shell   1       0       20      1       440     0
forever 3       1       20      2       128     -1
xsh $ 
xsh $ kill 3
xsh $ 
xsh $ ps
table of current processes
name    id      parent  prio    state   stklen  sem waits
--
nullp   0       0       10      2       64      -1
shell   1       0       20      1       440     0
xsh $ 
xsh $ free
addr            len
0x000004e5      418
                total   used    free
SRAM Mem        2303    1885    418
xsh $ 
xsh $ basic			# <- tiny basic interpreter under the Xinu shell
Welcome to TinyBasic Plus interpreter v0.15
210 bytes free.
available VARS: A - J
OK
> 
> 10 print "hi"
> 10 ro 
> 20 for i = 1 to 20 step 2
> 10 print "hi"
> 30 print "i",i
> 40 next i
> l
What? 
> 
> list
10 PRINT "hi"
20 FOR I = 1 TO 20 STEP 2
30 PRINT "i",I
40 NEXT I
OK
> 
> run
hi
i1
i3
i5
i7
i9
i11
i13
i15
i17
i19
OK
> buy
What? 
> bye
xsh $