Iterating through all the processes in a module
Hi, (for learning purposes) I would like to iterate through all the tasks in a module and output different information about them. For this task I need to lock the list of all tasks (need I?). I've seen some example in the kernel code which lock tasklist_lock. However this symbol cannot be used by modules. Its export was removed by c59923a15c12d2b3597af913bf234a0ef264a38b commit. Is there any other way I can lock the list of tasks then? Thanks
On Tue, Feb 07, 2012 at 06:45:24PM +0100, Arokux B. wrote:
Hi,
(for learning purposes) I would like to iterate through all the tasks in a module and output different information about them. For this task I need to lock the list of all tasks (need I?). I've seen some example in the kernel code which lock tasklist_lock. However this symbol cannot be used by modules. Its export was removed by c59923a15c12d2b3597af913bf234a0ef264a38b commit.
Is there any other way I can lock the list of tasks then?
Don't do such a foolish thing? :) Seriously, don't make your code a module, just build it into the kernel. greg k-h
Dear Greg, thank you very much for your quick reply. Having my code as a module I can trigger its execution (load a module) and disable it (unload a module). How can I achieve this if the code is inside the kernel? One possibility I see is adding an entry in the procfs. Regards On Tue, Feb 7, 2012 at 8:17 PM, Greg KH <gregkh@linuxfoundation.org> wrote:
On Tue, Feb 07, 2012 at 06:45:24PM +0100, Arokux B. wrote:
Hi,
(for learning purposes) I would like to iterate through all the tasks in a module and output different information about them. For this task I need to lock the list of all tasks (need I?). I've seen some example in the kernel code which lock tasklist_lock. However this symbol cannot be used by modules. Its export was removed by c59923a15c12d2b3597af913bf234a0ef264a38b commit.
Is there any other way I can lock the list of tasks then?
Don't do such a foolish thing? :)
Seriously, don't make your code a module, just build it into the kernel.
greg k-h
A: No. Q: Should I include quotations after my reply? http://daringfireball.net/2007/07/on_top On Wed, Feb 22, 2012 at 02:07:22PM +0100, Arokux B. wrote:
Dear Greg,
thank you very much for your quick reply.
Having my code as a module I can trigger its execution (load a module) and disable it (unload a module). How can I achieve this if the code is inside the kernel? One possibility I see is adding an entry in the procfs.
I don't see what procfs has to do with this, please explain. And as you said this was for "learning purposes", then just build it into the kernel, there's no need for it to be a module. good luck, greg k-h
On Wed, Feb 22, 2012 at 8:23 PM, Greg KH <greg@kroah.com> wrote:
A: No. Q: Should I include quotations after my reply?
http://daringfireball.net/2007/07/on_top
On Wed, Feb 22, 2012 at 02:07:22PM +0100, Arokux B. wrote:
Dear Greg,
thank you very much for your quick reply.
Having my code as a module I can trigger its execution (load a module) and disable it (unload a module). How can I achieve this if the code is inside the kernel? One possibility I see is adding an entry in the procfs.
I don't see what procfs has to do with this, please explain.
And as you said this was for "learning purposes", then just build it into the kernel, there's no need for it to be a module.
Heh, you can just put back the relevant parts of what commit c59923a15c12d2b3597af913bf234a0ef264a38b removed and then do what you want as a module, if it is for learning purposes :-) Regards, Srivatsa S. Bhat
Hi Arokux, On 2/22/12, Arokux B. <arokux@gmail.com> wrote:
Having my code as a module I can trigger its execution (load a module) and disable it (unload a module). How can I achieve this if the code is inside the kernel? One possibility I see is adding an entry in the procfs.
I think you want to have the kernel execute some code of yours just for learning purposes right? So, your question could be put like this: Where are the "doors" for me -userspace- to enter to the kernel? In that case, I believe the "canonical" answer is: system calls. If you have a copy of Love's book you could look there, or you could just search through the code and look how system calls are implemented and add own of your own. Perhaps you could even modify one. You can search all syscalls definitions with: grep "SYSCALL_DEFINE" `find . -name "*.c"` Actually, that's the path I would take if I were to try this. You can pick a simple syscall like "getcwd", defined in fs/dcache.c and just add my test code there. That way every time you call pwd in your shell, you get your code called (you can check with strace). Hope this helps, Ezequiel.
2012/2/22 Ezequiel García <elezegarcia@gmail.com>:
Hi Arokux,
On 2/22/12, Arokux B. <arokux@gmail.com> wrote:
Having my code as a module I can trigger its execution (load a module) and disable it (unload a module). How can I achieve this if the code is inside the kernel? One possibility I see is adding an entry in the procfs.
I think you want to have the kernel execute some code of yours just for learning purposes right? So, your question could be put like this: Where are the "doors" for me -userspace- to enter to the kernel?
In that case, I believe the "canonical" answer is: system calls. If you have a copy of Love's book you could look there, or you could just search through the code and look how system calls are implemented and add own of your own. Perhaps you could even modify one. You can search all syscalls definitions with:
grep "SYSCALL_DEFINE" `find . -name "*.c"`
Actually, that's the path I would take if I were to try this. You can pick a simple syscall like "getcwd", defined in fs/dcache.c and just add my test code there. That way every time you call pwd in your shell, you get your code called (you can check with strace).
Hope this helps, Ezequiel.
This is also a good summary of Kernel space / User space interfaces http://people.ee.ethz.ch/~arkeller/linux/kernel_user_space_howto.html Hope it helps, -- Javier Martínez Canillas (+34) 682 39 81 69 Barcelona, Spain
Hi all, thank you very much guys. Your answers helped me to realize what I really wanted to do. Best regards, Arokux
participants (6)
-
Arokux B. -
Ezequiel García -
Greg KH -
Greg KH -
Javier Martinez Canillas -
Srivatsa Bhat