Week # | Class date | Assignment Due | Topic |
---|---|---|---|
0x0 | 09/09 | introductions, syllabus, what is linux? | |
0x1 | 09/16 | setup | architecture specific code, interrupts, MMIO |
0x2 | 09/23 | E0 | symmetric multiprocessing, locking, scheduling |
0x3 | 09/30 | P0 | memory management, memory allocation, virtual memory |
0x4 | 10/07 | E1 | block devices, partition tables, block drivers |
0x5 | 10/14 | P1 | kernel modules, in-tree vs out-of-tree development |
0x6 | 10/21 | E2 | generic kernel virtual filesystem code, filesystems |
0x7 | 10/28 | P2 | network devices, address families, protocols |
0x8 | 11/04 | E3 | drivers, hardware description tables, probing, I2C |
0x9 | 11/11 | class is cancelled - university closed for veterans day | |
0xA | 11/18 | P3 | character drivers, device major and minor numbers, file operations |
0xB | 11/25 | guest lecture - topic TBD | |
0xC | 12/02 | F0 | live driver debugging exercise |
0xD | 12/09 | F1 | final presentations |
0xE | TBD | 2 Additional sessions for more presentations during finals week |
We guide students into the depths of the Linux kernel, introducing the concepts, tools, and frameworks necessary to become independent contributors to the Linux kernel in particular and open source software more broadly.
Linux is the most widely used operating system in the world. It powers the world's top supercomputers, every Android phone, and the servers that host the internet's most popular websites. At the core of Linux is a software component called the kernel. It performs critical roles including managing communication with hardware, sharing system resources equitably, and enforcing security constraints. This course will introduce students to Linux kernel development through hands-on experience working with internal Linux kernel APIs and providing an overview of some of the core features and components of the kernel. Students will gain an invaluable perspective on how their computers work behind the scenes. By grasping the inner workings of the operating system and how to make changes to it, they will add a new layer of understanding to their mental model of computation that will pay dividends throughout their future in software engineering.
Students will:
Develop Linux kernel internals knowledge, by:
Building up an understanding up of various kernel subsystems
Creating, developing, and testing interesting and creative Linux kernel modules
Stretching their C programming skills to the limit
Develop the ability to autonomously participate in the open source software community
Demonstrate the ability to explain technical topics in your own words
Learn how to give and receive feedback on code patches
A computer that can run podman
Patience, determination, and an ability to focus on a potentially frustrating task for sustained periods of time
The ability to join a live video call with camera/microphone from that computer (i.e. the necessary equipment and a stable internet connection)
Attendance is required.
Late work will not be accepted.
If a student fails to complete a task by a deadline or fails to attend class with no prior notice, and we do not hear from the student within a week, we reserve the right to give the student a final course grade of F.
Category | Percentage |
---|---|
Programming Assignments | 35% |
Homework Exercises | 15% |
Midpoint Project | 15% |
Final Project | 35% |
Percentage range | Letter grade | Grade points |
---|---|---|
90 ~ 100 | A | 4.0 |
85 ~ 89.99 | A- | 3.7 |
80 ~ 84.99 | B+ | 3.3 |
75 ~ 79.99 | B | 3.0 |
70 ~ 74.99 | B- | 2.7 |
65 ~ 69.99 | C+ | 2.3 |
60 ~ 64.99 | C | 2.0 |
55 ~ 59.99 | C- | 1.7 |
50 ~ 54.99 | D+ | 1.3 |
40 ~ 49.99 | D | 1.0 |
below 40 | F | 0.0 |
msg = (silence)
whoami = None
singularity v0.7 https://github.com/underground-software/singularity