forked from Imagelibrary/rtems
2002-06-25 Thomas Doerfler <Thomas.Doerfler@imd-systems.de>
* With the addition of serdbg, the standard polled I/O functions for gdbstub and/or printk are optionally routed to any termios-aware device driver, that supports polled mode. See libmisc/serdbg/README. * serdbg/Makefile.am, serdbg/README, serdbg/serdbg.c, serdbg/serdbg.h, serdbg/serdbgcnf.h, serdbg/serdbgio.c, serdbg/termios_printk.c, serdbg/termios_printk.h, serdbg/termios_printk_cnf.h, serdbg/.cvsignore: New files. * configure.ac, Makefile.am, wrapup/Makefile.am: Modified to reflect addition.
This commit is contained in:
@@ -1,3 +1,15 @@
|
|||||||
|
2002-06-25 Thomas Doerfler <Thomas.Doerfler@imd-systems.de>
|
||||||
|
|
||||||
|
* With the addition of serdbg, the standard polled I/O functions
|
||||||
|
for gdbstub and/or printk are optionally routed to any termios-aware
|
||||||
|
device driver, that supports polled mode. See libmisc/serdbg/README.
|
||||||
|
* serdbg/Makefile.am, serdbg/README, serdbg/serdbg.c, serdbg/serdbg.h,
|
||||||
|
serdbg/serdbgcnf.h, serdbg/serdbgio.c, serdbg/termios_printk.c,
|
||||||
|
serdbg/termios_printk.h, serdbg/termios_printk_cnf.h,
|
||||||
|
serdbg/.cvsignore: New files.
|
||||||
|
* configure.ac, Makefile.am, wrapup/Makefile.am: Modified to
|
||||||
|
reflect addition.
|
||||||
|
|
||||||
2002-06-26 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
2002-06-26 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
||||||
|
|
||||||
* wrapup/Makefile.am: Don't preinstall libmisc.a.
|
* wrapup/Makefile.am: Don't preinstall libmisc.a.
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
ACLOCAL_AMFLAGS = -I ../../../aclocal
|
ACLOCAL_AMFLAGS = -I ../../../aclocal
|
||||||
|
|
||||||
SUBDIRS = capture cpuuse devnull dummy dumpbuf monitor mw-fb shell \
|
SUBDIRS = capture cpuuse devnull dummy dumpbuf monitor mw-fb shell \
|
||||||
rtmonuse stackchk untar wrapup
|
rtmonuse serdbg stackchk untar wrapup
|
||||||
|
|
||||||
EXTRA_DIST = README
|
EXTRA_DIST = README
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ dummy/Makefile
|
|||||||
dumpbuf/Makefile
|
dumpbuf/Makefile
|
||||||
monitor/Makefile
|
monitor/Makefile
|
||||||
rtmonuse/Makefile
|
rtmonuse/Makefile
|
||||||
|
serdbg/Makefile
|
||||||
stackchk/Makefile
|
stackchk/Makefile
|
||||||
capture/Makefile
|
capture/Makefile
|
||||||
untar/Makefile
|
untar/Makefile
|
||||||
|
|||||||
2
c/src/libmisc/serdbg/.cvsignore
Normal file
2
c/src/libmisc/serdbg/.cvsignore
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
Makefile
|
||||||
|
Makefile.in
|
||||||
47
c/src/libmisc/serdbg/Makefile.am
Normal file
47
c/src/libmisc/serdbg/Makefile.am
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
##
|
||||||
|
## $Id$
|
||||||
|
##
|
||||||
|
|
||||||
|
AUTOMAKE_OPTIONS = foreign 1.4
|
||||||
|
|
||||||
|
include_rtemsdir = $(includedir)/rtems
|
||||||
|
|
||||||
|
LIBNAME = libserdbg-tmp
|
||||||
|
LIB = $(ARCH)/$(LIBNAME).a
|
||||||
|
|
||||||
|
C_FILES = serdbg.c serdbgio.c termios_printk.c
|
||||||
|
C_O_FILES = $(C_FILES:%.c=$(ARCH)/%.o)
|
||||||
|
|
||||||
|
noinst_HEADERS =
|
||||||
|
include_HEADERS = serdbgcnf.h serdbg.h termios_printk_cnf.h \
|
||||||
|
termios_printk.h
|
||||||
|
|
||||||
|
OBJS = $(C_O_FILES)
|
||||||
|
|
||||||
|
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
|
||||||
|
include $(top_srcdir)/../../../automake/compile.am
|
||||||
|
include $(top_srcdir)/../../../automake/lib.am
|
||||||
|
|
||||||
|
$(PROJECT_INCLUDE):
|
||||||
|
@$(mkinstalldirs) $@
|
||||||
|
$(PROJECT_INCLUDE)/%.h: %.h
|
||||||
|
$(INSTALL_DATA) $< $@
|
||||||
|
|
||||||
|
#
|
||||||
|
# (OPTIONAL) Add local stuff here using +=
|
||||||
|
#
|
||||||
|
|
||||||
|
$(LIB): $(OBJS)
|
||||||
|
$(make-library)
|
||||||
|
|
||||||
|
PREINSTALL_FILES = $(PROJECT_INCLUDE) \
|
||||||
|
$(include_HEADERS:%=$(PROJECT_INCLUDE)/%)
|
||||||
|
|
||||||
|
all-local: $(ARCH) $(PREINSTALL_FILES) $(OBJS) $(LIB)
|
||||||
|
|
||||||
|
.PRECIOUS: $(LIB)
|
||||||
|
|
||||||
|
EXTRA_DIST = README serdbg.c serdbgio.c serdbgcnf.h serdbg.h \
|
||||||
|
termios_printk.c termios_printk.h termios_printk_cnf.h
|
||||||
|
|
||||||
|
include $(top_srcdir)/../../../automake/local.am
|
||||||
138
c/src/libmisc/serdbg/README
Normal file
138
c/src/libmisc/serdbg/README
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
#
|
||||||
|
# $Id$
|
||||||
|
#
|
||||||
|
|
||||||
|
This directory contains three useful packages related to the termios I/O
|
||||||
|
system:
|
||||||
|
|
||||||
|
PACKAGE SERDBGIO
|
||||||
|
================
|
||||||
|
"serdbgio" provides the "serial gdb" standard I/O functions "getDebugChar"
|
||||||
|
and "putDebugChar" for any device driver supporting polled termios mode.
|
||||||
|
|
||||||
|
The initialization function "serdbg_open" opens the v.24 port intended
|
||||||
|
for the serial debug connection, and sets the desired baud rate. The
|
||||||
|
"getDebugChar" and "putDebugChar" functions then interact with the
|
||||||
|
corresponding driver using the calls intended for polled termios
|
||||||
|
operation.
|
||||||
|
|
||||||
|
Specification for the debug device, baud rate and other parameters is
|
||||||
|
done in a global structure of type "serdbg_conf_t". A configuration
|
||||||
|
mechanism quite similar to the overall RTEMS configuration is available.
|
||||||
|
|
||||||
|
PACKAGE SERDBG
|
||||||
|
==============
|
||||||
|
"serdbg" provides a means to optionally initialize and/or start a
|
||||||
|
serial gdb session as soon as possible, this means as soon as all
|
||||||
|
drivers have been initialized. The serial debug I/O functions can
|
||||||
|
either be integrated as special routines of the BSP drivers, or using
|
||||||
|
the package "serdbgio"
|
||||||
|
|
||||||
|
PACKAGE TERMIOS_PRINTK
|
||||||
|
======================
|
||||||
|
"termios_printk" provides a standard output function suitable to use
|
||||||
|
with "printk". It uses the same technique as serdbgio, hooking the
|
||||||
|
interface between a polled device driver and the termios system.
|
||||||
|
|
||||||
|
|
||||||
|
REQUIREMENTS
|
||||||
|
============
|
||||||
|
|
||||||
|
- These two packages can be used with any polled termios device
|
||||||
|
driver.
|
||||||
|
- For standard initialization, they need a modified "bsppost.c"
|
||||||
|
to perform the initialization calls.
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
=====
|
||||||
|
|
||||||
|
For using these packages add the following to your "init" module or
|
||||||
|
your "system.h" file (Note: most macro settings fall back to a
|
||||||
|
default, if not set.):
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CONFIGURE_USE_SERDBG
|
||||||
|
* set this macro, if you want to connect gdb over a serial line
|
||||||
|
* when set, the debug stub will be connected after driver
|
||||||
|
* initialization in "bsppost.c"
|
||||||
|
*/
|
||||||
|
#define CONFIGURE_USE_SERDBG
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CONFIGURE_SERDBG_SKIP_INIT_BKPT
|
||||||
|
* set this macro, if you do not want the gdb interface to wait for a
|
||||||
|
* debugger connection directly after initialization
|
||||||
|
* If you set this macro, the gdb stub will only hook various
|
||||||
|
* exception vectors when called from "bsppost.c".
|
||||||
|
*/
|
||||||
|
/* #define CONFIGURE_SERDBG_SKIP_INIT_BKPT */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CONFIGURE_SERDBG_USE_POLLED_TERMIOS
|
||||||
|
* set this macro, if you want "serdbgio" to provide the I/O
|
||||||
|
* functions for the serial gdb connection
|
||||||
|
*/
|
||||||
|
#define CONFIGURE_SERDBG_USE_POLLED_TERMIOS
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CONFIGURE_SERDBG_DEVNAME
|
||||||
|
* use this macro to specify the serial device to use
|
||||||
|
* for "serdbgio".
|
||||||
|
* Only used, when CONFIGURE_SERDBG_USE_POLLED_TERMIOS is set
|
||||||
|
*/
|
||||||
|
#define CONFIGURE_SERDBG_DEVNAME "/dev/tty03"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CONFIGURE_SERDBG_BAUDRATE
|
||||||
|
* use this macro to specify the baud rate to use
|
||||||
|
* for "serdbgio".
|
||||||
|
* Only used, when CONFIGURE_SERDBG_USE_POLLED_TERMIOS is set
|
||||||
|
*/
|
||||||
|
#define CONFIGURE_SERDBG_BAUDRATE 57600
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CONFIGURE_SERDBG_CALLOUT
|
||||||
|
* use this macro to specify a routine that will called during I/O polling
|
||||||
|
* Only used, when CONFIGURE_SERDBG_USE_POLLED_TERMIOS is set
|
||||||
|
* This function of type "void pollfnc(void)" can be used for e.g.
|
||||||
|
* tickling a watchdog
|
||||||
|
*/
|
||||||
|
/* #define CONFIGURE_SERDBG_CALLOUT tickle_my_watchdog_fnc */
|
||||||
|
|
||||||
|
#include <serdbgcnf.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CONFIGURE_USE_TERMIOS_PRINTK
|
||||||
|
* set this macro, if you want printk output to be sent to a serial
|
||||||
|
* driver using the polled termios interface
|
||||||
|
* when set, the printk output function will be connected after driver
|
||||||
|
* initialization in "bsppost.c"
|
||||||
|
*/
|
||||||
|
#define CONFIGURE_USE_TERMIOS_PRINTK
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CONFIGURE_TERMIOS_PRINTK_DEVNAME
|
||||||
|
* use this macro to specify the serial device to use
|
||||||
|
* for printk output.
|
||||||
|
* Only used, when CONFIGURE_USE_TERMIOS_PRINTK is set
|
||||||
|
*/
|
||||||
|
#define CONFIGURE_TERMIOS_PRINTK_DEVNAME "/dev/console"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CONFIGURE_TERMIOS_PRINTK_BAUDRATE
|
||||||
|
* use this macro to specify the baudrate to use
|
||||||
|
* for printk output.
|
||||||
|
* Only used, when CONFIGURE_USE_TERMIOS_PRINTK is set
|
||||||
|
*/
|
||||||
|
#define CONFIGURE_TERMIOS_PRINTK_BAUDRATE 9600
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CONFIGURE_TERMIOS_PRINTK_CALLOUT
|
||||||
|
* use this macro to specify a routine that will called during I/O polling
|
||||||
|
* This function of type "void pollfnc(void)" can be used for e.g.
|
||||||
|
* tickling a watchdog
|
||||||
|
*/
|
||||||
|
/* #define CONFIGURE_TERMIOS_PRINTK_CALLOUT tickle_my_watchdog_fnc */
|
||||||
|
|
||||||
|
#include <termios_printk_cnf.h>
|
||||||
90
c/src/libmisc/serdbg/serdbg.c
Normal file
90
c/src/libmisc/serdbg/serdbg.c
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
/*===============================================================*\
|
||||||
|
| Project: RTEMS remote gdb over serial line |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| File: serdbg.c |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| Copyright (c) 2002 IMD |
|
||||||
|
| Ingenieurbuero fuer Microcomputertechnik Th. Doerfler |
|
||||||
|
| <Thomas.Doerfler@imd-systems.de> |
|
||||||
|
| all rights reserved |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| this file contains intialization and utility functions to add |
|
||||||
|
| a gdb remote debug stub to an RTEMS system |
|
||||||
|
| |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| date history ID |
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
||||||
|
| 04.04.02 creation doe |
|
||||||
|
\*===============================================================*/
|
||||||
|
/*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
#include <rtems.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <serdbg.h>
|
||||||
|
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
int serdbg_init_dbg
|
||||||
|
(
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| initialize remote gdb session over serial line |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
void
|
||||||
|
)
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| rtems_status_code |
|
||||||
|
\*=========================================================================*/
|
||||||
|
{
|
||||||
|
static boolean is_initialized = FALSE;
|
||||||
|
|
||||||
|
rtems_status_code rc = RTEMS_SUCCESSFUL;
|
||||||
|
extern void set_debug_traps(void);
|
||||||
|
extern void breakpoint(void);
|
||||||
|
|
||||||
|
if (is_initialized) {
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
|
}
|
||||||
|
is_initialized = TRUE;
|
||||||
|
/*
|
||||||
|
* try to open serial device
|
||||||
|
*/
|
||||||
|
if (rc == RTEMS_SUCCESSFUL) {
|
||||||
|
if ((serdbg_conf.open_io != NULL) &&
|
||||||
|
(0 > serdbg_conf.open_io(serdbg_conf.devname,serdbg_conf.baudrate))) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"remote_gdb_init: cannot open device %s "
|
||||||
|
"for gdb connection:%s\n",serdbg_conf.devname,strerror(errno));
|
||||||
|
rc = RTEMS_IO_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* initialize gdb stub
|
||||||
|
*/
|
||||||
|
if (rc == RTEMS_SUCCESSFUL) {
|
||||||
|
set_debug_traps();
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* now activate gdb stub
|
||||||
|
*/
|
||||||
|
if ((rc == RTEMS_SUCCESSFUL) &&
|
||||||
|
!serdbg_conf.skip_init_bkpt) {
|
||||||
|
breakpoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* return to original function
|
||||||
|
* this may be already unter gdb control
|
||||||
|
*/
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
174
c/src/libmisc/serdbg/serdbg.h
Normal file
174
c/src/libmisc/serdbg/serdbg.h
Normal file
@@ -0,0 +1,174 @@
|
|||||||
|
/*===============================================================*\
|
||||||
|
| Project: RTEMS remote gdb over serial line |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| File: serdbg.h |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| Copyright (c) 2002 IMD |
|
||||||
|
| Ingenieurbuero fuer Microcomputertechnik Th. Doerfler |
|
||||||
|
| <Thomas.Doerfler@imd-systems.de> |
|
||||||
|
| all rights reserved |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| this file declares intialization functions to add |
|
||||||
|
| a gdb remote debug stub to an RTEMS system |
|
||||||
|
| |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| date history ID |
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
||||||
|
| 04.04.02 creation doe |
|
||||||
|
\*===============================================================*/
|
||||||
|
/*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
#ifndef _SERDBG_H
|
||||||
|
#define _SERDBG_H
|
||||||
|
|
||||||
|
#include <rtems.h>
|
||||||
|
#include <termios.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
unsigned32 baudrate; /* debug baud rate, e.g. 57600 */
|
||||||
|
void (*callout)(void); /* callout pointer during polling */
|
||||||
|
int (*open_io)(const char *dev_name,unsigned32 baudrate); /* I/O open fnc */
|
||||||
|
const char *devname; /* debug device, e.g. "/dev/tty01" */
|
||||||
|
unsigned8 skip_init_bkpt; /* if TRUE, do not stop when initializing */
|
||||||
|
} serdbg_conf_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* must be defined in init module...
|
||||||
|
*/
|
||||||
|
extern serdbg_conf_t serdbg_conf;
|
||||||
|
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
void putDebugChar
|
||||||
|
(
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| send character to remote debugger |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
char c /* char to send */
|
||||||
|
);
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| <none> |
|
||||||
|
\*=========================================================================*/
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
int getDebugChar
|
||||||
|
(
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| get character from remote debugger |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
void /* <none> */
|
||||||
|
);
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| <none> |
|
||||||
|
\*=========================================================================*/
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
void serdbg_exceptionHandler
|
||||||
|
(
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| hook directly to an exception vector |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
int vecnum, /* vector index to hook at */
|
||||||
|
void *vector /* address of handler function */
|
||||||
|
);
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| <none> |
|
||||||
|
\*=========================================================================*/
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
int serdbg_init
|
||||||
|
(
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| initialize remote gdb session over serial line |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
void
|
||||||
|
);
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| rtems_status_code |
|
||||||
|
\*=========================================================================*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* stuff from serdbgio.c
|
||||||
|
*/
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
int serdbg_open
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| try to open given serial debug port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
const char *dev_name, /* name of device to open */
|
||||||
|
unsigned32 baudrate /* baud rate to use */
|
||||||
|
);
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| 0 on success, -1 and errno otherwise |
|
||||||
|
\*=========================================================================*/
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
void putDebugChar
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| send one character to serial port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
char c /* character to print */
|
||||||
|
);
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| <none> |
|
||||||
|
\*=========================================================================*/
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
int getDebugChar
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| wait for one character from serial port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
void /* none */
|
||||||
|
);
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| received character |
|
||||||
|
\*=========================================================================*/
|
||||||
|
|
||||||
|
#endif /* _SERDBG_H */
|
||||||
81
c/src/libmisc/serdbg/serdbgcnf.h
Normal file
81
c/src/libmisc/serdbg/serdbgcnf.h
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
/*===============================================================*\
|
||||||
|
| Project: RTEMS configure remote gdb over serial line |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| File: serdbgcnf.h |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| Copyright (c) 2002 IMD |
|
||||||
|
| Ingenieurbuero fuer Microcomputertechnik Th. Doerfler |
|
||||||
|
| <Thomas.Doerfler@imd-systems.de> |
|
||||||
|
| all rights reserved |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| this file declares intialization functions to add |
|
||||||
|
| a gdb remote debug stub to an RTEMS system |
|
||||||
|
| |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| date history ID |
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
||||||
|
| 13.05.02 creation doe |
|
||||||
|
\*===============================================================*/
|
||||||
|
/*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
#ifndef _SERDBGCNF_H
|
||||||
|
#define _SERDBGCNF_H
|
||||||
|
|
||||||
|
#include "serdbg.h"
|
||||||
|
|
||||||
|
#ifdef CONFIGURE_INIT
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fallback for baud rate to use
|
||||||
|
*/
|
||||||
|
#ifndef CONFIGURE_SERDBG_BAUDRATE
|
||||||
|
#define CONFIGURE_SERDBG_BAUDRATE 9600
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fallback for device name to use
|
||||||
|
*/
|
||||||
|
#ifndef CONFIGURE_SERDBG_DEVNAME
|
||||||
|
#define CONFIGURE_SERDBG_DEVNAME "/dev/tty01"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fill in serdbg_conf structure
|
||||||
|
*/
|
||||||
|
serdbg_conf_t serdbg_conf = {
|
||||||
|
CONFIGURE_SERDBG_BAUDRATE,
|
||||||
|
|
||||||
|
#ifdef CONFIGURE_SERDBG_CALLOUT
|
||||||
|
CONFIGURE_SERDBG_CALLOUT,
|
||||||
|
#else
|
||||||
|
NULL,
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIGURE_SERDBG_USE_POLLED_TERMIOS
|
||||||
|
serdbg_open,
|
||||||
|
#else
|
||||||
|
NULL,
|
||||||
|
#endif
|
||||||
|
|
||||||
|
CONFIGURE_SERDBG_DEVNAME,
|
||||||
|
|
||||||
|
#ifdef CONFIGURE_SERDBG_SKIP_INIT_BKPT
|
||||||
|
TRUE,
|
||||||
|
#else
|
||||||
|
FALSE,
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
int serdbg_init(void) {
|
||||||
|
#ifdef CONFIGURE_USE_SERDBG
|
||||||
|
extern int serdbg_init_dbg(void);
|
||||||
|
return serdbg_init_dbg();
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* CONFIGURE_INIT */
|
||||||
|
|
||||||
|
#endif /* _SERDBGCNF_H */
|
||||||
252
c/src/libmisc/serdbg/serdbgio.c
Normal file
252
c/src/libmisc/serdbg/serdbgio.c
Normal file
@@ -0,0 +1,252 @@
|
|||||||
|
/*===============================================================*\
|
||||||
|
| File: serdbgio.c |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| Copyright (c) 2002 IMD |
|
||||||
|
| Ingenieurbuero fuer Microcomputertechnik Th. Doerfler |
|
||||||
|
| Hebststr. 8, 82178 Puchheim, Germany |
|
||||||
|
| <Thomas.Doerfler@imd-systems.de> |
|
||||||
|
| The license and distribution terms for this file may be |
|
||||||
|
| found in the file LICENSE in this distribution or at |
|
||||||
|
| http://www.OARcorp.com/rtems/license.html. |
|
||||||
|
| all rights reserved |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| TERMIOS serial gdb interface support |
|
||||||
|
| the functions in this file allow the standard gdb stubs like |
|
||||||
|
| "m68k-stub.c" to access any serial interfaces that work with |
|
||||||
|
| RTEMS termios in polled mode |
|
||||||
|
| |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| date history ID |
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
||||||
|
| 10.05.02 creation doe |
|
||||||
|
|*****************************************************************|
|
||||||
|
|* $Id$
|
||||||
|
*
|
||||||
|
|*****************************************************************|
|
||||||
|
\*===============================================================*/
|
||||||
|
|
||||||
|
#include <rtems.h>
|
||||||
|
#include <rtems/libio_.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <termios.h>
|
||||||
|
|
||||||
|
#include <rtems/termiostypes.h>
|
||||||
|
#include <serdbg.h>
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* internal variables
|
||||||
|
*/
|
||||||
|
int serdbg_fd = -1;
|
||||||
|
struct rtems_termios_tty *serdbg_tty;
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
int serdbg_open
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| try to open given serial debug port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
const char *dev_name, /* name of device to open */
|
||||||
|
unsigned32 baudrate /* baud rate to use */
|
||||||
|
)
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| 0 on success, -1 and errno otherwise |
|
||||||
|
\*=========================================================================*/
|
||||||
|
{
|
||||||
|
boolean err_occurred = FALSE;
|
||||||
|
rtems_libio_t *iop = NULL;
|
||||||
|
struct termios act_termios;
|
||||||
|
tcflag_t baudcode = B0;
|
||||||
|
|
||||||
|
#define FD_STORE_CNT 3
|
||||||
|
int fd_store[FD_STORE_CNT];
|
||||||
|
int fd_store_used = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* translate baudrate into baud code
|
||||||
|
*/
|
||||||
|
switch(baudrate) {
|
||||||
|
case 50: baudcode = B50; break;
|
||||||
|
case 75: baudcode = B75; break;
|
||||||
|
case 110: baudcode = B110; break;
|
||||||
|
case 134: baudcode = B134; break;
|
||||||
|
case 150: baudcode = B150; break;
|
||||||
|
case 200: baudcode = B200; break;
|
||||||
|
case 300: baudcode = B300; break;
|
||||||
|
case 600: baudcode = B600; break;
|
||||||
|
case 1200: baudcode = B1200; break;
|
||||||
|
case 1800: baudcode = B1800; break;
|
||||||
|
case 2400: baudcode = B2400; break;
|
||||||
|
case 4800: baudcode = B4800; break;
|
||||||
|
case 9600: baudcode = B9600; break;
|
||||||
|
case 19200: baudcode = B19200; break;
|
||||||
|
case 38400: baudcode = B38400; break;
|
||||||
|
case 57600: baudcode = B57600; break;
|
||||||
|
case 115200: baudcode = B115200; break;
|
||||||
|
case 230400: baudcode = B230400; break;
|
||||||
|
case 460800: baudcode = B460800; break;
|
||||||
|
default : err_occurred = TRUE; errno = EINVAL; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* open device for serdbg operation
|
||||||
|
* skip any fds that are between 0..2, because they are
|
||||||
|
* reserved for stdin/out/err
|
||||||
|
*/
|
||||||
|
if (!err_occurred &&
|
||||||
|
(dev_name != NULL) &&
|
||||||
|
(dev_name[0] != '\0')) {
|
||||||
|
do {
|
||||||
|
serdbg_fd = open(dev_name,O_RDWR);
|
||||||
|
if (serdbg_fd < 0) {
|
||||||
|
err_occurred = TRUE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (serdbg_fd < 3) {
|
||||||
|
if (fd_store_used >= FD_STORE_CNT) {
|
||||||
|
err_occurred = TRUE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fd_store[fd_store_used++] = serdbg_fd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (!err_occurred &&
|
||||||
|
(serdbg_fd < 3));
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* close any fds, that have been placed in fd_store
|
||||||
|
* so fd 0..2 are reusable again
|
||||||
|
*/
|
||||||
|
while (--fd_store_used >= 0) {
|
||||||
|
close(fd_store[fd_store_used]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* capture tty structure
|
||||||
|
*/
|
||||||
|
if (!err_occurred) {
|
||||||
|
iop = &rtems_libio_iops[serdbg_fd];
|
||||||
|
serdbg_tty = iop->data1;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* set device baudrate
|
||||||
|
* (and transp mode, this is not really needed)
|
||||||
|
* ...
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* ... get fd settings
|
||||||
|
*/
|
||||||
|
if (!err_occurred &&
|
||||||
|
(0 != tcgetattr(serdbg_fd,&act_termios))) {
|
||||||
|
err_occurred = TRUE;
|
||||||
|
}
|
||||||
|
if (!err_occurred) {
|
||||||
|
act_termios.c_iflag
|
||||||
|
&= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
|
||||||
|
|INLCR|IGNCR|ICRNL|IXON);
|
||||||
|
act_termios.c_oflag
|
||||||
|
&= ~OPOST;
|
||||||
|
|
||||||
|
act_termios.c_lflag
|
||||||
|
&= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
|
||||||
|
|
||||||
|
cfsetospeed(&act_termios,baudcode);
|
||||||
|
cfsetispeed(&act_termios,baudcode);
|
||||||
|
|
||||||
|
if (0 != tcsetattr(serdbg_fd,TCSANOW,&act_termios)) {
|
||||||
|
err_occurred = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (err_occurred
|
||||||
|
? -1
|
||||||
|
: 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void putDebugChar(char c) __attribute__ ((__weak__));
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
void putDebugChar
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| send one character to serial port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
char c /* character to print */
|
||||||
|
)
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| <none> |
|
||||||
|
\*=========================================================================*/
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* call serdbg polling callout, if available
|
||||||
|
*/
|
||||||
|
if (serdbg_conf.callout != NULL) {
|
||||||
|
serdbg_conf.callout();
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* check, whether debug serial port is available
|
||||||
|
*/
|
||||||
|
if ((serdbg_tty != NULL) &&
|
||||||
|
(serdbg_tty->device.write != NULL)) {
|
||||||
|
/*
|
||||||
|
* send character to debug serial port
|
||||||
|
*/
|
||||||
|
serdbg_tty->device.write(serdbg_tty->minor,&c,1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int getDebugChar(void) __attribute__ ((__weak__));
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
int getDebugChar
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| wait for one character from serial port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
void /* none */
|
||||||
|
)
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| received character |
|
||||||
|
\*=========================================================================*/
|
||||||
|
{
|
||||||
|
int c = -1;
|
||||||
|
/*
|
||||||
|
* check, whether debug serial port is available
|
||||||
|
*/
|
||||||
|
if ((serdbg_tty != NULL) &&
|
||||||
|
(serdbg_tty->device.pollRead != NULL)) {
|
||||||
|
do {
|
||||||
|
/*
|
||||||
|
* call serdbg polling callout, if available
|
||||||
|
*/
|
||||||
|
if (serdbg_conf.callout != NULL) {
|
||||||
|
serdbg_conf.callout();
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* get character from debug serial port
|
||||||
|
*/
|
||||||
|
c = serdbg_tty->device.pollRead(serdbg_tty->minor);
|
||||||
|
} while (c < 0);
|
||||||
|
}
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
233
c/src/libmisc/serdbg/termios_printk.c
Normal file
233
c/src/libmisc/serdbg/termios_printk.c
Normal file
@@ -0,0 +1,233 @@
|
|||||||
|
/*===============================================================*\
|
||||||
|
| File: termios_printk.c |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| Copyright (c) 2002 IMD |
|
||||||
|
| Ingenieurbuero fuer Microcomputertechnik Th. Doerfler |
|
||||||
|
| Hebststr. 8, 82178 Puchheim, Germany |
|
||||||
|
| <Thomas.Doerfler@imd-systems.de> |
|
||||||
|
| The license and distribution terms for this file may be |
|
||||||
|
| found in the file LICENSE in this distribution or at |
|
||||||
|
| http://www.OARcorp.com/rtems/license.html. |
|
||||||
|
| all rights reserved |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| TERMIOS printk support |
|
||||||
|
| this module performs low-level printk output using |
|
||||||
|
| a polled termios driver |
|
||||||
|
| |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| date history ID |
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
||||||
|
| 13.05.02 creation doe |
|
||||||
|
|*****************************************************************|
|
||||||
|
|* $Id$
|
||||||
|
*
|
||||||
|
|*****************************************************************|
|
||||||
|
\*===============================================================*/
|
||||||
|
|
||||||
|
#include <rtems.h>
|
||||||
|
#include <rtems/libio_.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <termios.h>
|
||||||
|
|
||||||
|
#include <rtems/termiostypes.h>
|
||||||
|
#include <rtems/bspIo.h>
|
||||||
|
#include <termios_printk.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* internal variables
|
||||||
|
*/
|
||||||
|
int termios_printk_fd = -1;
|
||||||
|
struct rtems_termios_tty *termios_printk_tty;
|
||||||
|
|
||||||
|
static void _termios_printk_null_char( char c ) {return;}
|
||||||
|
|
||||||
|
BSP_output_char_function_type BSP_output_char = _termios_printk_null_char;
|
||||||
|
BSP_polling_getchar_function_type BSP_poll_char;
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
void termios_printk_outputchar
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| send one character to serial port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
char c /* character to print */
|
||||||
|
)
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| <none> |
|
||||||
|
\*=========================================================================*/
|
||||||
|
{
|
||||||
|
static const char cr = '\r';
|
||||||
|
/*
|
||||||
|
* check, whether printk serial port is available
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ((termios_printk_tty != NULL) &&
|
||||||
|
(termios_printk_tty->device.write != NULL)) {
|
||||||
|
/*
|
||||||
|
* call termios_printk polling callout, if available
|
||||||
|
*/
|
||||||
|
if (termios_printk_conf.callout != NULL) {
|
||||||
|
termios_printk_conf.callout();
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* send character to debug serial port
|
||||||
|
*/
|
||||||
|
if (c == '\n') {
|
||||||
|
termios_printk_tty->device.write(termios_printk_tty->minor,&cr,1);
|
||||||
|
}
|
||||||
|
termios_printk_tty->device.write(termios_printk_tty->minor,&c,1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
char termios_printk_inputchar
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| wait for one character from serial port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
void /* none */
|
||||||
|
)
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| received character |
|
||||||
|
\*=========================================================================*/
|
||||||
|
{
|
||||||
|
int c = -1;
|
||||||
|
/*
|
||||||
|
* check, whether debug serial port is available
|
||||||
|
*/
|
||||||
|
if ((termios_printk_tty != NULL) &&
|
||||||
|
(termios_printk_tty->device.pollRead != NULL)) {
|
||||||
|
do {
|
||||||
|
/*
|
||||||
|
* call termios_printk polling callout, if available
|
||||||
|
*/
|
||||||
|
if (termios_printk_conf.callout != NULL) {
|
||||||
|
termios_printk_conf.callout();
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* get character from debug serial port
|
||||||
|
*/
|
||||||
|
c = termios_printk_tty->device.pollRead(termios_printk_tty->minor);
|
||||||
|
} while (c < 0);
|
||||||
|
}
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
int termios_printk_open
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| try to open given serial debug port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
const char *dev_name, /* name of device to open */
|
||||||
|
unsigned32 baudrate /* baud rate to use */
|
||||||
|
)
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| 0 on success, -1 and errno otherwise |
|
||||||
|
\*=========================================================================*/
|
||||||
|
{
|
||||||
|
boolean err_occurred = FALSE;
|
||||||
|
rtems_libio_t *iop = NULL;
|
||||||
|
struct termios act_termios;
|
||||||
|
tcflag_t baudcode = B0;
|
||||||
|
|
||||||
|
if (termios_printk_fd >= 0) {
|
||||||
|
/*
|
||||||
|
* already initialized
|
||||||
|
*/
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* translate baudrate into baud code
|
||||||
|
*/
|
||||||
|
switch(baudrate) {
|
||||||
|
case 50: baudcode = B50; break;
|
||||||
|
case 75: baudcode = B75; break;
|
||||||
|
case 110: baudcode = B110; break;
|
||||||
|
case 134: baudcode = B134; break;
|
||||||
|
case 150: baudcode = B150; break;
|
||||||
|
case 200: baudcode = B200; break;
|
||||||
|
case 300: baudcode = B300; break;
|
||||||
|
case 600: baudcode = B600; break;
|
||||||
|
case 1200: baudcode = B1200; break;
|
||||||
|
case 1800: baudcode = B1800; break;
|
||||||
|
case 2400: baudcode = B2400; break;
|
||||||
|
case 4800: baudcode = B4800; break;
|
||||||
|
case 9600: baudcode = B9600; break;
|
||||||
|
case 19200: baudcode = B19200; break;
|
||||||
|
case 38400: baudcode = B38400; break;
|
||||||
|
case 57600: baudcode = B57600; break;
|
||||||
|
case 115200: baudcode = B115200; break;
|
||||||
|
case 230400: baudcode = B230400; break;
|
||||||
|
case 460800: baudcode = B460800; break;
|
||||||
|
default : err_occurred = TRUE; errno = EINVAL; break;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* open device for serdbg operation
|
||||||
|
*/
|
||||||
|
if (!err_occurred &&
|
||||||
|
(dev_name != NULL) &&
|
||||||
|
(dev_name[0] != '\0')) {
|
||||||
|
termios_printk_fd = open(dev_name,O_RDWR);
|
||||||
|
if (termios_printk_fd < 0) {
|
||||||
|
err_occurred = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* capture tty structure
|
||||||
|
*/
|
||||||
|
if (!err_occurred) {
|
||||||
|
iop = &rtems_libio_iops[termios_printk_fd];
|
||||||
|
termios_printk_tty = iop->data1;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* set device baudrate
|
||||||
|
* (and transp mode, this is not really needed)
|
||||||
|
* ...
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* ... get fd settings
|
||||||
|
*/
|
||||||
|
if (!err_occurred &&
|
||||||
|
(0 != tcgetattr(termios_printk_fd,&act_termios))) {
|
||||||
|
err_occurred = TRUE;
|
||||||
|
}
|
||||||
|
if (!err_occurred) {
|
||||||
|
|
||||||
|
cfsetospeed(&act_termios,baudcode);
|
||||||
|
cfsetispeed(&act_termios,baudcode);
|
||||||
|
|
||||||
|
if (0 != tcsetattr(termios_printk_fd,TCSANOW,&act_termios)) {
|
||||||
|
err_occurred = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!err_occurred) {
|
||||||
|
BSP_output_char = termios_printk_outputchar;
|
||||||
|
BSP_poll_char = termios_printk_inputchar;
|
||||||
|
}
|
||||||
|
return (err_occurred
|
||||||
|
? -1
|
||||||
|
: 0);
|
||||||
|
}
|
||||||
95
c/src/libmisc/serdbg/termios_printk.h
Normal file
95
c/src/libmisc/serdbg/termios_printk.h
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
/*===============================================================*\
|
||||||
|
| Project: RTEMS remote gdb over serial line |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| File: termios_printk.h |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| Copyright (c) 2002 IMD |
|
||||||
|
| Ingenieurbuero fuer Microcomputertechnik Th. Doerfler |
|
||||||
|
| <Thomas.Doerfler@imd-systems.de> |
|
||||||
|
| all rights reserved |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| this file declares intialization functions to add |
|
||||||
|
| printk polled output via termios polled drivers |
|
||||||
|
| |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| date history ID |
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
||||||
|
| 13.04.02 creation doe |
|
||||||
|
\*===============================================================*/
|
||||||
|
/*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
#ifndef _TERMIOS_PRINTK_H
|
||||||
|
#define _TERMIOS_PRINTK_H
|
||||||
|
|
||||||
|
#include <rtems.h>
|
||||||
|
#include <termios.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
unsigned32 baudrate; /* debug baud rate, e.g. 57600 */
|
||||||
|
void (*callout)(void); /* callout pointer during polling */
|
||||||
|
const char *devname; /* debug device, e.g. "/dev/tty01" */
|
||||||
|
} termios_printk_conf_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* must be defined in init module...
|
||||||
|
*/
|
||||||
|
extern termios_printk_conf_t termios_printk_conf;
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
void termios_printk_outputchar
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| send one character to serial port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
char c /* character to print */
|
||||||
|
);
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| <none> |
|
||||||
|
\*=========================================================================*/
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
char termios_printk_inputchar
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| wait for one character from serial port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
void /* none */
|
||||||
|
);
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| received character |
|
||||||
|
\*=========================================================================*/
|
||||||
|
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
int termios_printk_open
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| try to open given serial debug port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
const char *dev_name, /* name of device to open */
|
||||||
|
unsigned32 baudrate /* baud rate to use */
|
||||||
|
);
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| 0 on success, -1 and errno otherwise |
|
||||||
|
\*=========================================================================*/
|
||||||
|
#endif /* _TERMIOS_PRINTK_H */
|
||||||
70
c/src/libmisc/serdbg/termios_printk_cnf.h
Normal file
70
c/src/libmisc/serdbg/termios_printk_cnf.h
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
/*===============================================================*\
|
||||||
|
| Project: RTEMS configure remote gdb over serial line |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| File: termios_printk_cnf.h |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| Copyright (c) 2002 IMD |
|
||||||
|
| Ingenieurbuero fuer Microcomputertechnik Th. Doerfler |
|
||||||
|
| <Thomas.Doerfler@imd-systems.de> |
|
||||||
|
| all rights reserved |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| this file declares intialization functions to add |
|
||||||
|
| printk support via polled termios |
|
||||||
|
| |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| date history ID |
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
||||||
|
| 13.05.02 creation doe |
|
||||||
|
\*===============================================================*/
|
||||||
|
/*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
#ifndef _TERMIOS_PRINTK_CNF_H
|
||||||
|
#define _TERMIOS_PRINTK_CNF_H
|
||||||
|
|
||||||
|
#include "termios_printk.h"
|
||||||
|
|
||||||
|
#ifdef CONFIGURE_INIT
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fallback for baud rate to use
|
||||||
|
*/
|
||||||
|
#ifndef CONFIGURE_TERMIOS_PRINTK_BAUDRATE
|
||||||
|
#define CONFIGURE_TERMIOS_PRINTK_BAUDRATE 9600
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fallback for device name to use
|
||||||
|
*/
|
||||||
|
#ifndef CONFIGURE_TERMIOS_PRINTK_DEVNAME
|
||||||
|
#define CONFIGURE_TERMIOS_PRINTK_DEVNAME "/dev/console"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIGURE_USE_TERMIOS_PRINTK
|
||||||
|
/*
|
||||||
|
* fill in termios_printk_conf structure
|
||||||
|
*/
|
||||||
|
termios_printk_conf_t termios_printk_conf = {
|
||||||
|
CONFIGURE_TERMIOS_PRINTK_BAUDRATE,
|
||||||
|
|
||||||
|
#ifdef CONFIGURE_TERMIOS_PRINTK_CALLOUT
|
||||||
|
CONFIGURE_TERMIOS_PRINTK_CALLOUT,
|
||||||
|
#else
|
||||||
|
NULL,
|
||||||
|
#endif
|
||||||
|
CONFIGURE_TERMIOS_PRINTK_DEVNAME,
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int termios_printk_init(void) {
|
||||||
|
#ifdef CONFIGURE_USE_TERMIOS_PRINTK
|
||||||
|
return termios_printk_open(termios_printk_conf.devname,
|
||||||
|
termios_printk_conf.baudrate);
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* CONFIGURE_INIT */
|
||||||
|
|
||||||
|
#endif /* _TERMIOS_PRINTK_CNF_H */
|
||||||
@@ -15,7 +15,8 @@ TMP_LIBS = ../monitor/$(ARCH)/libmonitor-tmp.a \
|
|||||||
../cpuuse/$(ARCH)/libcpuuse-tmp.a ../rtmonuse/$(ARCH)/librtmonuse-tmp.a \
|
../cpuuse/$(ARCH)/libcpuuse-tmp.a ../rtmonuse/$(ARCH)/librtmonuse-tmp.a \
|
||||||
../shell/$(ARCH)/libshell-tmp.a ../dumpbuf/$(ARCH)/libdumpbuf-tmp.a \
|
../shell/$(ARCH)/libshell-tmp.a ../dumpbuf/$(ARCH)/libdumpbuf-tmp.a \
|
||||||
../devnull/$(ARCH)/libdevnull-tmp.a ../dummy/$(ARCH)/libdummy-tmp.a \
|
../devnull/$(ARCH)/libdevnull-tmp.a ../dummy/$(ARCH)/libdummy-tmp.a \
|
||||||
../mw-fb/$(ARCH)/libmw-fb-tmp.a ../capture/$(ARCH)/libcapture-tmp.a
|
../mw-fb/$(ARCH)/libmw-fb-tmp.a ../capture/$(ARCH)/libcapture-tmp.a \
|
||||||
|
../serdbg/$(ARCH)/libserdbg-tmp.a
|
||||||
|
|
||||||
#
|
#
|
||||||
# (OPTIONAL) Add local stuff here using +=
|
# (OPTIONAL) Add local stuff here using +=
|
||||||
|
|||||||
@@ -1,3 +1,15 @@
|
|||||||
|
2002-06-25 Thomas Doerfler <Thomas.Doerfler@imd-systems.de>
|
||||||
|
|
||||||
|
* With the addition of serdbg, the standard polled I/O functions
|
||||||
|
for gdbstub and/or printk are optionally routed to any termios-aware
|
||||||
|
device driver, that supports polled mode. See libmisc/serdbg/README.
|
||||||
|
* serdbg/Makefile.am, serdbg/README, serdbg/serdbg.c, serdbg/serdbg.h,
|
||||||
|
serdbg/serdbgcnf.h, serdbg/serdbgio.c, serdbg/termios_printk.c,
|
||||||
|
serdbg/termios_printk.h, serdbg/termios_printk_cnf.h,
|
||||||
|
serdbg/.cvsignore: New files.
|
||||||
|
* configure.ac, Makefile.am, wrapup/Makefile.am: Modified to
|
||||||
|
reflect addition.
|
||||||
|
|
||||||
2002-06-26 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
2002-06-26 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
|
||||||
|
|
||||||
* wrapup/Makefile.am: Don't preinstall libmisc.a.
|
* wrapup/Makefile.am: Don't preinstall libmisc.a.
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
ACLOCAL_AMFLAGS = -I ../../../aclocal
|
ACLOCAL_AMFLAGS = -I ../../../aclocal
|
||||||
|
|
||||||
SUBDIRS = capture cpuuse devnull dummy dumpbuf monitor mw-fb shell \
|
SUBDIRS = capture cpuuse devnull dummy dumpbuf monitor mw-fb shell \
|
||||||
rtmonuse stackchk untar wrapup
|
rtmonuse serdbg stackchk untar wrapup
|
||||||
|
|
||||||
EXTRA_DIST = README
|
EXTRA_DIST = README
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ dummy/Makefile
|
|||||||
dumpbuf/Makefile
|
dumpbuf/Makefile
|
||||||
monitor/Makefile
|
monitor/Makefile
|
||||||
rtmonuse/Makefile
|
rtmonuse/Makefile
|
||||||
|
serdbg/Makefile
|
||||||
stackchk/Makefile
|
stackchk/Makefile
|
||||||
capture/Makefile
|
capture/Makefile
|
||||||
untar/Makefile
|
untar/Makefile
|
||||||
|
|||||||
2
cpukit/libmisc/serdbg/.cvsignore
Normal file
2
cpukit/libmisc/serdbg/.cvsignore
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
Makefile
|
||||||
|
Makefile.in
|
||||||
47
cpukit/libmisc/serdbg/Makefile.am
Normal file
47
cpukit/libmisc/serdbg/Makefile.am
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
##
|
||||||
|
## $Id$
|
||||||
|
##
|
||||||
|
|
||||||
|
AUTOMAKE_OPTIONS = foreign 1.4
|
||||||
|
|
||||||
|
include_rtemsdir = $(includedir)/rtems
|
||||||
|
|
||||||
|
LIBNAME = libserdbg-tmp
|
||||||
|
LIB = $(ARCH)/$(LIBNAME).a
|
||||||
|
|
||||||
|
C_FILES = serdbg.c serdbgio.c termios_printk.c
|
||||||
|
C_O_FILES = $(C_FILES:%.c=$(ARCH)/%.o)
|
||||||
|
|
||||||
|
noinst_HEADERS =
|
||||||
|
include_HEADERS = serdbgcnf.h serdbg.h termios_printk_cnf.h \
|
||||||
|
termios_printk.h
|
||||||
|
|
||||||
|
OBJS = $(C_O_FILES)
|
||||||
|
|
||||||
|
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
|
||||||
|
include $(top_srcdir)/../../../automake/compile.am
|
||||||
|
include $(top_srcdir)/../../../automake/lib.am
|
||||||
|
|
||||||
|
$(PROJECT_INCLUDE):
|
||||||
|
@$(mkinstalldirs) $@
|
||||||
|
$(PROJECT_INCLUDE)/%.h: %.h
|
||||||
|
$(INSTALL_DATA) $< $@
|
||||||
|
|
||||||
|
#
|
||||||
|
# (OPTIONAL) Add local stuff here using +=
|
||||||
|
#
|
||||||
|
|
||||||
|
$(LIB): $(OBJS)
|
||||||
|
$(make-library)
|
||||||
|
|
||||||
|
PREINSTALL_FILES = $(PROJECT_INCLUDE) \
|
||||||
|
$(include_HEADERS:%=$(PROJECT_INCLUDE)/%)
|
||||||
|
|
||||||
|
all-local: $(ARCH) $(PREINSTALL_FILES) $(OBJS) $(LIB)
|
||||||
|
|
||||||
|
.PRECIOUS: $(LIB)
|
||||||
|
|
||||||
|
EXTRA_DIST = README serdbg.c serdbgio.c serdbgcnf.h serdbg.h \
|
||||||
|
termios_printk.c termios_printk.h termios_printk_cnf.h
|
||||||
|
|
||||||
|
include $(top_srcdir)/../../../automake/local.am
|
||||||
138
cpukit/libmisc/serdbg/README
Normal file
138
cpukit/libmisc/serdbg/README
Normal file
@@ -0,0 +1,138 @@
|
|||||||
|
#
|
||||||
|
# $Id$
|
||||||
|
#
|
||||||
|
|
||||||
|
This directory contains three useful packages related to the termios I/O
|
||||||
|
system:
|
||||||
|
|
||||||
|
PACKAGE SERDBGIO
|
||||||
|
================
|
||||||
|
"serdbgio" provides the "serial gdb" standard I/O functions "getDebugChar"
|
||||||
|
and "putDebugChar" for any device driver supporting polled termios mode.
|
||||||
|
|
||||||
|
The initialization function "serdbg_open" opens the v.24 port intended
|
||||||
|
for the serial debug connection, and sets the desired baud rate. The
|
||||||
|
"getDebugChar" and "putDebugChar" functions then interact with the
|
||||||
|
corresponding driver using the calls intended for polled termios
|
||||||
|
operation.
|
||||||
|
|
||||||
|
Specification for the debug device, baud rate and other parameters is
|
||||||
|
done in a global structure of type "serdbg_conf_t". A configuration
|
||||||
|
mechanism quite similar to the overall RTEMS configuration is available.
|
||||||
|
|
||||||
|
PACKAGE SERDBG
|
||||||
|
==============
|
||||||
|
"serdbg" provides a means to optionally initialize and/or start a
|
||||||
|
serial gdb session as soon as possible, this means as soon as all
|
||||||
|
drivers have been initialized. The serial debug I/O functions can
|
||||||
|
either be integrated as special routines of the BSP drivers, or using
|
||||||
|
the package "serdbgio"
|
||||||
|
|
||||||
|
PACKAGE TERMIOS_PRINTK
|
||||||
|
======================
|
||||||
|
"termios_printk" provides a standard output function suitable to use
|
||||||
|
with "printk". It uses the same technique as serdbgio, hooking the
|
||||||
|
interface between a polled device driver and the termios system.
|
||||||
|
|
||||||
|
|
||||||
|
REQUIREMENTS
|
||||||
|
============
|
||||||
|
|
||||||
|
- These two packages can be used with any polled termios device
|
||||||
|
driver.
|
||||||
|
- For standard initialization, they need a modified "bsppost.c"
|
||||||
|
to perform the initialization calls.
|
||||||
|
|
||||||
|
USAGE
|
||||||
|
=====
|
||||||
|
|
||||||
|
For using these packages add the following to your "init" module or
|
||||||
|
your "system.h" file (Note: most macro settings fall back to a
|
||||||
|
default, if not set.):
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CONFIGURE_USE_SERDBG
|
||||||
|
* set this macro, if you want to connect gdb over a serial line
|
||||||
|
* when set, the debug stub will be connected after driver
|
||||||
|
* initialization in "bsppost.c"
|
||||||
|
*/
|
||||||
|
#define CONFIGURE_USE_SERDBG
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CONFIGURE_SERDBG_SKIP_INIT_BKPT
|
||||||
|
* set this macro, if you do not want the gdb interface to wait for a
|
||||||
|
* debugger connection directly after initialization
|
||||||
|
* If you set this macro, the gdb stub will only hook various
|
||||||
|
* exception vectors when called from "bsppost.c".
|
||||||
|
*/
|
||||||
|
/* #define CONFIGURE_SERDBG_SKIP_INIT_BKPT */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CONFIGURE_SERDBG_USE_POLLED_TERMIOS
|
||||||
|
* set this macro, if you want "serdbgio" to provide the I/O
|
||||||
|
* functions for the serial gdb connection
|
||||||
|
*/
|
||||||
|
#define CONFIGURE_SERDBG_USE_POLLED_TERMIOS
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CONFIGURE_SERDBG_DEVNAME
|
||||||
|
* use this macro to specify the serial device to use
|
||||||
|
* for "serdbgio".
|
||||||
|
* Only used, when CONFIGURE_SERDBG_USE_POLLED_TERMIOS is set
|
||||||
|
*/
|
||||||
|
#define CONFIGURE_SERDBG_DEVNAME "/dev/tty03"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CONFIGURE_SERDBG_BAUDRATE
|
||||||
|
* use this macro to specify the baud rate to use
|
||||||
|
* for "serdbgio".
|
||||||
|
* Only used, when CONFIGURE_SERDBG_USE_POLLED_TERMIOS is set
|
||||||
|
*/
|
||||||
|
#define CONFIGURE_SERDBG_BAUDRATE 57600
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CONFIGURE_SERDBG_CALLOUT
|
||||||
|
* use this macro to specify a routine that will called during I/O polling
|
||||||
|
* Only used, when CONFIGURE_SERDBG_USE_POLLED_TERMIOS is set
|
||||||
|
* This function of type "void pollfnc(void)" can be used for e.g.
|
||||||
|
* tickling a watchdog
|
||||||
|
*/
|
||||||
|
/* #define CONFIGURE_SERDBG_CALLOUT tickle_my_watchdog_fnc */
|
||||||
|
|
||||||
|
#include <serdbgcnf.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CONFIGURE_USE_TERMIOS_PRINTK
|
||||||
|
* set this macro, if you want printk output to be sent to a serial
|
||||||
|
* driver using the polled termios interface
|
||||||
|
* when set, the printk output function will be connected after driver
|
||||||
|
* initialization in "bsppost.c"
|
||||||
|
*/
|
||||||
|
#define CONFIGURE_USE_TERMIOS_PRINTK
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CONFIGURE_TERMIOS_PRINTK_DEVNAME
|
||||||
|
* use this macro to specify the serial device to use
|
||||||
|
* for printk output.
|
||||||
|
* Only used, when CONFIGURE_USE_TERMIOS_PRINTK is set
|
||||||
|
*/
|
||||||
|
#define CONFIGURE_TERMIOS_PRINTK_DEVNAME "/dev/console"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CONFIGURE_TERMIOS_PRINTK_BAUDRATE
|
||||||
|
* use this macro to specify the baudrate to use
|
||||||
|
* for printk output.
|
||||||
|
* Only used, when CONFIGURE_USE_TERMIOS_PRINTK is set
|
||||||
|
*/
|
||||||
|
#define CONFIGURE_TERMIOS_PRINTK_BAUDRATE 9600
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CONFIGURE_TERMIOS_PRINTK_CALLOUT
|
||||||
|
* use this macro to specify a routine that will called during I/O polling
|
||||||
|
* This function of type "void pollfnc(void)" can be used for e.g.
|
||||||
|
* tickling a watchdog
|
||||||
|
*/
|
||||||
|
/* #define CONFIGURE_TERMIOS_PRINTK_CALLOUT tickle_my_watchdog_fnc */
|
||||||
|
|
||||||
|
#include <termios_printk_cnf.h>
|
||||||
90
cpukit/libmisc/serdbg/serdbg.c
Normal file
90
cpukit/libmisc/serdbg/serdbg.c
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
/*===============================================================*\
|
||||||
|
| Project: RTEMS remote gdb over serial line |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| File: serdbg.c |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| Copyright (c) 2002 IMD |
|
||||||
|
| Ingenieurbuero fuer Microcomputertechnik Th. Doerfler |
|
||||||
|
| <Thomas.Doerfler@imd-systems.de> |
|
||||||
|
| all rights reserved |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| this file contains intialization and utility functions to add |
|
||||||
|
| a gdb remote debug stub to an RTEMS system |
|
||||||
|
| |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| date history ID |
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
||||||
|
| 04.04.02 creation doe |
|
||||||
|
\*===============================================================*/
|
||||||
|
/*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
#include <rtems.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <serdbg.h>
|
||||||
|
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
int serdbg_init_dbg
|
||||||
|
(
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| initialize remote gdb session over serial line |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
void
|
||||||
|
)
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| rtems_status_code |
|
||||||
|
\*=========================================================================*/
|
||||||
|
{
|
||||||
|
static boolean is_initialized = FALSE;
|
||||||
|
|
||||||
|
rtems_status_code rc = RTEMS_SUCCESSFUL;
|
||||||
|
extern void set_debug_traps(void);
|
||||||
|
extern void breakpoint(void);
|
||||||
|
|
||||||
|
if (is_initialized) {
|
||||||
|
return RTEMS_SUCCESSFUL;
|
||||||
|
}
|
||||||
|
is_initialized = TRUE;
|
||||||
|
/*
|
||||||
|
* try to open serial device
|
||||||
|
*/
|
||||||
|
if (rc == RTEMS_SUCCESSFUL) {
|
||||||
|
if ((serdbg_conf.open_io != NULL) &&
|
||||||
|
(0 > serdbg_conf.open_io(serdbg_conf.devname,serdbg_conf.baudrate))) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"remote_gdb_init: cannot open device %s "
|
||||||
|
"for gdb connection:%s\n",serdbg_conf.devname,strerror(errno));
|
||||||
|
rc = RTEMS_IO_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* initialize gdb stub
|
||||||
|
*/
|
||||||
|
if (rc == RTEMS_SUCCESSFUL) {
|
||||||
|
set_debug_traps();
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* now activate gdb stub
|
||||||
|
*/
|
||||||
|
if ((rc == RTEMS_SUCCESSFUL) &&
|
||||||
|
!serdbg_conf.skip_init_bkpt) {
|
||||||
|
breakpoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* return to original function
|
||||||
|
* this may be already unter gdb control
|
||||||
|
*/
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
174
cpukit/libmisc/serdbg/serdbg.h
Normal file
174
cpukit/libmisc/serdbg/serdbg.h
Normal file
@@ -0,0 +1,174 @@
|
|||||||
|
/*===============================================================*\
|
||||||
|
| Project: RTEMS remote gdb over serial line |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| File: serdbg.h |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| Copyright (c) 2002 IMD |
|
||||||
|
| Ingenieurbuero fuer Microcomputertechnik Th. Doerfler |
|
||||||
|
| <Thomas.Doerfler@imd-systems.de> |
|
||||||
|
| all rights reserved |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| this file declares intialization functions to add |
|
||||||
|
| a gdb remote debug stub to an RTEMS system |
|
||||||
|
| |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| date history ID |
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
||||||
|
| 04.04.02 creation doe |
|
||||||
|
\*===============================================================*/
|
||||||
|
/*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
#ifndef _SERDBG_H
|
||||||
|
#define _SERDBG_H
|
||||||
|
|
||||||
|
#include <rtems.h>
|
||||||
|
#include <termios.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
unsigned32 baudrate; /* debug baud rate, e.g. 57600 */
|
||||||
|
void (*callout)(void); /* callout pointer during polling */
|
||||||
|
int (*open_io)(const char *dev_name,unsigned32 baudrate); /* I/O open fnc */
|
||||||
|
const char *devname; /* debug device, e.g. "/dev/tty01" */
|
||||||
|
unsigned8 skip_init_bkpt; /* if TRUE, do not stop when initializing */
|
||||||
|
} serdbg_conf_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* must be defined in init module...
|
||||||
|
*/
|
||||||
|
extern serdbg_conf_t serdbg_conf;
|
||||||
|
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
void putDebugChar
|
||||||
|
(
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| send character to remote debugger |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
char c /* char to send */
|
||||||
|
);
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| <none> |
|
||||||
|
\*=========================================================================*/
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
int getDebugChar
|
||||||
|
(
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| get character from remote debugger |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
void /* <none> */
|
||||||
|
);
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| <none> |
|
||||||
|
\*=========================================================================*/
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
void serdbg_exceptionHandler
|
||||||
|
(
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| hook directly to an exception vector |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
int vecnum, /* vector index to hook at */
|
||||||
|
void *vector /* address of handler function */
|
||||||
|
);
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| <none> |
|
||||||
|
\*=========================================================================*/
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
int serdbg_init
|
||||||
|
(
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| initialize remote gdb session over serial line |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
void
|
||||||
|
);
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| rtems_status_code |
|
||||||
|
\*=========================================================================*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* stuff from serdbgio.c
|
||||||
|
*/
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
int serdbg_open
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| try to open given serial debug port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
const char *dev_name, /* name of device to open */
|
||||||
|
unsigned32 baudrate /* baud rate to use */
|
||||||
|
);
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| 0 on success, -1 and errno otherwise |
|
||||||
|
\*=========================================================================*/
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
void putDebugChar
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| send one character to serial port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
char c /* character to print */
|
||||||
|
);
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| <none> |
|
||||||
|
\*=========================================================================*/
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
int getDebugChar
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| wait for one character from serial port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
void /* none */
|
||||||
|
);
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| received character |
|
||||||
|
\*=========================================================================*/
|
||||||
|
|
||||||
|
#endif /* _SERDBG_H */
|
||||||
81
cpukit/libmisc/serdbg/serdbgcnf.h
Normal file
81
cpukit/libmisc/serdbg/serdbgcnf.h
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
/*===============================================================*\
|
||||||
|
| Project: RTEMS configure remote gdb over serial line |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| File: serdbgcnf.h |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| Copyright (c) 2002 IMD |
|
||||||
|
| Ingenieurbuero fuer Microcomputertechnik Th. Doerfler |
|
||||||
|
| <Thomas.Doerfler@imd-systems.de> |
|
||||||
|
| all rights reserved |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| this file declares intialization functions to add |
|
||||||
|
| a gdb remote debug stub to an RTEMS system |
|
||||||
|
| |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| date history ID |
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
||||||
|
| 13.05.02 creation doe |
|
||||||
|
\*===============================================================*/
|
||||||
|
/*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
#ifndef _SERDBGCNF_H
|
||||||
|
#define _SERDBGCNF_H
|
||||||
|
|
||||||
|
#include "serdbg.h"
|
||||||
|
|
||||||
|
#ifdef CONFIGURE_INIT
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fallback for baud rate to use
|
||||||
|
*/
|
||||||
|
#ifndef CONFIGURE_SERDBG_BAUDRATE
|
||||||
|
#define CONFIGURE_SERDBG_BAUDRATE 9600
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fallback for device name to use
|
||||||
|
*/
|
||||||
|
#ifndef CONFIGURE_SERDBG_DEVNAME
|
||||||
|
#define CONFIGURE_SERDBG_DEVNAME "/dev/tty01"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fill in serdbg_conf structure
|
||||||
|
*/
|
||||||
|
serdbg_conf_t serdbg_conf = {
|
||||||
|
CONFIGURE_SERDBG_BAUDRATE,
|
||||||
|
|
||||||
|
#ifdef CONFIGURE_SERDBG_CALLOUT
|
||||||
|
CONFIGURE_SERDBG_CALLOUT,
|
||||||
|
#else
|
||||||
|
NULL,
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIGURE_SERDBG_USE_POLLED_TERMIOS
|
||||||
|
serdbg_open,
|
||||||
|
#else
|
||||||
|
NULL,
|
||||||
|
#endif
|
||||||
|
|
||||||
|
CONFIGURE_SERDBG_DEVNAME,
|
||||||
|
|
||||||
|
#ifdef CONFIGURE_SERDBG_SKIP_INIT_BKPT
|
||||||
|
TRUE,
|
||||||
|
#else
|
||||||
|
FALSE,
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
int serdbg_init(void) {
|
||||||
|
#ifdef CONFIGURE_USE_SERDBG
|
||||||
|
extern int serdbg_init_dbg(void);
|
||||||
|
return serdbg_init_dbg();
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* CONFIGURE_INIT */
|
||||||
|
|
||||||
|
#endif /* _SERDBGCNF_H */
|
||||||
252
cpukit/libmisc/serdbg/serdbgio.c
Normal file
252
cpukit/libmisc/serdbg/serdbgio.c
Normal file
@@ -0,0 +1,252 @@
|
|||||||
|
/*===============================================================*\
|
||||||
|
| File: serdbgio.c |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| Copyright (c) 2002 IMD |
|
||||||
|
| Ingenieurbuero fuer Microcomputertechnik Th. Doerfler |
|
||||||
|
| Hebststr. 8, 82178 Puchheim, Germany |
|
||||||
|
| <Thomas.Doerfler@imd-systems.de> |
|
||||||
|
| The license and distribution terms for this file may be |
|
||||||
|
| found in the file LICENSE in this distribution or at |
|
||||||
|
| http://www.OARcorp.com/rtems/license.html. |
|
||||||
|
| all rights reserved |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| TERMIOS serial gdb interface support |
|
||||||
|
| the functions in this file allow the standard gdb stubs like |
|
||||||
|
| "m68k-stub.c" to access any serial interfaces that work with |
|
||||||
|
| RTEMS termios in polled mode |
|
||||||
|
| |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| date history ID |
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
||||||
|
| 10.05.02 creation doe |
|
||||||
|
|*****************************************************************|
|
||||||
|
|* $Id$
|
||||||
|
*
|
||||||
|
|*****************************************************************|
|
||||||
|
\*===============================================================*/
|
||||||
|
|
||||||
|
#include <rtems.h>
|
||||||
|
#include <rtems/libio_.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <termios.h>
|
||||||
|
|
||||||
|
#include <rtems/termiostypes.h>
|
||||||
|
#include <serdbg.h>
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* internal variables
|
||||||
|
*/
|
||||||
|
int serdbg_fd = -1;
|
||||||
|
struct rtems_termios_tty *serdbg_tty;
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
int serdbg_open
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| try to open given serial debug port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
const char *dev_name, /* name of device to open */
|
||||||
|
unsigned32 baudrate /* baud rate to use */
|
||||||
|
)
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| 0 on success, -1 and errno otherwise |
|
||||||
|
\*=========================================================================*/
|
||||||
|
{
|
||||||
|
boolean err_occurred = FALSE;
|
||||||
|
rtems_libio_t *iop = NULL;
|
||||||
|
struct termios act_termios;
|
||||||
|
tcflag_t baudcode = B0;
|
||||||
|
|
||||||
|
#define FD_STORE_CNT 3
|
||||||
|
int fd_store[FD_STORE_CNT];
|
||||||
|
int fd_store_used = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* translate baudrate into baud code
|
||||||
|
*/
|
||||||
|
switch(baudrate) {
|
||||||
|
case 50: baudcode = B50; break;
|
||||||
|
case 75: baudcode = B75; break;
|
||||||
|
case 110: baudcode = B110; break;
|
||||||
|
case 134: baudcode = B134; break;
|
||||||
|
case 150: baudcode = B150; break;
|
||||||
|
case 200: baudcode = B200; break;
|
||||||
|
case 300: baudcode = B300; break;
|
||||||
|
case 600: baudcode = B600; break;
|
||||||
|
case 1200: baudcode = B1200; break;
|
||||||
|
case 1800: baudcode = B1800; break;
|
||||||
|
case 2400: baudcode = B2400; break;
|
||||||
|
case 4800: baudcode = B4800; break;
|
||||||
|
case 9600: baudcode = B9600; break;
|
||||||
|
case 19200: baudcode = B19200; break;
|
||||||
|
case 38400: baudcode = B38400; break;
|
||||||
|
case 57600: baudcode = B57600; break;
|
||||||
|
case 115200: baudcode = B115200; break;
|
||||||
|
case 230400: baudcode = B230400; break;
|
||||||
|
case 460800: baudcode = B460800; break;
|
||||||
|
default : err_occurred = TRUE; errno = EINVAL; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* open device for serdbg operation
|
||||||
|
* skip any fds that are between 0..2, because they are
|
||||||
|
* reserved for stdin/out/err
|
||||||
|
*/
|
||||||
|
if (!err_occurred &&
|
||||||
|
(dev_name != NULL) &&
|
||||||
|
(dev_name[0] != '\0')) {
|
||||||
|
do {
|
||||||
|
serdbg_fd = open(dev_name,O_RDWR);
|
||||||
|
if (serdbg_fd < 0) {
|
||||||
|
err_occurred = TRUE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (serdbg_fd < 3) {
|
||||||
|
if (fd_store_used >= FD_STORE_CNT) {
|
||||||
|
err_occurred = TRUE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fd_store[fd_store_used++] = serdbg_fd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (!err_occurred &&
|
||||||
|
(serdbg_fd < 3));
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* close any fds, that have been placed in fd_store
|
||||||
|
* so fd 0..2 are reusable again
|
||||||
|
*/
|
||||||
|
while (--fd_store_used >= 0) {
|
||||||
|
close(fd_store[fd_store_used]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* capture tty structure
|
||||||
|
*/
|
||||||
|
if (!err_occurred) {
|
||||||
|
iop = &rtems_libio_iops[serdbg_fd];
|
||||||
|
serdbg_tty = iop->data1;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* set device baudrate
|
||||||
|
* (and transp mode, this is not really needed)
|
||||||
|
* ...
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* ... get fd settings
|
||||||
|
*/
|
||||||
|
if (!err_occurred &&
|
||||||
|
(0 != tcgetattr(serdbg_fd,&act_termios))) {
|
||||||
|
err_occurred = TRUE;
|
||||||
|
}
|
||||||
|
if (!err_occurred) {
|
||||||
|
act_termios.c_iflag
|
||||||
|
&= ~(IGNBRK|BRKINT|PARMRK|ISTRIP
|
||||||
|
|INLCR|IGNCR|ICRNL|IXON);
|
||||||
|
act_termios.c_oflag
|
||||||
|
&= ~OPOST;
|
||||||
|
|
||||||
|
act_termios.c_lflag
|
||||||
|
&= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
|
||||||
|
|
||||||
|
cfsetospeed(&act_termios,baudcode);
|
||||||
|
cfsetispeed(&act_termios,baudcode);
|
||||||
|
|
||||||
|
if (0 != tcsetattr(serdbg_fd,TCSANOW,&act_termios)) {
|
||||||
|
err_occurred = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (err_occurred
|
||||||
|
? -1
|
||||||
|
: 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void putDebugChar(char c) __attribute__ ((__weak__));
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
void putDebugChar
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| send one character to serial port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
char c /* character to print */
|
||||||
|
)
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| <none> |
|
||||||
|
\*=========================================================================*/
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* call serdbg polling callout, if available
|
||||||
|
*/
|
||||||
|
if (serdbg_conf.callout != NULL) {
|
||||||
|
serdbg_conf.callout();
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* check, whether debug serial port is available
|
||||||
|
*/
|
||||||
|
if ((serdbg_tty != NULL) &&
|
||||||
|
(serdbg_tty->device.write != NULL)) {
|
||||||
|
/*
|
||||||
|
* send character to debug serial port
|
||||||
|
*/
|
||||||
|
serdbg_tty->device.write(serdbg_tty->minor,&c,1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int getDebugChar(void) __attribute__ ((__weak__));
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
int getDebugChar
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| wait for one character from serial port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
void /* none */
|
||||||
|
)
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| received character |
|
||||||
|
\*=========================================================================*/
|
||||||
|
{
|
||||||
|
int c = -1;
|
||||||
|
/*
|
||||||
|
* check, whether debug serial port is available
|
||||||
|
*/
|
||||||
|
if ((serdbg_tty != NULL) &&
|
||||||
|
(serdbg_tty->device.pollRead != NULL)) {
|
||||||
|
do {
|
||||||
|
/*
|
||||||
|
* call serdbg polling callout, if available
|
||||||
|
*/
|
||||||
|
if (serdbg_conf.callout != NULL) {
|
||||||
|
serdbg_conf.callout();
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* get character from debug serial port
|
||||||
|
*/
|
||||||
|
c = serdbg_tty->device.pollRead(serdbg_tty->minor);
|
||||||
|
} while (c < 0);
|
||||||
|
}
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
233
cpukit/libmisc/serdbg/termios_printk.c
Normal file
233
cpukit/libmisc/serdbg/termios_printk.c
Normal file
@@ -0,0 +1,233 @@
|
|||||||
|
/*===============================================================*\
|
||||||
|
| File: termios_printk.c |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| Copyright (c) 2002 IMD |
|
||||||
|
| Ingenieurbuero fuer Microcomputertechnik Th. Doerfler |
|
||||||
|
| Hebststr. 8, 82178 Puchheim, Germany |
|
||||||
|
| <Thomas.Doerfler@imd-systems.de> |
|
||||||
|
| The license and distribution terms for this file may be |
|
||||||
|
| found in the file LICENSE in this distribution or at |
|
||||||
|
| http://www.OARcorp.com/rtems/license.html. |
|
||||||
|
| all rights reserved |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| TERMIOS printk support |
|
||||||
|
| this module performs low-level printk output using |
|
||||||
|
| a polled termios driver |
|
||||||
|
| |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| date history ID |
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
||||||
|
| 13.05.02 creation doe |
|
||||||
|
|*****************************************************************|
|
||||||
|
|* $Id$
|
||||||
|
*
|
||||||
|
|*****************************************************************|
|
||||||
|
\*===============================================================*/
|
||||||
|
|
||||||
|
#include <rtems.h>
|
||||||
|
#include <rtems/libio_.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <termios.h>
|
||||||
|
|
||||||
|
#include <rtems/termiostypes.h>
|
||||||
|
#include <rtems/bspIo.h>
|
||||||
|
#include <termios_printk.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* internal variables
|
||||||
|
*/
|
||||||
|
int termios_printk_fd = -1;
|
||||||
|
struct rtems_termios_tty *termios_printk_tty;
|
||||||
|
|
||||||
|
static void _termios_printk_null_char( char c ) {return;}
|
||||||
|
|
||||||
|
BSP_output_char_function_type BSP_output_char = _termios_printk_null_char;
|
||||||
|
BSP_polling_getchar_function_type BSP_poll_char;
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
void termios_printk_outputchar
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| send one character to serial port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
char c /* character to print */
|
||||||
|
)
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| <none> |
|
||||||
|
\*=========================================================================*/
|
||||||
|
{
|
||||||
|
static const char cr = '\r';
|
||||||
|
/*
|
||||||
|
* check, whether printk serial port is available
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ((termios_printk_tty != NULL) &&
|
||||||
|
(termios_printk_tty->device.write != NULL)) {
|
||||||
|
/*
|
||||||
|
* call termios_printk polling callout, if available
|
||||||
|
*/
|
||||||
|
if (termios_printk_conf.callout != NULL) {
|
||||||
|
termios_printk_conf.callout();
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* send character to debug serial port
|
||||||
|
*/
|
||||||
|
if (c == '\n') {
|
||||||
|
termios_printk_tty->device.write(termios_printk_tty->minor,&cr,1);
|
||||||
|
}
|
||||||
|
termios_printk_tty->device.write(termios_printk_tty->minor,&c,1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
char termios_printk_inputchar
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| wait for one character from serial port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
void /* none */
|
||||||
|
)
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| received character |
|
||||||
|
\*=========================================================================*/
|
||||||
|
{
|
||||||
|
int c = -1;
|
||||||
|
/*
|
||||||
|
* check, whether debug serial port is available
|
||||||
|
*/
|
||||||
|
if ((termios_printk_tty != NULL) &&
|
||||||
|
(termios_printk_tty->device.pollRead != NULL)) {
|
||||||
|
do {
|
||||||
|
/*
|
||||||
|
* call termios_printk polling callout, if available
|
||||||
|
*/
|
||||||
|
if (termios_printk_conf.callout != NULL) {
|
||||||
|
termios_printk_conf.callout();
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* get character from debug serial port
|
||||||
|
*/
|
||||||
|
c = termios_printk_tty->device.pollRead(termios_printk_tty->minor);
|
||||||
|
} while (c < 0);
|
||||||
|
}
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
int termios_printk_open
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| try to open given serial debug port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
const char *dev_name, /* name of device to open */
|
||||||
|
unsigned32 baudrate /* baud rate to use */
|
||||||
|
)
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| 0 on success, -1 and errno otherwise |
|
||||||
|
\*=========================================================================*/
|
||||||
|
{
|
||||||
|
boolean err_occurred = FALSE;
|
||||||
|
rtems_libio_t *iop = NULL;
|
||||||
|
struct termios act_termios;
|
||||||
|
tcflag_t baudcode = B0;
|
||||||
|
|
||||||
|
if (termios_printk_fd >= 0) {
|
||||||
|
/*
|
||||||
|
* already initialized
|
||||||
|
*/
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* translate baudrate into baud code
|
||||||
|
*/
|
||||||
|
switch(baudrate) {
|
||||||
|
case 50: baudcode = B50; break;
|
||||||
|
case 75: baudcode = B75; break;
|
||||||
|
case 110: baudcode = B110; break;
|
||||||
|
case 134: baudcode = B134; break;
|
||||||
|
case 150: baudcode = B150; break;
|
||||||
|
case 200: baudcode = B200; break;
|
||||||
|
case 300: baudcode = B300; break;
|
||||||
|
case 600: baudcode = B600; break;
|
||||||
|
case 1200: baudcode = B1200; break;
|
||||||
|
case 1800: baudcode = B1800; break;
|
||||||
|
case 2400: baudcode = B2400; break;
|
||||||
|
case 4800: baudcode = B4800; break;
|
||||||
|
case 9600: baudcode = B9600; break;
|
||||||
|
case 19200: baudcode = B19200; break;
|
||||||
|
case 38400: baudcode = B38400; break;
|
||||||
|
case 57600: baudcode = B57600; break;
|
||||||
|
case 115200: baudcode = B115200; break;
|
||||||
|
case 230400: baudcode = B230400; break;
|
||||||
|
case 460800: baudcode = B460800; break;
|
||||||
|
default : err_occurred = TRUE; errno = EINVAL; break;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* open device for serdbg operation
|
||||||
|
*/
|
||||||
|
if (!err_occurred &&
|
||||||
|
(dev_name != NULL) &&
|
||||||
|
(dev_name[0] != '\0')) {
|
||||||
|
termios_printk_fd = open(dev_name,O_RDWR);
|
||||||
|
if (termios_printk_fd < 0) {
|
||||||
|
err_occurred = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* capture tty structure
|
||||||
|
*/
|
||||||
|
if (!err_occurred) {
|
||||||
|
iop = &rtems_libio_iops[termios_printk_fd];
|
||||||
|
termios_printk_tty = iop->data1;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* set device baudrate
|
||||||
|
* (and transp mode, this is not really needed)
|
||||||
|
* ...
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* ... get fd settings
|
||||||
|
*/
|
||||||
|
if (!err_occurred &&
|
||||||
|
(0 != tcgetattr(termios_printk_fd,&act_termios))) {
|
||||||
|
err_occurred = TRUE;
|
||||||
|
}
|
||||||
|
if (!err_occurred) {
|
||||||
|
|
||||||
|
cfsetospeed(&act_termios,baudcode);
|
||||||
|
cfsetispeed(&act_termios,baudcode);
|
||||||
|
|
||||||
|
if (0 != tcsetattr(termios_printk_fd,TCSANOW,&act_termios)) {
|
||||||
|
err_occurred = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!err_occurred) {
|
||||||
|
BSP_output_char = termios_printk_outputchar;
|
||||||
|
BSP_poll_char = termios_printk_inputchar;
|
||||||
|
}
|
||||||
|
return (err_occurred
|
||||||
|
? -1
|
||||||
|
: 0);
|
||||||
|
}
|
||||||
95
cpukit/libmisc/serdbg/termios_printk.h
Normal file
95
cpukit/libmisc/serdbg/termios_printk.h
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
/*===============================================================*\
|
||||||
|
| Project: RTEMS remote gdb over serial line |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| File: termios_printk.h |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| Copyright (c) 2002 IMD |
|
||||||
|
| Ingenieurbuero fuer Microcomputertechnik Th. Doerfler |
|
||||||
|
| <Thomas.Doerfler@imd-systems.de> |
|
||||||
|
| all rights reserved |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| this file declares intialization functions to add |
|
||||||
|
| printk polled output via termios polled drivers |
|
||||||
|
| |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| date history ID |
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
||||||
|
| 13.04.02 creation doe |
|
||||||
|
\*===============================================================*/
|
||||||
|
/*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
#ifndef _TERMIOS_PRINTK_H
|
||||||
|
#define _TERMIOS_PRINTK_H
|
||||||
|
|
||||||
|
#include <rtems.h>
|
||||||
|
#include <termios.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
unsigned32 baudrate; /* debug baud rate, e.g. 57600 */
|
||||||
|
void (*callout)(void); /* callout pointer during polling */
|
||||||
|
const char *devname; /* debug device, e.g. "/dev/tty01" */
|
||||||
|
} termios_printk_conf_t;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* must be defined in init module...
|
||||||
|
*/
|
||||||
|
extern termios_printk_conf_t termios_printk_conf;
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
void termios_printk_outputchar
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| send one character to serial port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
char c /* character to print */
|
||||||
|
);
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| <none> |
|
||||||
|
\*=========================================================================*/
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
char termios_printk_inputchar
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| wait for one character from serial port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
void /* none */
|
||||||
|
);
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| received character |
|
||||||
|
\*=========================================================================*/
|
||||||
|
|
||||||
|
|
||||||
|
/*=========================================================================*\
|
||||||
|
| Function: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
int termios_printk_open
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Purpose: |
|
||||||
|
| try to open given serial debug port |
|
||||||
|
+---------------------------------------------------------------------------+
|
||||||
|
| Input Parameters: |
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
(
|
||||||
|
const char *dev_name, /* name of device to open */
|
||||||
|
unsigned32 baudrate /* baud rate to use */
|
||||||
|
);
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
| Return Value: |
|
||||||
|
| 0 on success, -1 and errno otherwise |
|
||||||
|
\*=========================================================================*/
|
||||||
|
#endif /* _TERMIOS_PRINTK_H */
|
||||||
70
cpukit/libmisc/serdbg/termios_printk_cnf.h
Normal file
70
cpukit/libmisc/serdbg/termios_printk_cnf.h
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
/*===============================================================*\
|
||||||
|
| Project: RTEMS configure remote gdb over serial line |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| File: termios_printk_cnf.h |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| Copyright (c) 2002 IMD |
|
||||||
|
| Ingenieurbuero fuer Microcomputertechnik Th. Doerfler |
|
||||||
|
| <Thomas.Doerfler@imd-systems.de> |
|
||||||
|
| all rights reserved |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| this file declares intialization functions to add |
|
||||||
|
| printk support via polled termios |
|
||||||
|
| |
|
||||||
|
+-----------------------------------------------------------------+
|
||||||
|
| date history ID |
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
||||||
|
| 13.05.02 creation doe |
|
||||||
|
\*===============================================================*/
|
||||||
|
/*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
#ifndef _TERMIOS_PRINTK_CNF_H
|
||||||
|
#define _TERMIOS_PRINTK_CNF_H
|
||||||
|
|
||||||
|
#include "termios_printk.h"
|
||||||
|
|
||||||
|
#ifdef CONFIGURE_INIT
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fallback for baud rate to use
|
||||||
|
*/
|
||||||
|
#ifndef CONFIGURE_TERMIOS_PRINTK_BAUDRATE
|
||||||
|
#define CONFIGURE_TERMIOS_PRINTK_BAUDRATE 9600
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* fallback for device name to use
|
||||||
|
*/
|
||||||
|
#ifndef CONFIGURE_TERMIOS_PRINTK_DEVNAME
|
||||||
|
#define CONFIGURE_TERMIOS_PRINTK_DEVNAME "/dev/console"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIGURE_USE_TERMIOS_PRINTK
|
||||||
|
/*
|
||||||
|
* fill in termios_printk_conf structure
|
||||||
|
*/
|
||||||
|
termios_printk_conf_t termios_printk_conf = {
|
||||||
|
CONFIGURE_TERMIOS_PRINTK_BAUDRATE,
|
||||||
|
|
||||||
|
#ifdef CONFIGURE_TERMIOS_PRINTK_CALLOUT
|
||||||
|
CONFIGURE_TERMIOS_PRINTK_CALLOUT,
|
||||||
|
#else
|
||||||
|
NULL,
|
||||||
|
#endif
|
||||||
|
CONFIGURE_TERMIOS_PRINTK_DEVNAME,
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int termios_printk_init(void) {
|
||||||
|
#ifdef CONFIGURE_USE_TERMIOS_PRINTK
|
||||||
|
return termios_printk_open(termios_printk_conf.devname,
|
||||||
|
termios_printk_conf.baudrate);
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* CONFIGURE_INIT */
|
||||||
|
|
||||||
|
#endif /* _TERMIOS_PRINTK_CNF_H */
|
||||||
@@ -15,7 +15,8 @@ TMP_LIBS = ../monitor/$(ARCH)/libmonitor-tmp.a \
|
|||||||
../cpuuse/$(ARCH)/libcpuuse-tmp.a ../rtmonuse/$(ARCH)/librtmonuse-tmp.a \
|
../cpuuse/$(ARCH)/libcpuuse-tmp.a ../rtmonuse/$(ARCH)/librtmonuse-tmp.a \
|
||||||
../shell/$(ARCH)/libshell-tmp.a ../dumpbuf/$(ARCH)/libdumpbuf-tmp.a \
|
../shell/$(ARCH)/libshell-tmp.a ../dumpbuf/$(ARCH)/libdumpbuf-tmp.a \
|
||||||
../devnull/$(ARCH)/libdevnull-tmp.a ../dummy/$(ARCH)/libdummy-tmp.a \
|
../devnull/$(ARCH)/libdevnull-tmp.a ../dummy/$(ARCH)/libdummy-tmp.a \
|
||||||
../mw-fb/$(ARCH)/libmw-fb-tmp.a ../capture/$(ARCH)/libcapture-tmp.a
|
../mw-fb/$(ARCH)/libmw-fb-tmp.a ../capture/$(ARCH)/libcapture-tmp.a \
|
||||||
|
../serdbg/$(ARCH)/libserdbg-tmp.a
|
||||||
|
|
||||||
#
|
#
|
||||||
# (OPTIONAL) Add local stuff here using +=
|
# (OPTIONAL) Add local stuff here using +=
|
||||||
|
|||||||
Reference in New Issue
Block a user