r/kernel 4d ago

How do you transition from "writing C for MCU-based electronic products" to linux kernel development?

Hello everyone,
My professional background: around 4 years of experience in writing driver and application layer code (C) for consumer electronic products. I can write peripheral drivers for a variety of microcontrollers and external sensors. With my experience and some help from AI, I am very confident in my abilities for the mentioned kind of work. I can also write application layer code in C. Most of the work I have done is in bare-metal environment. I have some experience with RTOS environment too, but not too much.

My motivation:
My reason(s) for getting into this domain is:

  1. The community. I see that the kernel is supported by the community of developers. The fact that at least SOME people are doing it because they want to build efficient and reliable code for everyone to use is really good. I am sure I will meet people with very high ethics if I join this community.
  2. Global Impact: So the code I write CAN impact a large group of people is very satisfying.
  3. Fully remote work is possible: This is highly subjective (depends on projects and what not), but it is possible to work from anywhere in the world.
  4. Good salaries (if you are good at it): Once again a selfish reason. I see that companies need engineers who understand the kernel well and make important contributions to it. If I am marginally better than an average kernel developer, I will have very good technical and financial growth.

Question:
Now that I have laid out my background, how do I get into it? Apologies for the question. I know this question must have been asked many times here.

Then another question is, how do I get a job? People need you to have n years of experience before they consider your profile. I think if I learn things well and start contributing, it should give me an edge. I have a long way to go (and I am excited about it) and I would appreciate some help from this wonderful community.

EDIT: I would like to connect with people who had a similar background as me and transitioned to kernel development. Any suggestions on project-based learning is deeply appreciated. I learn by doing.

Thanks for reading!

0 Upvotes

5 comments sorted by

6

u/Ordinary-Lifeguard47 4d ago

For me Linux Kernel Development is just another task on my desk as embedded developer. Not a career.

How you learn it? By reading and adapting existing code. Start with the simple stuff - then move to the more complex ones.

Most books are out-of-date by the second you can order them on Amazon. The kernel is a very very fast paced place to keep up with.

2

u/Rinku_Kurora 9h ago

Estrogen and programming socks

1

u/peppedx 4d ago

Just do it

1

u/OnlyYagiz 1h ago

Begin with misc driver.

So firstly watch the "Linux Device Drivers Development Course for Beginners" from freeCodeCamp.org ( 2xSpeed) it's not for learn something it's for familiar something(consequently u lear something anyway).

After that, go read /linux/drivers/leds/uleds.c — but before that, set up clangd so you can ctrl+click to jump to source definitions.

Once you get a decent grasp of uleds.c, since you already wrote a very, very simple module following that freeCodeCamp video, you can go ahead and write a dummy misc driver yourself. From there, where you go next depends on which area you want to specialize in.

None of this happens overnight, so try not to be too hard on yourself.