can a linux kernel module call libc functions?


 
Thread Tools Search this Thread
Top Forums Programming can a linux kernel module call libc functions?
# 1  
Old 11-12-2011
can a linux kernel module call libc functions?

can a linux kernel module call libc functions, such as printf(), strcpy(), etc...?
# 2  
Old 11-12-2011
No, absolutely not. There are internal, kernel-specific functions for some of those. If you're asking this question, you must absolutely read the O'Reilley published book on writing Linux device drivers.
# 3  
Old 11-14-2011
How can you do printf() when you don't even have terminals or files? The kernel is what makes libc possible.

Last edited by Corona688; 11-14-2011 at 12:39 PM..
# 4  
Old 11-15-2011
I mean in a DIY kernel module that is not significant to the kernel.
How printk print messages when it have no terminals?
Can the kernel module call syscalls?
# 5  
Old 11-15-2011
printk goes to a buffer inside the kernel. Things inside userspace read from it (try dmesg). The log system also reads from it. Nothing in this scheme requires the kernel to have access to system calls or libc.

It's possible to use a hardware serial port(probably not a USB one) in an extremely limited way by setting it as an output for printk messages with options on the kernel commandline. Again, neither libc nor system calls are used.

The kernel really, genuinely doesn't have libc or system calls. The kernel is what makes them possible, if you're not running in user mode you don't have them. We're not joking, kidding, or lying to you.
# 6  
Old 11-16-2011
I know it is the kernel which makes syscalls and libc possible.
But, what makes the kernel can not call syscalls which inside itself?
# 7  
Old 11-16-2011
Quote:
But, what makes the kernel can not call syscalls which inside itself?
(If you received mail of this post, it was premature. Disregards)

Linux (AFAIK) does not support a 're-entrant' model. Once you're inside the kernel, you can't thread a new process, or go again into the kernel (you're already there). Allowing a module to do a syscall would make things incredibly complicated and would more than often result in a deadlock or worse -- a infinite recursive loop, filling up the stack.

Some UNIX's (Solaris 2.5+) are re-entrant and theoretically could support a kernel module making a syscall, but again, the problems are similar - extreme care has to be taken to ensure that bad things dont happen.

If you want to have a kernel module do some nifty things, the common practice is to have it communicate with a userland process via a pipe or ioctl. That is, make your module act as a dummy device driver which fills the dummy device with data that it wants to send to the userland process. The userland process is then blocking-read on this device and acts appropriately when the data is available.

There is also the issue of calling symantics. On most devices (ie, CPUs), invoking a system call involves setting registers and triggering an interrupt, which the kernel then handles. If your code is running in the Kernel, this interrupt has to be masked to prevent another system call from interrupting the currently executing one. (Unless you're a re-entrant kernel like Solaris; then your code has to be re-entrant too). In other instances, the system call entry point is through a specific CPU instruction -- one which requires a mode bit to indicate the currently executing process is in "userland" mode. Once the control is handed to the kernel, the kernel sets that bit accordingly, so once again, the CPU wont let a kernel thread invoke a kernel thread.

Last edited by otheus; 11-16-2011 at 04:40 AM.. Reason: first response was already answered by corona
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Call functions from other scripts

i have a file that contains functions and i want the functions to be available in another script. of course, the ideal situation here would be to put the functions in the same script, but i dont own these scripts. so I have to call the functions file from a different script. how do i... (3 Replies)
Discussion started by: SkySmart
3 Replies

2. Linux

Unload kernel module at boot time (Debian Wheezy 7.2, 3.2.0-4-686-pae kernel)

Hi everyone, I am trying to prevent the ehci_hcd kernel module to load at boot time. Here's what I've tried so far: 1) Add the following line to /etc/modprobe.d/blacklist.conf (as suggested here): 2) Blacklisted the module by adding the following string to 3) Tried to blacklist the module... (0 Replies)
Discussion started by: gacanepa
0 Replies

3. UNIX for Advanced & Expert Users

Get pointer for existing device class (struct class) in Linux kernel module

Hi all! I am trying to register a device in an existing device class, but I am having trouble getting the pointer to an existing class. I can create a class in a module, get the pointer to it and then use it to register the device with: *cl = class_create(THIS_MODULE, className);... (0 Replies)
Discussion started by: hdaniel@ualg.pt
0 Replies

4. Programming

Make cannot generate .ko linux kernel module

cannot generate .ko file on my linux, although it can generate module.symvers. But when I copy .c file and Makefile to another linux computer, there's no problem. The strange thing is: make is successfuly executed, and returned 0; make output: make -C /lib/modules/2.6.18-92.el5xen/build ... (4 Replies)
Discussion started by: vistastar
4 Replies

5. Red Hat

Export functions in kernel module to user Programs

Hi all, I just started working on kernel modules. One query i'm not able to resolve how i can use call any of my function(take example testfunc() ) defined in my loadable kernel module (take example : test.ko) I want to export kernel module functions to user programs. Consider i have... (0 Replies)
Discussion started by: er.tarun.9986
0 Replies

6. Linux

How to convert Linux Kernel built-in module into a loadable module

Hi all, I am working on USB data monitoring on Fedora Core 9. Kernel 2.6.25 has a built-in module (the one that isn't loadable, but compiles and links statically with the kernel during compilation) to snoop USB data. It is in <kernel_source_code>/drivers/usb/mon/. I need to know if I can... (0 Replies)
Discussion started by: anitemp
0 Replies

7. UNIX for Dummies Questions & Answers

Linux kernel module parameters

Hi, Does anyone know if it is possible to know the current value of a kernel module parameters after the module is loaded. Are the values of the parameters advertised at some /proc or /sys location ? The only thing I know is modinfo, that actually looks a the module .ko and gives a... (3 Replies)
Discussion started by: macL
3 Replies

8. SuSE

max number of slabs per kernel module (kernel 2.6.17, suse)

Hi All, Is there a max number of slabs that can be used per kernel module? I'm having a tough time finding out that kind of information, but the array 'node_zonelists' (mmzone.h) has a size of 5. I just want to avoid buffer overruns and other bad stuff. Cheers, Brendan (4 Replies)
Discussion started by: Brendan Kennedy
4 Replies

9. Programming

kernel-kernel call communication

hi all! i have developed a mechanism in system.c to count how many times each kernel call is called. The results are held in an array in system.c . What i want to do is to create a new kernel call which will print this array. I need help in passing the array from system.c to the new kernel call. ... (5 Replies)
Discussion started by: aureliano
5 Replies

10. Linux

Making Socket System Call From Linux Kernel Module?

Hi Everyone! How can we make a socket() system call from a linux module executing in kernel space? If any one knows, kindly tell me. It will be great. I want to use the socket interface in linux kernel space for sending raw packets over the network. Hamayun (0 Replies)
Discussion started by: mian_m_hamayun
0 Replies
Login or Register to Ask a Question