Hello,
As mentioned in the header, I have no idea where to start learning about the Linux kernel. I feel like I’m even worse than a beginner because I don’t have any knowledge of Linux programming, kernels, drivers, etc.
I do have a solid understanding of the C programming language in Ubuntu environment.
I have planned to enroll in an academy that specializes in teaching Linux, covering topics from system programming to device drivers and Yocto.
Here is the chronological roadmap of the courses offered by the academy:
-
Mastering Linux System Programming
-
Mastering Linux Kernel Programming
-
Embedded Linux Drivers & Yocto
My question is, where should I start learning to get a good grasp of the basics before moving on to Linux system programming? Your suggestions and tips would be very helpful in my learning journey.
What's Up? I'm a newbie on this. So that I'm looking for where to start learning and developing the Linux Kernel ( I'm now studying C). Do you counsel any sites, books, courses, or resources to enhance my skills in Kernel Development?
Videos
Recently, I have developed an interest in kernel development but am finding it challenging to know where to start. I am familiar with C/C++, have studied operating systems, and have some knowledge of assembly language. Please help me to get started with kernel development and suggest some video courses if they are available.
I’m graduating in May 2025 in Computer Engineering. I have created kernel modules for Linux, created an os from scratch with a lot of features like (rw vhs file system, round robin scheduling, paging, kernel, drivers, terminal and system calls), I know how Linux works for the most part, I’ve worked with Linux a little in my internships through kubernetes and shell scripts. I wanted to know what it takes to land a SWE kernel engineer position at a place like redhat or Microsoft.
Hi there, so I jut started learning about the Linux kernel. I have setup a GDB environment and want to learn more about the system internals of the kernel. Basically, I am interested in taking apart the the machine and putting it back together. All while understanding what is going on internally. Any advice for someone like me? Somebody who wants to learn how the kernel works. Is GDB even necessary?
Thanks guys, you all have been lifesaver for me.
- E
Hi fellas. I am a graduate in computer science and I wish to learn more into operating systems and want to contribute to Linux kernel. I learnt about Linux system programming from a book by ROBERT LOVE and have developed a mini Linux terminal using the knowledge. Now how should I move further.
-
What books do I have to read next ?
-
Any Coursera or udemy or any other online videos available to understand?
-
How should I apply the book knowledge into practical cases?
Was looking for online courses to learn about kernel development and stumbled across this offered by the Linux Foundation:
https://training.linuxfoundation.org/training/linux-kernel-internals-and-development/
I'm enrolled in CS program at my university and while I'm getting a lot out of it, I really want to get into kernel development and it's not really taught at my school. This class sounds like exactly what I'm looking for, but 3k is extremely steep (3x what I pay for a typical Uni class). Can anyone here vouch for this course? Is it substantial and informative? Will it make a difference on a resume? I figure if you get enough out of the class and go on to get a career in linux development then the course technically pays for itself
So I'm a 13yo looking to learn the very basics of kernel development, withought any jargon whatsoever. I know some C and python but forgot quite a lot. What's the best online resource to learn kernel development. I won't be able to read physical books. Online resource, please.
I found "Linux Kernel Internals and Development" training in Linux Foundation. The cource outline is good for me. But it doesn't fit with my schedule and location.
Are there any online(self-paced) course to learn linux kernel internal for developing linux kernel inside?
Thanks.
For a few years now I've wanted to be a Linux kernel contributor and recently I've really committed myself to doing it. I've finished the Linux Foundation intro to kernel dev course, built and installed my own kernel, messed around with configurations and print statements, but actually programming a driver or making other changes is still daunting to me.
For my background, I've taken an OS and computer architecture class, been working as a Java dev on a Redhat system for a few years, and I've kept my C programming skills fairly sharp. My end goal is I want to transition my career from enterprise dev to kernel dev, I'm mostly interested in the graphics driver space (saw a few jobs related to Khronos and Vulkan/OpenGL, I really enjoy graphics programming and interfacing with the GPU) but also RTOS, embedded, and just any drivers really.
Is a class like https://www.ucsc-extension.edu/courses/linux-kernel-drivers/ a good idea? I also already have an O'Reilly account, so have access to all of the books in the side tab. I'm mostly interested in learning as quickly as possible, and the $750 for the class is not really a problem for me, I'm curious if anyone has learned in this way or if it's just a waste of time and money compared to just focusing on kernel hacking and/or reading books on kernel dev.
Any feedback is welcome, thank you
I think it depends on how best you learn. If a class setting or reading books work for you then do that. There's also resources like https://kernelnewbies.org/ to get people started.
The O'Reilly books are well written though a bit out-of-date. The kernel driver book is the best of them but some of the API calls have changed since it was published. The kernel architecture book is so old that I don't trust it as a resource.
I found once I got to a certain familiarity with the kernel I stopped relying on books and I just grep through the code to find what I need. This website is also invaluable for tracing where things go or what they do: https://elixir.bootlin.com
I totally understand that the Linux kernel might be "scary" to start with, if you have no experience as a kernel developer. It's a big and complex project. If you don't feel like jumping directly into it, you might want to take a look at the osdev community:
-
https://wiki.osdev.org/Main_Page
-
https://forum.osdev.org/index.php
It's a wiki with plenty of tutorials about how to do anything (bootloaders, memory management, drivers, etc.). Plus, there's a nice forum where to ask questions and discuss with people. Many people there write their own kernel for mostly for educational purposes and fun, but sometimes also because they wanna innovate. You might take a look a some of the many kernel projects made by those people: https://wiki.osdev.org/Projects.
Among the many projects, if you're interested in Linux-like systems, you might wanna take a look at Tilck, my own project, which is a small semi-educational kernel compatible with Linux at binary level: https://github.com/vvaltchev/tilck
Otherwise, if you really want to start directly with Linux, I'd recommend reading "Linux kernel development" by Robert Love. After which, you might read a more practical book about writing drivers (like "Linux Driver Development for Embedded Processors - 2nd Edition"). In the meanwhile, start playing with the kernel by writing small changes like the ones in the "Eudyptula challange": https://github.com/agelastic/eudyptula. After that, finally move to the kernel's documentation: https://www.kernel.org/doc/html/latest/ and start contributing.
It will be a tough road, requiring a great amount of time and patience, but you'll have a lot of fun!
Hi Folks,
I think come from a very uncommon background. I'm an Econ Undergrad that recently got interested in understanding how Linux kernel works. Could someome tell me from where should I start studying? Maybe give me some sort of roadmap.
For context, I have some good experience with coding (as a hobby, 3+ years), but mostly python and webdev stuff. I have been studying C and C++, Data Structures and Algos, and I have very basic understanding of Memory, CPU, etc.
My goal is to understand how kernel optimizations are made in High Frequency Trading firms.
thanks!
My background is in web backend development and I'm used to learn (primarily) by reading technical documentation. As a Linux user I'm trying to learn how the Linux kernel work, I'm trying to write some drivers in order to learn by doing. I'm finding it tough as the documentation looks kind of incomplete to me. At this point I'm not sure if the only real way is to read the source code or if I'm doing something wrong.
I've got an interview coming up as a systems engineer for one of the FANG companies. The glassdoor interview reviews all mention internals and then also the prep guide say Linux internals. I'd consider myself ok with Linux. I know there are some people out there that would blow my mind away. I grabbed a Linux kernel development book, but there is just so much information.
Some topics that people have mentioned: sys calls, signals, virtual memory (my weakest), shell, file system,system perf troubleshooting.
You want to know how linux works? Build an LFS or Gentoo system.
Learn Linux observability tools:
http://brendangregg.com/perf.html http://brendangregg.com/ebpf.html http://brendangregg.com/usemethod.html
Syscalls:
http://man7.org/linux/man-pages/man2/syscalls.2.html https://strace.io/
Probably be good to learn about the scheduler as well:
https://www.kernel.org/doc/html/latest/scheduler/index.html
A ton of more stuff of course but that’d give you an edge.
Are there any good tutorials/books that you would recommend to go through to learn about the kernel?
Thanks!
Hello, I'm about to finish a book about C and I want to learn kernel programming, I have a few questions:
1- Do I have to do more projects/dive more into C before starting to learn kernel programming? Or will I be able to pick more experience along the way?
2- What subjects should I learn about before starting to learn kernel programming? Any book names? (e. g. Computer Architecture)
3- What is the best resource to learn kernel programming?
Currently I'm thinking about the Minix book, but I've heard a few people suggesting Operating Systems: Three Easy Steps. Which one is better?
As the title suggests I wanna really learn linux Operating System as a whole because most of the time I go on internet to find solutions to my software problems and I have seen myself copy pasting commands without understanding them and this frustrates me because many a times I break my system like that and then i don't know how to revert back from it and only way to work it out is to reinstall the system.
So anyone know how to start learning about linux kernel and bash shell
Please recommend me any courses, sites or books!!
Do you know of any advanced Linux course where the instructor talks about networking stack and kernel related things?