Embedded Xinu, Copyright (C) 2008, 2009, 2010, 2013, 2018. All rights reserved.
This code while usually running is a work in progress .. AKA Alpha. It is walking a line between staying functional as well as being able to make the large changes required on the code base. I am updating the Wiki as I go if you do want to track what I am working on.
The code has been altered to allow either orginal soft FPU compiling or now hard FPU compiling ... Please see notes.
Default is set for hard float of the repository. https://github.com/LdB-ECM/Docs_and_Images/blob/master/Documentation/HardSoft_fpu.md
I changed the makefile to build object files to a single directory so I could make the clean process faster. I hopefully added make under linux support in at the same time (untested).
https://github.com/LdB-ECM/Docs_and_Images/blob/master/Documentation/Xinu.md
https://github.com/LdB-ECM/Xinu/blob/master/compile/kernel.img
Compiling of ARM7(Pi2) and ARM8(Pi3) 32 bit code added as close to release (1 bug in ethernet driver). As the FPU is offline in code due to restriction with context switcher code there is little advantage right now. For stability stay with kernel.img although the other binaries are precompiled out of interest.
Version: 3.00 Alpha the background
- Xinu 2.0 Repo: The Good, The Bad, The Ugly?
- Current changes
- Future planned changes
- Installation Instructions
- Build Instructions
- Build Controls
- Useful Links
- The Code being derived off UNIX has enough similarities to Linux to be useful
- The design is simple, some may even say elegant
- There is plenty of documentation and teaching examples
- There is no storage media support
- The coding standards makes the repository awkward especially if you try to port to 64bit.
- The integeration of python and shell commands into the build process is frustrating
- There is no C standard the code adheres with.
- Standard C libraries either don't exist like
stdbool.h
or have been butchered likestddef.h
- A number of hideous macros and code which are poor substitues to the missing C standard functions
<stdbool.h>
the C standard created- Fixes to
<stdint.h>
to align it closer to the C standard for AARch64 especially - Reclaimed
stddef.h
for C standard, placing wrong enties intoxinu.h
- Slowly removing every
uint
,uchar
,ulong
etc and replacing them with standards - Entries with no size requirement given plain C types (
unsigned char
,unsigned int
,int
etc) - Entries with specific width changed to
stdint.h
entries (uint16_t
,uint32_t
,uint64_t
). - Device system being reworked so they just auto load into device table.
- Having done 7
conf.c
,conf.h
are blank empty drive tables simply with a maximum device capacity. - Having done 7 & 8 the integration of python to make source files was removed as just ugly.
- All shell commands were removed from the makefile system (It now builds solely using make)
- Build now working correctly with just make and the compiler
- For the Pi
start.s
andplatforminit.c
are sorting out all models so they work (it's ugly atm) - Fixed Framebuffer device so it works on all model Pi
- Fixed framebuffer device so it supports 3 colour modes RGB565, RGB, RGBA
- Added VT100 parser from console output to FrameBuffer screen.
- Added lan78xx driver as needed by Pi3B+
- Added GPIO driver for all Pi models
- Arm7, Arm8 32 bit compiling support done
- Hard/Soft FPU compiling added.
*** 12. Will be fixed as I publish what I am expecting to enforce of drivers in a soon to be printed standard for drivers.
- SD & HDD drivers done, FAT32 driver done. Need to sort out mount and console.
- AARCH64 bit compilation is working but I have some alignment bugs with bad code
- Full MMU support is done in both 32/64 but again bad code causing bugs is issue
- I can bring the FPU online but debugging and checking needs to be done
- To many platforms rather than correctly use platformint.c use #define
- Driver directory with device sharing needs to be sorted .. I prefer subdirectories
- Multiprocessor task/switcher system needs to be added. I have played around and it isn't hard to replace the switcher and scheduler with different variants.
It should be as simple as download a C compiler for your O/S I am using the ARM standard toolset in the useful link list down the page
Download a make executable (make.exe) for your O/S .. On windows I am using GNU make 4.21
Place the binary directories for the compiler and makefile on your path environment.
Open a command console and navigate to the compile
directory on your copy of
the repository Issue the command make
.
It should start building away :-)
The build has two important extra commands:
make clean
... will remove all the temp compiled binary object files which forces a full buildmake libclean
... will remove all the temp compiled library files so the library can be rebuilt.
From time to time you will need both depending what files you change.
Arm open source develpment tools https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads
Linux driver file repository https://github.com/torvalds/linux/tree/master/drivers
GNU 4.2.1 Make prebuilt binaries for Windows https://github.com/mbuilov/gnumake-windows