<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7638.1">
<TITLE>Re: can erlang code talk directly with device driver ?</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->

<P><FONT SIZE=2>So unless I miss my guess, you're trying to build an OS that's based off erlang. My suggestion would be to port the vm directly, or write your own. The vm, most likely, requires more then a simple elf loader to run. Its a full fledged binary that would require the support of a complete OS.<BR>
-- bryan<BR>
<BR>
-----Original Message-----<BR>
From: owner-erlang-questions@erlang.org <owner-erlang-questions@erlang.org><BR>
To: erlang-questions@erlang.org <erlang-questions@erlang.org><BR>
Sent: Thu Jul 27 07:01:33 2006<BR>
Subject: Re: can erlang code talk directly with device driver ?<BR>
<BR>
On 7/27/06, Daniel Goertzen <goertzen@ertw.com> wrote:<BR>
> Only OpenSource wrote:<BR>
> > On 7/27/06, Javier París <javierparis@udc.es> wrote:<BR>
> >> El Jueves, 27 de Julio de 2006 12:36, Only OpenSource escribió:<BR>
> >> > On 7/27/06, Ryan Rawson <ryanobjc@gmail.com> wrote:<BR>
> >> > > Just write a erlang port or library.  See EDTK.<BR>
> >> ><BR>
> >> > Thanks Ryan.<BR>
> >> ><BR>
> >> > I downloaded the paper list on the snookles.com site<BR>
> >> ><BR>
> >> > However, I am looking for an example, wherein erlang program works<BR>
> >> with<BR>
> >> >  - Network Device driver<BR>
> >> >  - USB Device driver<BR>
> >><BR>
> >> You mean ioctls? You would do that, as Ryan said, using a port. There<BR>
> >> is a<BR>
> >> nice tutorial on how to do that on the web. In the network device<BR>
> >> case, if<BR>
> >> wou are only going to use a socket, there is already a library for<BR>
> >> that: look<BR>
> >> for gen_tcp and gen_udp.<BR>
> >><BR>
> >> Regards.<BR>
> >><BR>
> ><BR>
> > Yes IOCTLS or something similar to that.<BR>
> > As an illustration iptables on Linux implemented in erlang !<BR>
> > Could you point out the url of the nice tutorial ?<BR>
> ><BR>
> > For network device, I donot intend to use a socket !<BR>
> > What are the options available from an Erlang perspective ?<BR>
> ><BR>
> > I am also keen to do a Erlang prototype for a Wireless USB device driver.<BR>
> > Like to hear about what the erlang community has thought about this !<BR>
> ><BR>
> > In case I want to explore DMA in the erlang code, how do I do that ?<BR>
> ><BR>
> > Thanks in advance for any pointers.<BR>
> ><BR>
> If you want to solve the problem with Erlang, you need to think of it<BR>
> terms of message streams.  You'll need some way to get USB messages to<BR>
> an from the USB device.  I'm not that familiar in this area, but there<BR>
> must be some userland or kernel debugger that will give you access to a<BR>
> USB stream, perhaps as an erlang port or perhaps through direct file io<BR>
> with a device node.<BR>
<BR>
Dan, thanks for your reply.<BR>
<BR>
Do I necessarily need to construct the program in such a way that the<BR>
two modules communicate with each other using messages ?<BR>
<BR>
As an illustration,<BR>
the typical model in C would be to define a structure.<BR>
Write a bunch of functions that would work on the struct.<BR>
Next come in the attach, detach, init, fini functions.<BR>
If it's a driver ctl, then I would define a bunch of IOCTLS<BR>
<BR>
> On the other end of this you need some way to<BR>
> stream ethernet packets to and from a network interface.<BR>
><BR>
> I would think DMA would happen at the USB subsystem level, so I doubt<BR>
> you need to think about that.<BR>
><BR>
> Cheers,<BR>
> Dan.<BR>
><BR>
<BR>
The scenario that I am trying to visualize is this (I may be wrong) -<BR>
<BR>
  Erlang runs on top of a virtual machine.<BR>
  Within erlang runtime env, there is no kernel or userland demarcation.<BR>
<BR>
  If I can implement a good enough boot-loader, ELF loader and some process<BR>
  start code (not same as RTOS), then I have a good enough substrate on<BR>
  which erlang can be hosted.<BR>
<BR>
  May be I just do a single 1 Gb memory allocation (lets say i have 1Gb RAM)<BR>
  and mmap the erlang into this single address space. All the segments are<BR>
  fused into a single address space (no need for multiple segments).<BR>
<BR>
  In this scenario soft real-time capabilities are available in erlang<BR>
(OS like behaviours)<BR>
  and the various process hierarchy is similar to the UNIX process groups etc.<BR>
<BR>
  Now, the only part that remains is the device drivers - in particular for<BR>
  USB (boot device) and NIC (networking device)<BR>
  For USB I use a extent based fs which maintains the erlang runtime file.<BR>
<BR>
I am not sure if this has been attempted before.<BR>
However, I am interested in accomplishing this (no OS and no VxWorks)!<BR>
<BR>
Does it make sense ?<BR>
<BR>
--<BR>
oo@@oo<BR>
</FONT>
</P>

</BODY>
</HTML>