Best Advanced Linux Kernel Training?
hdxia writes "Can anybody recommend a good Linux kernel training course? I have had some Linux kernel hacking experience, but would like to further harden and improve my understanding of the kernel. I expect the course would be advanced. You may say that the best method would be to dig into the kernel myself, but I really want to have a chance to discuss and learn all aspects of the kernel with an experienced instructor."
The very best course I have found is a ~32 hour DVD course on the FreeBSD kernel internals and: Advanced FreeBSD Kernel Code Walkthrough Videos I've never found anything more thorough.
Out here on the left coast the extension programs at the various University Of California campuses have some Linux Kernel classes. These tend to be developed and taught by engineers in the industry with a real working knowledge of the subject.
UC Santa Cruz Extension, http://www.ucsc-extension.edu/ has an "Linux Kernel Architecture and Programming" which looks like an intro course. You can take it online or as two Saturdays. There is also a Linux device drivers class which a once a week class and an Advanced Device Drivers class which is 4 Saturdays.
I checked the other campuses but they all seem to be summer schedule with a limited set of classes.
Red Hat also has a one week Kernel internals class which is a "hands on" which to me means a trade off of less information for some finger programing of the brain.
All of these courses seem to have an introductory flavor to them. But I suspect that you will learn a lot about all of the various areas of the kernel and how the different parts hang together. My experience as kernel hacker is that I have learned a lot about the parts I am interested in, but that there are many big areas of the kernel that I only have a superficial understanding of.
Hope this helps
RLH
Kernel hacking is taught at major universities, but under the title "Operating Systems".
We did no kernel programming in either the undergrad or graduate OS class at my undergraduate institution (I took both). It was all fairly low-level C systems programming. The undergrad OS class at my graduate institution (a top ten CS school) is the same way -- in fact, the OS class there is sometimes taught in Java. We did no kernel programming in any class I've taken so far, except for the graduate OS class at my graduate institution, and that was only because that was the project I happened to pick.
You learn OS theory, sure, and you almost need an understanding of a lot of that to know all of what's going on around the Linux kernel, but you're not going to learn about the Linux kernel in an OS class.
I may be a little biased since I've taught the courses... but...
If what you're looking for is the typical corporate 1 week training course, then IMHO you can't do much better. But! Let's be honest here, what can you get out of a one week course? If it's a serious course, like these are, you're going to get so much information that you'll have trouble staying afloat. You're not going to master these skills in a week. Depending on your programming skills and operating systems background you're looking at months to years before you're comfortable kernel hacking. What these courses can give you is a lot of solid coding examples to build your skills. But don't take my word for it, the code samples are available at ftp://axian.com/pub/RHD_SOLUTIONS. Oh, and of course the Red Hat info: http://www.redhat.com/training/developer/courses/
If you're not in the typical corporate time crunch mode, I'd definitely recommend college courses. Get some general background in OS design while you're at it if you don't already have it. Oh, and LUGs, lots of lugs have groups doing kernel hacking, not a bad place to start there either, plus LUGs don't cost anything!
I doubt your target for course is correct. Having been trough after-studies Operating Systems course like 20 years ago, centering on RSX-11, I still feel solid in concepts of today's OSes - Linux, too.
For good professional background, I would recommend you to get also good books. On OS principles themselves, and on Linux Kernel. I have been printing and binding myself freely distributable online David Rusling book "The Linux Kernel" (that over 10 years ago). It mentions even Alpha processor view of things - very good for broader understanding. Love this book, very special. Also in my library sits book of Linux kernel anatomy: too lazy to go upstairs for exact title, but it must have been published by SAMS, and is book analyzing specifically code, that makes Linux Kernel, there are sources of very first versions of kernel included too, which should help to understand evolution of kernel as final touch. And plenty of code and discussion of it. Author might be not available for classes, but book is serious alternative for such.
Good luck! OS things deserve your attention.
Servant of karma
I recently finish a course that was titled "Linux Kernel & Device Driver Programming". This is by far the best class that I have taken in my college career. The book for the course was Linux Device Drivers, 3rd Edition which is available for free now. The course was more of a guide. It did not teach how how to program the linux kernel but instead how to research and a general overview and methodology of the kernel. The teachers showed us some of the the code and designs and why these designs were chosen. I believe that the people that learn how to program the kernel have a certain mindset coming in. The people that learn the kernel always wish to know WHY something works and not that it just works. They are the kind of people that are constantly questioning others decisions as well as their own.
If you can take this class, CIS 4930/COP 5641 as FSU summer term, it is a great opportunity. You will learn how to research the kernel so that you can program at the kernel level. It is a intense course that you will spend 12-16 hours a day working on but it is VERY rewarding. Again, you will come out of this course knowing how to research the kernel and by no means am I telling you that you will know everything about the kernel.
I don't know how fair it is to single people out--they probably just want to get on with their work without being made examples of. But Val Henson (chunkfs), Mingming Cao (ext3/ext4), and Suparna Bhattacharya (aio, various fs hacking) are three that come to mind immediately.
And the fact that you may not know their names if you aren't a kernel developer doesn't mean much. I don't think most people realize how large the Linux kernel project is at this point....
I am a bit surprised with what I read, as I happen to know many academic institutions (UK based) that do teach the inner parts of the Linux kernel to final year undergrads. Some courses are a little bit out of date (teaching 2.4 kernel stuff) but one could get the basic idea and then find references (see latter paragraphs) to jump from 2.4 to 2.6 . In fact, I graduated from one of them 7 years ago and I do remember the long nights behind a source editor looking at kernel structures and making the kernel panic in all sorts of ways :-P .
:-) .
However, I would agree that the C programming skills are in a downturn, something reflected by the fact that most courses are geared towards application programming and systems programming (not the digital electronics and the C to interface to microcontrollers) seems to be heading towards a new area51 tag
Anyways, to respond to the original question, I would say, from my own humble experience, that kernel programming is not something that you could digest easily, even in a semester course, especially in your final year (I am not trying to put you off, read on). Not only because, as correctly said, there is relative lack of intermediate C programming skill in the majority of uni courses. Even if you were an intermediate C programmer, there is too much to grasp, from OS theory, down to programmming style and the way things are done in Linux (there is a different C programming style for applications, and a different one for kernel system calls). So, what to do to overcome this issue:
1)Make sure you get your hands on:
i) Linux Kernel Development (2nd Edition) by Robert Love
ii)O Reilly Practical C Programming, the 3rd Edition.
iii)A 2.6 based linux kernel distro.
2)Start with Robert Love's book. Read chapters 1-4, up to the point you understand the theory behind system calls.
3)Make sure you then read systematically the C programming book, especially the chapters about pointers, structures and linked lists (advanced pointers). At the same time, make sure you get frequently into the process of compiling your own kernel.
At this point, continue with the rest of the chapters of Robert Love's group. THEN it is the right time, when you have an idea, to look for a course, and you will get a lot more from it, having done your reading. Make sure to get in touch with your local LUG (Linux User Group). There must be somebody there that shares your interests that can inform you about courses or assist you and others to go deeper into the kernel.
GM
http://www.cs.uky.edu/~raphael/courses/CS585.html
I think this is one of the best Linux kernel training courses you can get anywhere.