Labs for Rust OS – CS-3210 at Georgia Tech
tc.gts3.org
tc.gts3.org
It's worth learning both how FAT32 works and how a simple inode-based filesystem works. They're quite different styles, and inode-based systems support things like hardlinks.
It was insane, but I learned an incredible amount from it. Would recommend, even if you focus only on FAT.
Was your implementation able to write to the SD card, too? This seems like the much hard part to me because you need to do implement the data structure changes and block allocations for files. Reading from a file system often boils down to following the right offsets until you get to file content, at least in journal-less file systems.
Ironically, looking at my code now, it seems like I never got around to actually writing file contents. I seem to have stopped after finishing the overall FAT16 filesystem structure traversal and mutation.
The SD card module was a little simpler, because I only really needed to implement flows for the commands involved in initialization and single-block reads and writes. The SD card presents a block-oriented storage interface, but it doesn’t really care what you’re storing otherwise.
Have you checked out the osdev wiki and forums? There's a good deal of info on both of those topics there.
Yes, it is C, not Rust, but for systems work it is absolutely worth knowing.
1. Use a widely available architecture. This practically means x86 or x86_64. Nothing against RPis, for example, it's just that _everyone_ is more likely to have some sort of Intel desktop/laptop before they even have an RPi.
2. Start from the very basics: booting up and go into a NOP loop should be one of the first lessons.
3. Don't need to go too far: basic but functional implementations of things like memory management, multitasking, file systems, etc. are enough.
4. By the end, have a simple OS that boots up to a basic shell, is capable of reading/writing to something like FAT16 and can run multiple tasks in parallel.
We definitely need more course that go down to deep specifics of how OSes work, are implemented.
(I feel like Tanenbaum's Minix book the last excellent piece of literature in the area that came closest. But of course, if you're aware of other literature on this, let me know!)
> The labs used in CS3210 are largely based on the materials originally developed for CS140e: An Experimental Course on Operating Systems by Sergio Benitez.
However for an IoT/embedded OS networking is pretty essential.
Incredibly frustrating, but I learned more general concepts in each semester than in anything else.
I still remember trying to decide between 6210 and another elective. I asked Bill Leahy, who in typically efficiency replied, "Well, Tom Conte has a Porsche and a Ferrari." I figured that was a fair criteria in deciding who to learn from.