Subject: Re: how an application program utilizes the driver.

From: David Hawkins <[email-masked]>
Date: Wed, 20 Sep 2006 09:14:46 -0700

Hi Ming,

> My situation is: I want to write a driver for my custom device.(In the 
> driver there are some functions defined to read or write my device.) Then 
> in my application program, I use these defined functions to operate my 
> hardware device. I think this is a normal process to operate the hardware 
> with driver+app, right? 

Right, but you've missed a few critical points.

For your custom device, you'll create a driver that implements
*kernel space* functions my_driver_open(), read(), write(), close()
etc. You'll install that module and create an appropriate
device node, eg. /dev/my_driver.

In your *user-space* application code, you'll open that device

int main(argc, argv) ...

  int fd = open("/dev/my_driver" ...)

and then write to your device ...

  int write(fd, buffer, len);

or read from your device ...

  int read(fd, buffer, len);

The user-space calls open, read, write eventually call down into
your driver space code. The driver and application are not
linked, they communicate via the /dev interface.

You really should read through Linux Device Drivers by Rubini,
or check out a tutorial such as

http://www.ovro.caltech.edu/~dwh/correlator/pdf/LNX-723-Hawkins.pdf
http://www.ovro.caltech.edu/~dwh/correlator/software/driver_design.tar.gz
http://www.ovro.caltech.edu/~dwh/correlator/index.html

Regards,
Dave