LinuxQuestions.org
Download your favorite Linux distribution at LQ ISO.
Go Back   LinuxQuestions.org > Forums > Linux Forums > Linux - Software > Linux - Kernel
User Name
Password
Linux - Kernel This forum is for all discussion relating to the Linux kernel.

Notices


Reply
  Search this Thread
Old 11-14-2017, 12:01 PM   #1
adhdluke
LQ Newbie
 
Registered: Nov 2017
Location: Wisconsin, USA
Distribution: Ubuntu MATE 16.04
Posts: 4

Rep: Reputation: Disabled
Where to start Linux development?


I'm 16, and I'm interested in learning C and working with the Linux kernel. I don't know where to start, however. Any suggestions such as books, guides, what programming languages to learn, etc. would be greatly appreciated.
As a side note, do you think it would be worth it to study something in college related to this? Can I get a well-paying job working with the Linux kernel?
 
Old 11-14-2017, 06:08 PM   #2
smallpond
Senior Member
 
Registered: Feb 2011
Location: Massachusetts, USA
Distribution: CentOS 6 (pre-systemd)
Posts: 2,853

Rep: Reputation: 757Reputation: 757Reputation: 757Reputation: 757Reputation: 757Reputation: 757Reputation: 757
This page has a list of the employers who are contributing to the Linux kernel:
https://lwn.net/Articles/736578/

The best way to start is to download the source and start at the README file in the top level directory. Once you have built and run your own kernel you can start writing new protocols, drivers, filesystems, schedulers or whatever you are interested in. Download a copy of Linux Device Drivers, much of which is still up to date.
https://lwn.net/Kernel/LDD3/
 
1 members found this post helpful.
Old 11-14-2017, 09:22 PM   #3
frankbell
LQ Guru
 
Registered: Jan 2006
Location: Virginia, USA
Distribution: Slackware, Debian, Mageia, and whatever VMs I happen to be playing with
Posts: 12,872
Blog Entries: 18

Rep: Reputation: 3340Reputation: 3340Reputation: 3340Reputation: 3340Reputation: 3340Reputation: 3340Reputation: 3340Reputation: 3340Reputation: 3340Reputation: 3340Reputation: 3340
A search of c programming tutorials will turn up lots of useful links.
 
Old 11-15-2017, 02:26 AM   #4
!!!
Member
 
Registered: Jan 2017
Posts: 616

Rep: Reputation: 235Reputation: 235Reputation: 235
Cool Just DO it

Welcome to LQ. Jump in!
You have 9minutes from reading this,
to begin using Linux on your Win10 PC.
Seriously; I'm not kidding!!! Study bottom-up

Focus on 'soft skills' also: www-research & try things.
Let us know what you accomplish.
 
Old 11-15-2017, 09:26 AM   #5
dugan
LQ Guru
 
Registered: Nov 2003
Location: Canada
Distribution: Slackware
Posts: 7,708

Rep: Reputation: 2986Reputation: 2986Reputation: 2986Reputation: 2986Reputation: 2986Reputation: 2986Reputation: 2986Reputation: 2986Reputation: 2986Reputation: 2986Reputation: 2986
Last time I checked, this looked like a pretty good resource:

https://kernelnewbies.org/
 
1 members found this post helpful.
Old 11-15-2017, 10:04 AM   #6
sundialsvcs
LQ Guru
 
Registered: Feb 2004
Location: SE Tennessee, USA
Distribution: Gentoo, LFS
Posts: 8,697
Blog Entries: 4

Rep: Reputation: 3028Reputation: 3028Reputation: 3028Reputation: 3028Reputation: 3028Reputation: 3028Reputation: 3028Reputation: 3028Reputation: 3028Reputation: 3028Reputation: 3028
It can also be instructive – perhaps more instructive – to find some other kernel-developer who is now working in (or, has worked in) an area that is of particular interest to you, then "shadow" him or her by studying the list of commits that are related to the particular ticket, or work-order, that the developer was pursuing. Read the description that the developer was working on, then use comparative views (in an appropriate programmer's editor) to compare the source-code "before" and "after" the change.

The work is tedious and far more difficult than it looks. Therefore, start small, don't set big initial aspirations for yourself, and remember that "you can learn a lot by watching." The technique that I have just described is a way of "watching" the activities of the team from a distance.

Pay close attention to the entire development, testing, and troubleshooting process. This is a very mature software-development team at work, using (and creating) "best practices."

Last edited by sundialsvcs; 11-15-2017 at 10:05 AM.
 
1 members found this post helpful.
Old 11-15-2017, 08:35 PM   #7
adhdluke
LQ Newbie
 
Registered: Nov 2017
Location: Wisconsin, USA
Distribution: Ubuntu MATE 16.04
Posts: 4

Original Poster
Rep: Reputation: Disabled
Thank you guys for helping me get started with this. I'm already able to do basic math in C. I wrote a program that takes two float variables as input and divides them, then displays the output. I know it's probably one of the most basic things I could possibly do, but it's a start, and it's the most progress I've made in trying to learn programming so far.
I've found the tutorial here http://www.cprogramming.com/tutorial.html to be very helpful, and it feels like it covers a lot more than other tutorials in a shorter time. It fits my pace, as I can be rather impatient at times.
 
Old 11-15-2017, 09:26 PM   #8
jefro
Moderator
 
Registered: Mar 2008
Posts: 17,186

Rep: Reputation: 2562Reputation: 2562Reputation: 2562Reputation: 2562Reputation: 2562Reputation: 2562Reputation: 2562Reputation: 2562Reputation: 2562Reputation: 2562Reputation: 2562
https://www.kernel.org/ has some resources too.
 
Old 11-16-2017, 08:46 AM   #9
onebuck
Moderator
 
Registered: Jan 2005
Location: Midwest USA, Central Illinois
Distribution: SlackwareŽ
Posts: 12,899
Blog Entries: 27

Rep: Reputation: 2186Reputation: 2186Reputation: 2186Reputation: 2186Reputation: 2186Reputation: 2186Reputation: 2186Reputation: 2186Reputation: 2186Reputation: 2186Reputation: 2186
Moderator response

Moved: This thread is more suitable in <Linux-Kernel> and has been moved accordingly to help your thread/question get the exposure it deserves.
 
Old 11-17-2017, 02:06 AM   #10
!!!
Member
 
Registered: Jan 2017
Posts: 616

Rep: Reputation: 235Reputation: 235Reputation: 235
What Linux distro are you doing the C programming on?
 
Old 11-17-2017, 08:14 AM   #11
Mill J
Member
 
Registered: Feb 2017
Location: 127.0.0.1 Sweet 127.0.0.1
Distribution: Several Ubuntu based OS, LFS,Tahrpup, Quirky on Rpi and many others
Posts: 232

Rep: Reputation: 42
I recommend getting a hard copy of Sam's Teach Yourself C, the In 21 days version is a little older but you can pick it up cheap used. You can also get newer versions. If you do get this book I recommend leaving the source code CD in the book, you will not learn much copy and pasting stuff. You have to get down to the nitty gritty.

C can be very rewarding and it's not hard to upgrade to C++(some people think downgrade).

Have Fun!
 
Old 11-21-2017, 08:27 AM   #12
giis
Member
 
Registered: Nov 2013
Location: Third Rock from Moon
Distribution: RPM/DEB based and LFS
Posts: 65

Rep: Reputation: Disabled
For Kernel programming , I like this http://eudyptula-challenge.org/
 
Old 12-03-2017, 09:32 PM   #13
AwesomeMachine
Senior Member
 
Registered: Jan 2005
Location: USA and Italy
Distribution: Debian testing/sid; OpenSuSE; Fedora; Mint
Posts: 3,273

Rep: Reputation: 587Reputation: 587Reputation: 587Reputation: 587Reputation: 587Reputation: 587
Before you do anything, pick up a book that teaches object-oriented programming in general, so you can learn the basics. It will really help you design programs intelligently, and instruct in a general way how to best solve individual programming problems.

If you start out knowing the basics, it's like knowing how to sound-out new words. But if you start by first learning a programming language, it's like sight-reading. You can't determine anything beyond what you know.

The majority of programming today is OO (object-oriented). That means programs are collections of objects. But once an object is written and documented, it can be used over and over by different programs.

Objects have properties, events and methods. But some languages don't support all three of those for every object. Objects can also inherit properties of other objects of the same class. Objects of one class cannot access objects of another class unless they use methods of the first class marked "public".

Programming code segments do one of three basic things: sequence, selection or iteration. A sequence is a list of commands done in the order they appear. Selection uses one or more test conditions to determine which of two or more actions to perform.

Iteration is a loop of code that processes data repeatedly until you tell it to stop (usually hard-coded into the program).

Most of learning a language is learning how to use the millions of objects available instead reinventing the wheel every time you need to do something major. For instance, when I was in school I wrote an object that I couldn't find anywhere. It converted from one numeric base to another.

It took me a while to devise the algorithms, which are still in use now, but I did. And I used the object in a program to convert numbers from one base to another. For instance, 0100 in base 2 is 4 in base 10. 1111 in base 2 is f in base 16. But some machines at that time used base 32, so my program went up to base 36.

Now, you learned that stuff without learning any languages. But you're way far ahead of some people who have been programming for a while. There will always be a market for guys like you. By the time you're done with college you'll be a phenom.

Just stay out of trouble along the way. The founder of Debian died in a drunken episode. After you learn how OO works, then start reading the kernel code tree, especially comments in the code, and the Documentation directory.

You can also do practice exercises to be found everywhere online. But I think they're a waste of time unless you have a lot of it; time that is. After you learn one language, you can move to the next one much more easily, not like learning foreign language, because computer languages all do the same things.

Just never become satisfied with how good you are, even if you're the best. Always try to do something better until it's perfect, or 'til you're tired of it. Good luck. May God lead your way. If all else fails, pray. God answers to those who listen.
 
1 members found this post helpful.
Old 12-03-2017, 10:22 PM   #14
Mill J
Member
 
Registered: Feb 2017
Location: 127.0.0.1 Sweet 127.0.0.1
Distribution: Several Ubuntu based OS, LFS,Tahrpup, Quirky on Rpi and many others
Posts: 232

Rep: Reputation: 42
Cool

Quote:
Originally Posted by adhdluke View Post
I'm 16, and I'm interested in learning C and working with the Linux kernel. I don't know where to start, however. Any suggestions such as books, guides, what programming languages to learn, etc. would be greatly appreciated.
As a side note, do you think it would be worth it to study something in college related to this? Can I get a well-paying job working with the Linux kernel?
Actually probably one of the best ways to start is to figure out how it works,how to build/configure, and what all you can do with it.

I'd highly recommend running through LFS http://www.linuxfromscratch.org/lfs/ you'll get to build Linux from source and mess with configure/compiling the kernel too. It sounds hard but it's not really.

Let us know what works...And have FUN!
 
Old 12-04-2017, 02:24 AM   #15
pan64
LQ Guru
 
Registered: Mar 2012
Location: Hungary
Distribution: debian/ubuntu/suse ...
Posts: 9,895

Rep: Reputation: 2921Reputation: 2921Reputation: 2921Reputation: 2921Reputation: 2921Reputation: 2921Reputation: 2921Reputation: 2921Reputation: 2921Reputation: 2921Reputation: 2921
Hm. If you want to learn C, do not start with kernel or lfs, but something like "hello world" and other simple apps.
I you were familiar with the process of build/compile/link/configure of an app you can definitely go further.
 
  


Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off



Similar Threads
Thread Thread Starter Forum Replies Last Post
How to start "REAL" Linux Driver Development? engmeshmesh1 Programming 2 03-16-2015 06:27 PM
Difference between device driver development and linux application development tennythomas Linux - Hardware 3 10-26-2011 08:52 AM
Which laptop to start linux embedded development mac or windows based? epsilon30 Linux - Embedded & Single-board computer 2 03-24-2010 03:31 PM
Newbie at OS Development: Where to start? Exeis Linux - Kernel 3 10-22-2007 09:58 PM

LinuxQuestions.org > Forums > Linux Forums > Linux - Software > Linux - Kernel

All times are GMT -5. The time now is 10:34 PM.

Main Menu
Advertisement
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration