Serial device access with qemu!
Joel Sherrill
joel.sherrill at OARcorp.com
Tue Nov 23 16:02:54 UTC 2010
On 11/23/2010 09:24 AM, Jeferson Luiz Rodrigues Souza wrote:
> Dear Joel,
>
> On Tue, Nov 23, 2010 at 2:21 PM, Joel Sherrill
> <joel.sherrill at oarcorp.com <mailto:joel.sherrill at oarcorp.com>> wrote:
>
> On 11/23/2010 02:50 AM, Jeferson Luiz Rodrigues Souza wrote:
>
> Hi everyone,
>
> I am trying to access a serial port in RTEMS 4.9.4 using a
> pc586 bsp. However, when I execute the application using qemu
> the code cannot open the device, and the perror() function
> presents the following message: "No such file or directory".
> It seems that RTEMS did not initialize a properly driver to
> handle serial device. Is it right?
>
> The qemu command line is:
>
> sudo qemu -serial "/dev/ttyS0" -fda floppy.img -boot a
>
> I made a search in this list and I found references about
> serial port access but nothing to help in my case. Could
> anyone help me or point me some documentation about serial
> port access in RTEMS?
>
> The code used in the test is presented below. I do not have
> some experience with RTEMS and I do not know the source of
> this problem.
>
> The /dev/ttyS0 above is the host serial port. The -serial says
> attach attach the serial port COM1 on the target simulator
> PC to the specified device. So you are attaching the virtual
> COM1 to the real serial port on the host /dev/ttyS0. Is that
> what you intend to do?
>
> FWIW COM1 --> /dev/ttyS1
> COM2 --> /dev/ttyS2
>
> on the RTEMS target.
>
>
> I need to read some data from a device connected in the host serial
> port (e.g. /dev/ttyS0) inside an application running in RTEMS with
> qemu. So, is my source code correct? or Do I need some extra
> configuration?
>
> Where is the name of serial devices in RTEMS defined? I tried use the
> open() function as follows:
>
> int serial_fp = open("/dev/ttyS0",O_RDONLY);
> or
> int serial_fp = open("/dev/ttyS1",O_RDONLY);
> or
> int serial_fp = open("COM1",O_RDONLY);
>
> and got the same message when I checked the serial_fp value and print
> the error message using perror() function: "No such file or directory"
This is how if should work based upon the head.
#include <bsp/tty_drv.h>
...
#define CONFIGURE_APPLICATION_EXTRA_DRIVERS \
TTY1_DRIVER_TABLE_ENTRY, TTY2_DRIVER_TABLE_ENTRY
and you should have /dev/ttyS1 for COM1
You can tinker with the configuration of the fileio.exe example, login
as rtems, and do an "ls" on /dev to see what devices there are.
--joel
>
> Thanks to reply,
>
> Best regards,
> Jeferson.
>
> --joel
>
> Thanks,
> jefecomp.
>
>
> #include <signal.h>
> #include <stdlib.h>
> #include <stdio.h>
> #include <pthread.h>
> #include <uart.h>
> #include <termios.h>
> #include<sched.h>
> #include <bsp.h>
> #include <fcntl.h>
> #include <sys/types.h>
> #include <sys/stat.h>
>
> #define CONFIGURE_INIT
> #include <rtems.h>
>
>
> void *POSIX_Init();
>
> #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
> #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
> #define CONFIGURE_APPLICATIONS_NEEDS_RTC_DRIVER
> #define CONFIGURE_MICROSECONDS_PER_TICK 1000
>
> #define CONFIGURE_MAXIMUM_POSIX_THREADS 10
> #define CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES 10
> #define CONFIGURE_MAXIMUM_POSIX_MUTEXES 10
> #define CONFIGURE_MAXIMUM_POSIX_SEMAPHORES 10
> #define CONFIGURE_MAXIMUM_POSIX_TIMERS 10
> #define CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS 40
> #define CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES 10
> #define CONFIGURE_POSIX_INIT_THREAD_TABLE
> #define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 5
> #define CONFIGURE_NUMBER_OF_TERMIOS_PORTS 3
> #include<rtems/confdefs.h>
>
> void *POSIX_Init()
> {
> printf("Serial Port Test!!!\n");
>
> char buffer[255];
> int bytesRead;
> int serial_fp = open("/dev/ttyS0",O_RDONLY);
>
> printf("SERIAL_FP = %i\n",serial_fp);
>
> if(serial_fp < 0)
> {
> printf("FAILURE TO OPEN SERIAL PORT\n");
> perror(serial_fp);
> exit(-1);
> }
>
> //write(serial_fp,buffer,strlen(buffer)+1);
> bytesRead = read(serial_fp, buffer, 255);
>
>
> if(bytesRead < 0)
> {
> printf("Problems in the read of Serial Port");
> close(serial_fp);
> exit(1);
> }
> else
> buffer[bytesRead] = 0;
>
>
> printf(buffer);
>
> close(serial_fp);
> exit(0);
> }
>
>
>
> --
> Joel Sherrill, Ph.D. Director of Research& Development
> joel.sherrill at OARcorp.com On-Line Applications Research
> Ask me about RTEMS: a free RTOS Huntsville AL 35805
> Support Available (256) 722-9985
>
>
>
--
Joel Sherrill, Ph.D. Director of Research& Development
joel.sherrill at OARcorp.com On-Line Applications Research
Ask me about RTEMS: a free RTOS Huntsville AL 35805
Support Available (256) 722-9985
More information about the users
mailing list