Skip to contentSkip to conversation

kernel space access to user space functions

DISCUSSION Chris Ison 3 participants 3 messages Nov 30, 2002 – Dec 1, 2002

lore
Share & tools
lore

Chris Ison

author
#0 lore raw

I realize I asked this previously, but the answer given was not to the question I asked.

How can I get a kernel module to call a function within a program?

The reason being I am creating a software midi driver and already have a small program that does what I want the driver to do, problem is all the math in the program is floating point.

What I would like to do, is be able to run the program, and have the kernel software midi driver call a function within the program to que up midi events, and have the program do all the hard work of the wavetable synth.

This way, any improvements to the software don't have to be translated to the driver, and visa versa.

How can I make this happen. And please give an example.

#1 lore raw
Followup to:  <[email protected]>
By author:    Chris Ison <[email protected]>
In newsgroup: linux.dev.kernel
Quoted 6 lines

I realize I asked this previously, but the answer given was not to the question I asked.

How can I get a kernel module to call a function within a program?

You can't.

Quoted 3 lines

The reason being I am creating a software midi driver and already have a small program that does what I want the driver to do, problem is all the math in the program is floating point.

There are functions now in the kernel (kernel_fpu_begin() and kernel_fpu_end()) to allow the use of floating point inside the kernel.

Quoted 9 lines

What I would like to do, is be able to run the program, and have the kernel software midi driver call a function within the program to que up midi events, and have the program do all the hard work of the wavetable synth.

This way, any improvements to the software don't have to be translated to the driver, and visa versa.

How can I make this happen. And please give an example.

You can't.

Signature · 3 lines
<[email protected]> at work, <[email protected]> in private!
"Unix gives you enough rope to shoot yourself in the foot."
http://www.zytor.com/~hpa/puzzle.txt	<[email protected]>
#2 lore raw
In reply to Chris Ison
Quoted 4 lines · --On Sunday, December 01, 2002 06:17:03 +1000 Chris Ison…

I realize I asked this previously, but the answer given was not to the question I asked.

How can I get a kernel module to call a function within a program?

As others have said, you can't. Unix in general doesn't work this way.

However, all is not lost. There are other ways to accomplish what you want.

Quoted 8 lines

The reason being I am creating a software midi driver and already have a small program that does what I want the driver to do, problem is all the math in the program is floating point.

What I would like to do, is be able to run the program, and have the kernel software midi driver call a function within the program to que up midi events, and have the program do all the hard work of the wavetable synth.

Actually, you want to have the program open a MIDI device, and read MIDI from there, then output to an audio device. ALSA already has the facilities to do this, and it should not be hard to write a MIDI cross-queue device for OSS if you need that. For low latency, you're going to have to be very careful about the structure of the main loop of this thing, and probably use mmap-ed audio under ALSA, or the low-latency DMA tricks with OSS.

Quoted 4 lines

This way, any improvements to the software don't have to be translated to the driver, and visa versa.

How can I make this happen. And please give an example.

Since there are several softsynths done already, why not look at how they did it.

http://www.xdt.com/ar/linux-snd/ is a very big list of linux sound apps. There should be examples amongst them.

Andrew