summaryrefslogtreecommitdiff
path: root/README.md
blob: 6d9e12a7159a13d20c8206017dacaac1e7b39d8c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
Welcome to FoolOS
=================

Disclaimer
----------

This is a simple and useless "operating system", with very basic 
features, sorry. It is the fruit of my fundamental explorations of 
the 32-bit protected mode, interrupt handling, memory management and 
some other things.

![Screenshot of FoolOS](/screenshots/foolos.png?raw=true "FoolOs Kernel")

Copyright M.Idziorek 2014 <m.i@gmx.at>

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


MY NOTES BELOW THIS LINE
========================

cli; disable interrupts
lgdt
lidt
sti; enable interrupts

Linux Startup x86
=================

1. arch/x86/boot/header.S

Contains the header and linux 16 bit code.

This code should be entered with a bootloader at the address specified 
within the header (as _start) which will put us at 'start_of_setup'

Direct loading will put us at 'start2' at the very start which will
show an error message

If everyhing goes right we will enter the 16-bit real mode C module 
with:

call main ; should not return

2. arch/x86/boot/main.c

void main(void) will do some checks and detections (cpu,mem,..) and
invoke: go_to_protected_mode();

3. arch/x86/boot/pm.c

go_to_protected_mode() - will disable interrupts and set up the initial 
idt and gdt descriptor tables before calling: protected_mode_jump() and 
passing the address of code32_start.

4. arch/x86/boot/pmjump.S

back in assembly-world the actual transition is made inside 
'protected_mode_jump' and we move on to 'in_pm32' where the data segment
is set up and we jmpl to the 32-bit entry point of the kernel.

5. arch/x86/kernel/head32.c (assumption!?)

void i386_start_kernel(void)

6. init/main.c

start_kernel(void)

setup_arch()!!

Interrupts
==========

arch/x86/include/asm/irq_vectors.h each entry is 8 bytes

ISA interrupts:

0x30 0x0000 0x0000 0x0000 0x0000
0x31
0x32
..
0x3f


TODOS
=====
    * study LINUX KERNEL
    * GNU HURD
    * MINIX
    * FreeBSD etc.

NETWORK
=======

    look at following linux drivers:
    * e1000

notes
=====

* posix - minimal set of function calls! 
* distributed os
* caches L1,L2,L3
* controller -> ide inteface of device
* probe memory!
* a20~ wrap

* ssd card reader
* cobol fortran algol? compilers? 

* quotation: ontogeny nrecapitulates phylogeny

* own simple sell

check:
apertium?
clang 
freebsd 
user-mode-linux

REFERENCES
==========

http://www.brokenthorn.com/Resources/OSDev17.html