aboutsummaryrefslogtreecommitdiff
path: root/TODOs
blob: 23c34580c1e6cae190beafb74b19c23f13eb81d9 (about) (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
* DONE * Remove duplications in Makefile... i.e. use generic recipes for .c -> .o compilations and many other things, that can be shortened this was

* Implement some basic utilities for us to use (memcpy, printf, etc...)

* ensure .bss section is zeroed properly in stage2 (stage1 and actual kernel do it in common boot.S file; stage2 doesn't use boot.S); Note, that:
  - It works as it is right now. If we have no uninitialized static variables in stage2 code, then .bss is probably empty... so this is not really important
  - What if wiki.osdev was wrong about this and objcopy includes .bss in it's output image? Then also no work needs to be done
  - Stage2 gets loaded between 0x4000 and 0x8000, so that piece of memory could be zeroed-out before by stage1 and that would solve the issue

* DONE * Add sanity-check at build-time, that stage2 blob is smaller than 0x4000 in size

* Races might occur, when one processor starts overwriting stuff at image load address before other processors execute the initial piece of code that puts them to sleep... This should be fixed in bootloader and will need to be taken into account when we develop the actual kernel to manage it's own memory

* Real RPi firmware would jump to the kernel on all cores after loading it from SD... So it'd be good if bootloader did a simillar thing - i.e. bootloader, when started, first shuts off all cores but one, it loads it's stage2, which downloads the kernel by uart, turns all cores back on and jumps to kernel on all of them... Additional kudos if U make this race-free (see, TODO above)

* DOOOONE * Finally, the most important thing - move forward and start working with the MMU already!

* DOOOONE * Start doing this on hardware already... (Hey, whole making of a bootloader was with this in mind!)

* Fix piping with pipe_image

* write some procedures for dumping registers and other stuff (for use in debugging)

* learn some asm and write exception handlers withour gcc's "interrupt" function attribute (this is so that we see what's happening - right now gcc hides some things from us...)

* write better uart (using interrupts, maybe DMA?); the current one is sopy-pasted from wiki osdev which is lame

* boot.S is also copy-pasted from wiki-osdev (very lame)

* shorten linker script... (I think I don't have to tell You where it's original version was copy-pasted from...)

* write documentation for what we've already done (yea, there's HISTORY.md, but we also want something that gives technical details of how MMU gets set up (writes to SCTLR, DACR and others), etc.)

* develop userspace process supervision (handling of interrupt caused by svc instruction, proper handling of other data abort, undefined instruction, etc.)

* get external interrupts work

* find a way to make management of binary pieces less messy (in the entire project there're currently about 5 places where code is being copied by other code...)