Fix problems with host build of the Zmodem tools
This commit is contained in:
parent
c0e4184a3f
commit
394f46560c
@ -94,10 +94,10 @@ $(HOSTAPPS)/zmodem.h: $(APPSINC)/zmodem.h
|
|||||||
$(Q) cp $(APPSINC)/zmodem.h $(HOSTAPPS)/zmodem.h
|
$(Q) cp $(APPSINC)/zmodem.h $(HOSTAPPS)/zmodem.h
|
||||||
|
|
||||||
$(RZBIN): $(HOSTAPPS)/zmodem.h $(RZOBJS) $(CMNOBJS)
|
$(RZBIN): $(HOSTAPPS)/zmodem.h $(RZOBJS) $(CMNOBJS)
|
||||||
$(Q) $(HOSTCC) $(HOSTCFLAGS) -o $@ $(RZOBJS) $(CMNOBJS)
|
$(Q) $(HOSTCC) $(HOSTCFLAGS) -o $@ $(RZOBJS) $(CMNOBJS) -lrt
|
||||||
|
|
||||||
$(SZBIN): $(HOSTAPPS)/zmodem.h $(SZOBJS) $(CMNOBJS)
|
$(SZBIN): $(HOSTAPPS)/zmodem.h $(SZOBJS) $(CMNOBJS)
|
||||||
$(Q) $(HOSTCC) $(HOSTCFLAGS) -o $@ $(SZOBJS) $(CMNOBJS)
|
$(Q) $(HOSTCC) $(HOSTCFLAGS) -o $@ $(SZOBJS) $(CMNOBJS) -lrt
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
ifneq ($(OBJEXT),)
|
ifneq ($(OBJEXT),)
|
||||||
|
@ -79,9 +79,11 @@ Using NuttX Zmodem with a Linux Host
|
|||||||
overruns):
|
overruns):
|
||||||
|
|
||||||
$ sudo stty -F /dev/ttyS0 9600 # Select 9600 BAUD
|
$ sudo stty -F /dev/ttyS0 9600 # Select 9600 BAUD
|
||||||
$ sudo stty -F /dev/ttyS0 crtscts # Enables CTS/RTS handshaking
|
$ sudo stty -F /dev/ttyS0 crtscts # Enables CTS/RTS handshaking *
|
||||||
$ sudo stty -F /dev/ttyS0 # Show the TTY configuration
|
$ sudo stty -F /dev/ttyS0 # Show the TTY configuration
|
||||||
|
|
||||||
|
* Only is hardware flow control is enabled.
|
||||||
|
|
||||||
Start rz on the Linux host (using /dev/ttyS0 as an example):
|
Start rz on the Linux host (using /dev/ttyS0 as an example):
|
||||||
|
|
||||||
$ sudo rz </dev/ttyS0 >/dev/ttyS0
|
$ sudo rz </dev/ttyS0 >/dev/ttyS0
|
||||||
@ -113,15 +115,21 @@ Using NuttX Zmodem with a Linux Host
|
|||||||
|
|
||||||
Receiving Files on the Target from the Linux Host PC
|
Receiving Files on the Target from the Linux Host PC
|
||||||
----------------------------------------------------
|
----------------------------------------------------
|
||||||
|
NOTE: There are issues with using the Linux sz command with the NuttX
|
||||||
|
rz command. See "Status" below. It is recommended that you use the
|
||||||
|
NuttX sz command on Linux as described in the next paragraph.
|
||||||
|
|
||||||
To send a file to the target, first make sure that the serial port on the
|
To send a file to the target, first make sure that the serial port on the
|
||||||
host is configured to work with the board (Assuming that you are using
|
host is configured to work with the board (Assuming that you are using
|
||||||
9600 baud for the data transfers -- high rates may result in data
|
9600 baud for the data transfers -- high rates may result in data
|
||||||
overruns):
|
overruns):
|
||||||
|
|
||||||
$ sudo stty -F /dev/ttyS0 9600 # Select 9600 BAUD
|
$ sudo stty -F /dev/ttyS0 9600 # Select 9600 (or other) BAUD
|
||||||
$ sudo stty -F /dev/ttyS0 crtscts # Enables CTS/RTS handshaking
|
$ sudo stty -F /dev/ttyS0 crtscts # Enables CTS/RTS handshaking *
|
||||||
$ sudo stty -F /dev/ttyS0 # Show the TTY configuration
|
$ sudo stty -F /dev/ttyS0 # Show the TTY configuration
|
||||||
|
|
||||||
|
* Only is hardware flow control is enabled.
|
||||||
|
|
||||||
Start rz on the on the target. Here, in this example, we are using
|
Start rz on the on the target. Here, in this example, we are using
|
||||||
/dev/ttyS1 to perform the transfer
|
/dev/ttyS1 to perform the transfer
|
||||||
|
|
||||||
@ -169,20 +177,24 @@ Building the Zmodem Tools to Run Under Linux
|
|||||||
2. Add CONFIG_DEBUG=1 to the make command line to enable debug output
|
2. Add CONFIG_DEBUG=1 to the make command line to enable debug output
|
||||||
3. Make sure to clean old target .o files before making new host .o files.
|
3. Make sure to clean old target .o files before making new host .o files.
|
||||||
|
|
||||||
This build is untested as of 2013-7-16.
|
This build is has been verified as of 2013-7-16 using Linux to transfer
|
||||||
|
files with an Olimex LPC1766STK board. It works great and seems to solve
|
||||||
|
all of the problems found with the Linux sz/rz implementation.
|
||||||
|
|
||||||
Status
|
Status
|
||||||
======
|
======
|
||||||
2013-7-15: I have tested with the configs/olimex-lpc1766stk
|
2013-7-15: Testing against the Linux rz/sz commands.
|
||||||
configuration. I have been able to send large and small files with
|
|
||||||
the sz command. I have been able to receive small files, but there
|
I have tested with the configs/olimex-lpc1766stk configuration. I
|
||||||
are problems receiving large files: The Linux SZ does not obey the
|
have been able to send large and small files with the target sz
|
||||||
buffering limits and continues to send data while rz is writing
|
command. I have been able to receive small files, but there are
|
||||||
the previously received data to the file and the serial driver's RX
|
problems receiving large files using the Linux sz command: The
|
||||||
buffer is overrun by a few bytes while the write is in progress.
|
Linux SZ does not obey the buffering limits and continues to send
|
||||||
As a result, when it reads the next buffer of data, a few bytes may
|
data while rz is writing the previously received data to the file
|
||||||
be missing. The symptom of this missing data is a CRC check
|
and the serial driver's RX buffer is overrun by a few bytes while
|
||||||
failure.
|
the write is in progress. As a result, when it reads the next
|
||||||
|
buffer of data, a few bytes may be missing. The symptom of this
|
||||||
|
missing data is a CRC check failure.
|
||||||
|
|
||||||
Either (1) we need a more courteous host application, or (2) we
|
Either (1) we need a more courteous host application, or (2) we
|
||||||
need to greatly improve the target side buffering capability!
|
need to greatly improve the target side buffering capability!
|
||||||
@ -194,8 +206,26 @@ Status
|
|||||||
the handshaking will solve the issues. Another option might be
|
the handshaking will solve the issues. Another option might be
|
||||||
to fix the serial driver hardware flow control somehow.
|
to fix the serial driver hardware flow control somehow.
|
||||||
|
|
||||||
2013-7-16: I have verified that with debug off and at lower serial
|
2013-7-16. More Testing against the Linux rz/sz commands.
|
||||||
BAUD (2400), the transfers of large succeed without errors. I do
|
|
||||||
|
I have verified that with debug off and at lower serial BAUD
|
||||||
|
(2400), the transfers of large files succeed without errors. I do
|
||||||
not consider this a "solution" to the problem. I also found that
|
not consider this a "solution" to the problem. I also found that
|
||||||
the LPC17xx hardware flow control caused strange hangs; Zmodem
|
the LPC17xx hardware flow control caused strange hangs; Zmodem
|
||||||
works better with hardware flow control disabled on the LPC17xx.
|
works better with hardware flow control disabled on the LPC17xx.
|
||||||
|
|
||||||
|
At this lower BAUD, RX buffer sizes could probably be reduced; Or
|
||||||
|
perhaps the BAUD coud be increased. My thought, however, is that
|
||||||
|
tuning in such an unhealthy situation is not the approach: The
|
||||||
|
best thing to do would be to use the matching NuttX sz on the Linux
|
||||||
|
host side.
|
||||||
|
|
||||||
|
2013-7-16. More Testing against the NuttX rz/sz on Both Ends.
|
||||||
|
|
||||||
|
The NuttX sz/rz commands have been modified so that they can be
|
||||||
|
built and executed under Linux. In this case, there are no
|
||||||
|
transfer problems at all in either direction and with large or
|
||||||
|
small files. This configuration could probably run at much higher
|
||||||
|
serial speeds and with much smaller buffers (although that has not
|
||||||
|
been verified as of this writing).
|
||||||
|
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include <nuttx/config.h>
|
#include <nuttx/config.h>
|
||||||
|
#include <nuttx/compiler.h>
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Pre-processor Definitions
|
* Pre-processor Definitions
|
||||||
|
@ -121,6 +121,7 @@
|
|||||||
/* Unknown compiler *********************************************************/
|
/* Unknown compiler *********************************************************/
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
# warning Unknown Compiler
|
||||||
|
|
||||||
# undef CONFIG_CPP_HAVE_VARARGS
|
# undef CONFIG_CPP_HAVE_VARARGS
|
||||||
# undef CONFIG_CPP_HAVE_WARNING
|
# undef CONFIG_CPP_HAVE_WARNING
|
||||||
|
@ -53,15 +53,20 @@
|
|||||||
#define FAR
|
#define FAR
|
||||||
#define DEBUGASSERT assert
|
#define DEBUGASSERT assert
|
||||||
|
|
||||||
|
#define _GNU_SOURCE 1
|
||||||
|
|
||||||
/* Configuration */
|
/* Configuration */
|
||||||
|
|
||||||
|
#define CONFIG_SYSTEM_ZMODEM 1
|
||||||
#define CONFIG_SYSTEM_ZMODEM_DEVNAME "/dev/ttyS0"
|
#define CONFIG_SYSTEM_ZMODEM_DEVNAME "/dev/ttyS0"
|
||||||
#define CONFIG_SYSTEM_ZMODEM_RCVBUFSIZE 512
|
#define CONFIG_SYSTEM_ZMODEM_RCVBUFSIZE 512
|
||||||
#define CONFIG_SYSTEM_ZMODEM_PKTBUFSIZE 1024
|
#define CONFIG_SYSTEM_ZMODEM_PKTBUFSIZE 1024
|
||||||
#define CONFIG_SYSTEM_ZMODEM_SNDBUFSIZE 512
|
#define CONFIG_SYSTEM_ZMODEM_SNDBUFSIZE 512
|
||||||
#define CONFIG_SYSTEM_ZMODEM_MOUNTPOINT "/tmp"
|
#define CONFIG_SYSTEM_ZMODEM_MOUNTPOINT "/tmp"
|
||||||
#undef CONFIG_SYSTEM_ZMODEM_RCVSAMPLE
|
#undef CONFIG_SYSTEM_ZMODEM_RCVSAMPLE
|
||||||
#undef CONFIG_SYSTEM_ZMODEM_SENDATTN
|
#undef CONFIG_SYSTEM_ZMODEM_SENDATTN
|
||||||
|
#define CONFIG_SYSTEM_ZMODEM_ALWAYSSINT 1
|
||||||
|
#undef CONFIG_SYSTEM_ZMODEM_SENDBRAK
|
||||||
#define CONFIG_SYSTEM_ZMODEM_RESPTIME 10
|
#define CONFIG_SYSTEM_ZMODEM_RESPTIME 10
|
||||||
#define CONFIG_SYSTEM_ZMODEM_CONNTIME 30
|
#define CONFIG_SYSTEM_ZMODEM_CONNTIME 30
|
||||||
#define CONFIG_SYSTEM_ZMODEM_SERIALNO 1
|
#define CONFIG_SYSTEM_ZMODEM_SERIALNO 1
|
||||||
|
@ -496,6 +496,8 @@ static int zms_zrinit(FAR struct zm_state_s *pzm)
|
|||||||
else
|
else
|
||||||
# endif
|
# endif
|
||||||
{
|
{
|
||||||
|
zmdbg("ZMS_STATE %d->%d\n", pzm->state, );
|
||||||
|
pzm->state = ZMS_DONE;
|
||||||
return ZM_XFRDONE;
|
return ZM_XFRDONE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -832,7 +832,7 @@ static int zm_parse(FAR struct zm_state_s *pzm, size_t rcvlen)
|
|||||||
|
|
||||||
if (ret != OK)
|
if (ret != OK)
|
||||||
{
|
{
|
||||||
zmdbg("Aborting: %d\n", ret);
|
zmdbg("%s: %d\n", ret < 0 ? "Aborting" : "Done", ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user