summaryrefslogtreecommitdiff
path: root/README
blob: 64408bf452dcb1b710fced4196a44686294246c3 (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
* vi: ft=markdown

Welcome to FoolOS

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

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")]


NOTES
=====

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