<div><div>I'm not an expert, but AFAIK Linux device driver is essentially a set of callbacks, by which it communicates with the kernel - it's not an arbitrary program that could run in the user space put to the kernel space. Usually it communicates with the user space programs by means of device files in the /dev/ folder and /proc/ fs. The later is usually used for some setting and reading some options. For passing a blob from the user space program to the driver you write it to the device file, like you would do with any regular file. And in the driver code you have a callback for reading that data.</div>
<div><br></div><div>On Nov 30, 3:23 am, Motiejus Jakštys <<a href="mailto:desired....@gmail.com">desired....@gmail.com</a>> wrote:</div><div>> Hello,</div><div>> </div><div>> I am thinking of a way for Linux kernel driver to communicate with</div>
<div>> Erlang node. The purpose is send binary blobs and have some logic:</div><div>> * The blob has been ack'ed by erlang node</div><div>> * Some business operation has been completed with the blob (by node)</div>
<div>> </div><div>> C node seems to be the perfect match. Is there anything I should know</div><div>> before starting messing around? Any possible gotchas running Erlang node</div><div>> in kernel space? Has anybody tried that?</div>
<div>> </div><div>> What I am trying to do</div><div>> ======================</div><div>> </div><div>> I am thinking of implementing NBD stack with Erlang and C. NBD server is</div><div>> easy (100% userspace), the client is more tricky, since device driver</div>
<div>> code has to be kernel space.</div><div>> </div><div>> NBD-client would consist of two parts:</div><div>> * nbd.c that implements block device interface and talks to Erlang node</div><div>> * Erlang node that communicates with another Erlang node nbd-server</div>
<div>>   (which does the "business" part with the blob -- writes to disk)</div><div>> </div><div>> RFC</div><div>> ===</div><div>> </div><div>> For me distinction between "client" and "server" is unclear in the</div>
<div>> tutorial:<a href="http://www.erlang.org/doc/tutorial/cnode.htmlCould">http://www.erlang.org/doc/tutorial/cnode.htmlCould</a> somebody</div><div>> explain it from the higher perspective?</div><div>> </div><div>
> I have never mixed C and Erlang before, and would appreciate some light</div><div>> on C nodes generally. What is a C node from the system point of view?</div><div>> Does it use sockets, pipes? What OS processes/threads does it spawn?</div>
<div>> </div><div>> Many thanks,</div><div>> Motiejus</div><div>> _______________________________________________</div><div>> erlang-questions mailing list</div><div>> erlang-questi...@erlang.orghttp://<a href="http://erlang.org/mailman/listinfo/erlang-questions">erlang.org/mailman/listinfo/erlang-questions</a></div>
</div>