Hallo nochmal,

also, ich bin mir sowas von unsicher, ob ich den richtigen Weg gehe.
Ich habe mal versucht, aus deinen files codeschnipsel umzusetzen.

Code:
#include <errno.h>
#include <fcntl.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/time.h>

#include <linux/serial.h>

#define READ_TIMEOUT 250000 /* less than 1e6 */
#define _POSIX
#define USB_DEVICE "/dev/ttyUSB0"

int dev_fd;

/* openAtmel */
int openAtmelPort(char *dev_name)
{
  
  if ((dev_fd = open(dev_name, O_RDWR | O_NOCTTY, 0)) < 0)
  {
    return (-1);
  }

  return (dev_fd);
}

/* closeAtmel */
int closeAtmelPort()
{
  return close(dev_fd);
}

/* writeAtmel */
int writeAtmelPort(unsigned char *c, int nChars)
{
  
  int n = write(dev_fd, c, 1);
  
  if (n < 0)
  {
    // error
    printf("write() of n bytes failed -> %d", n);
  }
  else
  {
    printf("%d byte(s) written.", n);
  }
  
  return n;
}
 
/* readAtmel */
int readAtmelPort(unsigned char *buf, int nChars)
{

  int amountRead = 0, bytes_read = 0;
  struct timeval t;
  fd_set set;
  int err;
  
  while(nChars > 0)
  {
    t.tv_sec = 0;
    t.tv_usec = READ_TIMEOUT;
    FD_ZERO(&set);
    FD_SET(dev_fd, &set);
    err = select(dev_fd + 1, &set, NULL, NULL, &t);

    if(err == 0)
      return -2;
  
    amountRead = read(dev_fd, buf, nChars);
    if(amountRead < 0 && errno != EWOULDBLOCK)
      return -1;
    else if(amountRead > 0) {
      bytes_read += amountRead;
      nChars -= amountRead;
      buf += amountRead;
    }
  }
  return bytes_read;
}


int main()
{
	unsigned char *buffer;
	int nChars;
	int result;
	
	result = openAtmelPort(USB_DEVICE);
	printf("openAtmelPort: %d\n", result);
	result = readAtmelPort(buffer, 1);
	printf("readAtmelPort: %d\n", result);
	closeAtmelPort();
	return (0);
}
bei openAtmelPort() wird '3' zurückgegeben.
Also gehe ich davon aus, dass zumindest das funktioniert.
Bei readAtmelPort() erhalte ich den Rückgabewert '-2' bzw. direkt mit write() '0' , was darauf schliessen lässt, dass ich Mist gebaut habe...

Nun frage ich mich, ob ich den Code auf dem Atmel auch richtig habe.
Dort lasse ich in einer Loop Schleife jede Sekunde "!" ausgeben.

Code:
Do
Print #4 , "!"
Wait 1
Loop
Hab den ganzen Tag gesucht, probiert und jetzt hänge ich durch.
Vielleicht fehlt ja auch der Linux Usb-Treiber für den Atmel?!
Leider gibt es da nur den für Kernel 2.4.x - ich habe aber ubuntu unter 2.6.x laufen.