how to implement new scheduling scheme in linux kernel - c

I am new to Linux kernel development
can anyone tell me how to implement a new scheduling scheme in linux kernel?
Which files do I need to change etc . A step by step guide would be helpfull

A step by step guide? no problem boss.
read Process Scheduling.
How to create a new Linux kernel scheduler
you can set your zero task to get familiar with these function list:

Related

when i edit the linux kernel code, what is the process of building and running the modified kernel?

I am learning how to write some code in the Linux kernel, and i would like to start practicing writing code in the kernel, but my question is what is the process of building and running the modified kernel?
should I just each time, when I modify the kernel code, to recompile the kernel, reinstall it on my machine and then reboot my machine, or is there another way of doing this process in the real life, in the industry?
Well, easiest is if you can have the code you're modifying in a module, then you can remove the old version and load in the new version.
Alternatively, you could run the kernel in a virtual machine inside your host computer! That way you need to only reboot the virtual machine, not the entire physical computer.

is there any c program API to synchronize the system clock to ntp server?

I'm making a C library software that needs to synchronize system clock with remote NTP server. For now, I'm using "system" command to call the console "ntpdate id.pool.ntp.org" command.
so using of "system" is not proper so there is any other way do the synchronize the clock please help me.
No: The C standard library knows nothing about NTP.
Yes: There are libraries that implement what you want. However, software recommendations are out of scope of StackOverflow. You need to look for them yourself. A good web search tool is your friend.

Where to start with Linux Kernel Modules?

A little background, I'm a CMPE Student currently in an Operating Systems class. I have some basic knowledge of C coding but am more comfortable with C++ (taken about 3 semesters of that). Other than that, never had any other formal training in coding. Also, I've got a basic understanding of the linux environment.
I am working on a project that requires me and my team to code a linux kernel module that can do the following:
echoes data passed from user-level processes by printing the data received to the kernel log
is able to pass data from one user process to another.
must be possible to use the kernel module as an inter-process communication abstraction. module should provide for situations where a sender posts data to it but no receiver is waiting.module must cover the situation where a receiver asks for data but there is no data available.
module must cover the situation where a receiver asks for data but there is no data available.
must be a limit in the buffer capacity in your module.
Now I don't know how difficult this seems to those with a background in programming, but this seems like an impossibly complicated task for someone in my position.
Here's what I've done so far:
Coded, Compiled, Inserted, and Removed the basic "hello world" linux kernel module successfully
Read through about the first 4 or 5 chapters of The Linux Kernel Module Programming Guide
Read through a few stackoverflow posts, none of which seem to be able to direct me to where I need to go.
So finally here's my question: Can someone please point me in the direction that I need to go with this? I don't even know where to being to find commands to use for reading in user-level process data and I need somewhere to start me off. TLPD was great for insight on the topic but isn't helping me get to the point where I will have a workable project to turn in. In the past, I would learn off of reading source code and reverse engineering, is there anywhere I can find something like that? Any and all help is appreciated.
-Will
I've found that the Linux Kernel Module Programming Guide is a pretty good resource. From the sounds of it, something like a character device might work best for your purposes, but I'm not sure if you have other constraints.
Another direction I might consider (though this could be a bad path) is to look at examples in the Linux kernel for a kernel module that has similar functionality. I don't have a good example offhand, but perhaps look through /drivers/char/.
What you describe is pretty much the same as a pipe.
Read chapter three of Linux Device Drivers.
(But don't just copy the scull pipe example …)

adding a sleep / timer in a kernel module

I need to do task at regular intervals in a kernel module after the module has loaded. How do I achieve that. The examples on the web show a hello world in the init_module and exit_module. I have not seen any literature on how to code regularly occuring events inside a kernel module. Can someone please provide inputs?
Thanks
Have a look at this article for Linux: Kernel APIs, Part 3: Timers and lists in the 2.6 kernel
It has an example module that uses both the simple timer API, and highres timers.
Take a look at chapter 7 of LDD:
http://lwn.net/Kernel/LDD3/
Take a look at this timer tutorial for linux kernel

Creation of pseudo device-node under /dev

Question:
How to (where to find additional information i.e., examples) programatically create a pseudo device-node under /dev from a kernel module?
From your question I'm guessing your talking about Linux (since you are talking about kernel modules). In that case I'd strongly recommend reading Linux Device Driver. I'd recommend looking at chapter 14 to understand better how device work.
It should also be noted that in most current desktop and server distribution of Linux, udev is responsible for creating entries in /dev. You can configure udev with rules that allow you to create your the device node with a specific name and location. In the embedded world it might be mdev with busybox that's responsible for populating /dev or even it could simply be the deprecated devfs.
Linux Device Driver is certainly a must read. However, I would start with chapter 3, since it is a step by step example on how to create a char device driver.
The kernel API is a moving target. More than often, you will discover that some example that used to compile against a previous version of the kernel generates a warning or an error with a newer version. In this situation, being able to browse through the sources without getting lost is very useful.

Resources