Baking Pi – Operating Systems Development
Welcome to Baking Pi: Operating Systems Development! Course by Alex Chadwick.
This website is here to guide you through the process of developing very basic operating systems on the Raspberry Pi! This website is aimed at people aged 16 and upwards, although younger readers may still find some of it accessible, particularly with assistance. More lessons may be added to this course in time.
This course takes you through the basics of operating systems development in assembly code. I have tried not to assume any prior knowledge of operating systems development or assembly code. It may be helpful to have some programming experience, but the course should be accessible without. This course is divided into a series of 'lessons' designed to be taken in order as below. Each 'lesson' includes some theory, and also a practical exercise, complete with a full answer.
Rather than leading the reader through the full details of creating an Operating System, these tutorials focus on achieving a few common tasks separately. Hopefully, by the end, the reader should know enough about Operating Systems that they could try to put together everything they've learned and make one. Although the lessons are generally focused on creating very specific things, there is plenty of room to play with what you learn. Perhaps, after reading the lesson on functions, you imagine a better style of assembly code. Perhaps after the lessons on graphics you imagine a 3D operating system. Since this is an Operating Systems course, you will have the power to design things how you like. If you have an idea, try it! Computer Science is still a young subject, and so there is plenty left to discover!
In order to complete this course you will need a Raspberry Pi with an SD card and power supply, as well as another computer running a version of linux, Microsoft Windows or Mac OS X, capable of writing to the SD card, and installing software. It is helpful, but not necessary, for your Raspberry Pi to be able to be connected to a screen.
In terms of software, you require a GNU compiler toolchain that targets ARMv6. Links for downloads are available on the Downloads Page, along with model answers for all of the exercises.
|0||Introduction||This introductory lesson does not contain a pratical element, but exists to explain the basic concepts of what is an operating system, what is assembly code, and other important basics. If you just want to get straight into practicals, it should be safe to skip this lesson.|
|OK LED Series (Beginner)|
|1||OK01||The OK01 lesson contains an explanation about how to get started, and teaches how to enable the 'OK' LED on the Raspberry Pi board near the RCA and USB ports.|
|2||OK02||The OK02 lesson builds on OK01, by causing the 'OK' LED to turn on and off repeatedly.|
|3||OK03||The OK03 lesson builds on OK02 by teaching how to use functions in assembly to make more resusable and rereadable code.|
|4||OK04||The OK04 lesson builds on OK03 by teaching how to use the timer to flash the 'OK' LED at precise intervals.|
|5||OK05||The OK05 lesson builds on OK04 using it to flash the SOS morse code pattern (...---...).|
|Screen Series (Advanced)|
|6||Screen01||The Screen01 lesson teaches some basic theory about graphics, and then applies it to display a gradient pattern to the screen or tv.|
|7||Screen02||The Screen02 lesson builds on Screen01, by teaching how to draw lines, and also a small feature on generating pseudo random numbers.|
|8||Screen03||The Screen03 lesson builds on Screen02 by teaching how to draw text to the screen, and introduces the concept of the kernel command line.|
|9||Screen04||The Screen04 lesson builds on Screen03 by teaching how to manipulate text to display computed values on the screen.|
|Input Series (Advanced)|
|10||Input01||The Input01 lesson teaches some theory about drivers, and linking programs, as well as keyboards. It is then applied to print out input characters to the screen.|
|10||Input02||The Input02 lesson builds on Input01 by teaching how to make a commnad line interface for an Operating System.|