Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I write a kernel module which has initialize and end function. I want one more function and want to call it from the user space process at any time i want.

Is it applicable ? If so, how ?

I am working on CentOS 5.2 and custom kernel, patched from linux 2.6.18.

EDIT: To make clear, I want to write a function into kernel module and call this function from the regular source.c file.

share|improve this question
2  
To call some function in your module you would have to create a custom system call, that is the only way of directly calling into the kernel. What exactly are you trying to do? –  vonbrand Mar 12 '13 at 17:14
    
I try to use WBINVD instruction, and i want to trigger it from the userspace. This instruction is the only one that is need for our benchmark research. –  ykulah Mar 12 '13 at 19:31
    
What does that instruction do? Is it privileged in some way that you need to run it in the kernel? What exactly are you benchmarking, isn't there a much less invasive way of doing that? –  vonbrand Mar 12 '13 at 19:43
    
It writes the dirty cache lines to the memory and invalidate all cpu cache. My aim is to count the cache miss/hits. Yeap, this is a privileged instruction, thats why i am trying to write a piece of kernel code. –  ykulah Mar 12 '13 at 19:48
    
Isn't it enough to run some random stuff before your benchmark, or make it sizeable enough that "leftover cache" effects aren't an issue? –  vonbrand Mar 12 '13 at 19:53

2 Answers 2

up vote 1 down vote accepted

Doing a kernel module that can use the /proc filesystem sounds like it might work for you. IBM developerWorks has an article on that topic. I worked through the code a few years ago, and it worked back then. The article is dated 2006, and seems to apply to Linux 2.6 kernels.

The problem I can foresee with using "files" in the /proc filesystem to get your module to do its work is that an open/read/close style API probably doesn't match what you want to do. You might have to use an open() on a /proc file to mean "execute WBINVD" or something unobvious like that.

share|improve this answer
    
I read the article but my patched kernel prompts some warnings about the vmlinux - Section mismatch. what can be the reason ? –  ykulah Mar 19 '13 at 9:22
    
I do not use /proc file system for the solution because of the timing problem. But I read the article and i am sure that /proc did the job unless you have a timing restriction. –  ykulah Mar 23 '13 at 22:38

simplest thing to do is to have a character device, and write to that device, then the driver's read gets called and do the processing in the read callback of the character device in kernel.

share|improve this answer
    
Could you give an example which would help the user asking the question as well as people who have the same problem? –  MaxMackie Mar 14 '13 at 12:00
    
here's one: tldp.org/LDP/lkmpg/2.6/html/x569.html. but can be changed to work on the latest kernels (3.5 e.t.c) –  Devendra Naga Mar 14 '13 at 16:37

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.