The course is intended for self-motivated students who are hungering for a deep immersion into kernel hacking. The students are assumed to have the conceptual knowledge of systems (architecture and OS) from CS 2200 . We will use Nexus-7 and the Android stack for the experimental platform. The course will be structured around a set of projects, each of which will involve some significant changes to the Linux Kernel which is at the base of the Android stack. Flavor of projects will include developing device drivers for onboard sensors in the Nexus-7 platform, scheduler, and memory manager. Using Android as the basis for this course is a deliberate choice since it is an open commercially supported software platform. Further, it is a complete software stack from kernel level mechanisms to higher level abstractions for robust application development.
Purpose:
The course is intended for self-motivated students who are hungering for a deep immersion into kernel hacking. The students are assumed to have the conceptual knowledge of systems (architecture and OS) from CS 2200. We will use Nexus-7 and the Android stack for the experimental platform. The course will be structured around a set of projects, each of which will involve some significant changes to the Linux Kernel which is at the base of the Android stack. Flavor of projects will include developing device drivers for onboard sensors in the Nexus-7 platform, scheduler, and memory manager.
Outcomes:
(Competency knowledge) Embedded system architecture; architecture of the Android software stack; high level abstractions in Android for robust application development (location management, transactional semantics, and notification management); and how the fundamental OS concepts (such as memory management, processor scheduling, IPC and interrupt handling, etc.) are managed in the Android platform
(Competency knowledge) App development with Android API
(Competency knowledge) Details of the Android system stack; Linux kernel internals
(Competency knowledge) Ability to navigate complex large software systems
(Competency knowledge) Ability to modify and integrate into large complex software systems
(Competency knowledge) Ability to test and debug significant changes made to large complex software systems
(Competency synthesis) Development of significant pieces of software systems at the OS level and integrate them into a production OS (Linux)
(Competency accomplishment) Deep expertise in developing large C code bases through the projects
(Competency accomplishment) Experience in producing good documentation for the code developed as part of the course projects
(Competency accomplishment) Ability to work as a team in large software development projects
(Competency accomplishment) Ability to understand and present the intricacies of complex software systems to peers
CS 2200 Introduction to Systems and Networks (or equivalent level of OS knowledge and C programming experience)
Primary sources:
1. Linux Kernel Development, Third Edition, Robert Love, (Click here to access the textbook for free as a GT Student, you need to access the full content via GT library online access; click here for Amazon page for the book)
2. Embedded Android, Karim Yaghmour, (Click here to access the book, one needs Safari library subscription to see the full content)
Secondary sources:
3. Linux Device Drivers, Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman, (Click here for free access to the online edition).
4. Understanding the Linux Kernel, Daniel P. Bovet, Marco Cesati, (Click here for the Amazon page for the book)
5. Understanding The Linux Virtual Memory Manager, Mel Gorman, (Click here for free access to the online edition)
If you have not already done so, please choose a partner to work with for the BIG class projects, which will start in the last 10 weeks of the semester.
What you should have (from the very first class which is on January 9):
What we will provide:
[Note: if you damage it any manner, you are responsible for replacing it. So guard it with your life!!]
There will be very little in-class lecturing by the professor. The class is structured the way an industry team would work on a large product development project. The stress is on peer learning from fellow students. The instructor and the TAs (two PhD students who have kernel experience) will be there throughout to help the students learn. Every class period will be used for three purposes (varying time allotment depending on the need of the week):
1. For students to work on the projects, debug, test, share experiences, seek peer help, etc.
2. For brainstorming on novel ideas based on experiences of students using mobile platforms to come up with big project ideas.
3. For students (by prior assignment by the instructor) to explain some specific subsystem in the Linux kernel to the entire class using appropriate diagrams and walking through the kernel code.
1. You have to be present in every class for the entire duration. Personal commitments will not be accepted as excuses for missing a class. The only exceptions will be institutional commitments and/or health-related absences.
2. All the assignments have to be completed fully and on time. Partial work gets NO CREDIT.
1. There will be 5 projects, one in each week for the first 5 weeks. These projects have to done individually, of course with consultation from peers as much as you need. The project will be posted to t-square on Monday of every week. The students should review the project before coming to class on Wednesday and be ready to start working on it in class. As explained in the course structure, the students will start work on the project in class. Each project has to be completed and submitted BEFORE THE CLASS MEETS AGAIN the following week. Here is a tentative list (subject to modification):
a. Project 1: Simple Hello world using the Android API (using Android SDK)
b. Project 2: Simple Hello world program implemented as a system call in Linux (using Android SDK)
c. Project 3: Design and implementation of a system call to generate various memory manager statistics from the Linux Kernel (using Android SDK)
d. Project 4: Design and implementation of a system call to generate various scheduler statistics from the Linux Kernel (using Android SDK)
e. Project 5: Design and implementation of a virtual device driver (using the existing ones in the kernel) in the Linux kernel (using the SDK first, and then flashing it to the Nexus-7 device)
2. There will be TWO BIG projects, one during the second 5 weeks, and the second in the last 5 weeks of the semester. As mentioned in the course structure, we will develop big project ideas during the first 5 weeks. The big projects will be done in groups of 2. Not all the groups will work on the same project. Here are some possibilities:
a. Location-based file system for a photo store and/or a video store
b. Modifications to device driver for the wireless protocol stack
c. Modifications to the Multitouch device driver
d. Novel page buffer management techniques commensurate with the characteristics of flash storage
e. Novel scheduling algorithm for gaming applications
f. Novel kernel mechanisms and their implementation for HTTP DASH video streaming
The expectation is that the students will review reading materials assigned to the class (as instructed by the professor) ahead of the class. There may be short in-class quizzes (using Turning Point interactive system) to ensure that such review has been done by the students. There will be no exams.
We will give you very clear guidelines on software engineering principles to be adhered in code development. Remember you are working as though you are part of a product team in a company...not doing just a course project. You have to adhere to such principles in all your projects.
There are only two letter grades for your performance in the entire course: A or F. To earn an A in the course, you have to do the following: