[Beowulf] KVM to a compute node
Many of your questions may have already been answered in earlier discussions or in the FAQ. The search results page will indicate current discussions as well as past list serves, articles, and papers.
Mark Hahn hahn at physics.mcmaster.caThu Jun 3 08:36:28 PDT 2004
- Previous message: [Beowulf] KVM to a compute node
- Next message: [Beowulf] KVM to a compute node
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
> These USB->serial boxes work fine with linux (ours uses the ftdi_sio kernel sounds a bit fragile to me. if I really wanted serial on a bunch of boxes, I'd be most tempted to simply have box N plugged into box N+1. and use a script to do the appropriate connection, of course. > We use kermit to log on the local console to each machine, and have aliases > for the combination of ssh (to the server) and kermit on the right tty. eeew, why do people still use grossness like kermit for such a simple task? here's a bit of serial-port plumbing I wrote over a decade ago (gulp!) that works on any unix machine. feel free to hack it to your port names/speeds/etc, remove the silly logging, etc. /* written by Mark Hahn <hahn at mcmaster.ca> */ #include <unistd.h> #include <sys/time.h> #include <fcntl.h> #include <stdio.h> #include <termios.h> #include <stdarg.h> double gtod() { struct timeval tv; gettimeofday(&tv,0); return tv.tv_sec + 1e-6 * tv.tv_usec; } double startTime; double ts() { if (startTime == 0.0) startTime = gtod(); return gtod() - startTime; } FILE *fpLog = 0; void log(char *format,...) { va_list ap; va_start(ap,format); if (!fpLog) fpLog = fopen("debug.log","a"); fprintf(fpLog,"%2.8f: ",ts()); vfprintf(fpLog,format,ap); va_end(ap); fflush(fpLog); } void fatal(char *format,...) { static FILE *fpLog = 0; va_list ap; va_start(ap,format); if (!fpLog) fpLog = fopen("debug.log","a"); fprintf(fpLog,"%2.8f: ",ts()); vfprintf(fpLog,format,ap); va_end(ap); fclose(fpLog); exit(0); } int main() { struct termios t, tOrg; int fdSer = open("/dev/tty01", O_RDWR); log("starting...\n"); if (fdSer == -1) { perror("open of serial device failed"); return 1; } log("opened...\n"); t.c_iflag = IGNBRK | INPCK; t.c_oflag = 0; t.c_cflag = CS8 | CREAD | CLOCAL | CSTOPB; t.c_lflag = 0; cfsetispeed(&t,B19200); cfsetospeed(&t,B19200); tcsetattr(fdSer,TCSANOW,&t); log("serial attr set...\n"); tcgetattr(0,&t); tOrg = t; t.c_iflag = 0; t.c_lflag = 0; t.c_cc[VTIME] = 1; t.c_cc[VMIN] = 1; tcsetattr(0,TCSANOW,&t); log("console attr set...\n"); while (1) { #define bufSize 4096 unsigned char buf[bufSize+1]; struct timeval timeout; fd_set readset; timeout.tv_sec = 10; timeout.tv_usec = 0; FD_ZERO(&readset); FD_SET(0,&readset); FD_SET(fdSer,&readset); log("about to select...\n"); if (select(fdSer+1,&readset,0,0,&timeout) == -1) continue; if (FD_ISSET(0,&readset)) { log("stdin readable...\n"); int c = read(0,buf,bufSize); if (c > 0) { buf[c] = 0; log("got %d bytes from stdin: '%s'...\n",c,buf); static unsigned char prev = 0; log("prev is %02x\n\n",prev); if (prev == 0x1d && buf[0] == 'q') break; prev = buf[0]; log("writing to serial...\n"); write(fdSer,buf,c); log("serial write done...\n"); } } if (FD_ISSET(fdSer,&readset)) { log("serial readable...\n"); int c = read(fdSer,buf,bufSize); if (c > 0) { buf[c] = 0; log("got %d bytes from serial: '%s'...\n",c,buf); write(1,buf,c); log("stdout write done...\n"); } } } tcsetattr(0,TCSANOW,&tOrg); return 0; }
- Previous message: [Beowulf] KVM to a compute node
- Next message: [Beowulf] KVM to a compute node
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Beowulf mailing list
