Can you load the pl2303 driver with: modprobe pl2303 debug=1 and then run the program for me?
You should see a lot of information in the kernel debug log, any info on ioctls that your program is using that is not supported by the driver would be nice to see.
attached are three captures from debug mode. one with the onlcr, one without the onlcr, and an echo "hello" > /dev/ttyUSB0.
Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_open - port 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: 0xc0:0x1:0x8484:0x0 1 - 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: 0x40:0x1:0x404:0x0 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: 0xc0:0x1:0x8484:0x0 1 - 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: 0xc0:0x1:0x8383:0x0 1 - 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: 0xc0:0x1:0x8484:0x0 1 - 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: 0x40:0x1:0x404:0x1 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: 0xc0:0x1:0x8484:0x0 1 - 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: 0xc0:0x1:0x8383:0x0 1 - 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: 0x40:0x1:0x0:0x1 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: 0x40:0x1:0x1:0xc0 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: 0x40:0x1:0x2:0x4 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_set_termios - port 0, initialized = 1 Aug 20 11:39:03 lnxtest kernel: pl2303.c: 0xa1:0x21:0:0 7 - 80 25 0 0 0 0 8 Aug 20 11:39:03 lnxtest kernel: pl2303.c: 0x40:1:0:1 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_set_termios - data bits = 8 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_set_termios - baud = 9600 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_set_termios - stop bits = 1 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_set_termios - parity = none Aug 20 11:39:03 lnxtest kernel: pl2303.c: 0x21:0x20:0:0 7 Aug 20 11:39:03 lnxtest kernel: pl2303.c: set_control_lines - value = 3, retval = 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: 0xa1:0x21:0:0 7 - 80 25 0 0 0 0 8 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_open - submitting read urb Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_open - submitting interrupt urb Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_ioctl (0) cmd = 0x5401 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_ioctl not supported = 0x5401 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_ioctl (0) cmd = 0x540b Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_ioctl not supported = 0x540b Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_ioctl (0) cmd = 0x5402 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_ioctl not supported = 0x5402 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_set_termios - port 0, initialized = 1 Aug 20 11:39:03 lnxtest kernel: pl2303.c: 0xa1:0x21:0:0 7 - 80 25 0 0 0 0 8 Aug 20 11:39:03 lnxtest kernel: pl2303.c: 0x40:1:0:1 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_set_termios - data bits = 8 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_set_termios - baud = 9600 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_set_termios - stop bits = 1 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_set_termios - parity = none Aug 20 11:39:03 lnxtest kernel: pl2303.c: 0x21:0x20:0:0 7 Aug 20 11:39:03 lnxtest kernel: pl2303.c: set_control_lines - value = 3, retval = 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: 0xa1:0x21:0:0 7 - 80 25 0 0 0 0 8 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_ioctl (0) cmd = 0x5401 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_ioctl not supported = 0x5401 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_write - port 0, 24 bytes Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_write - length = 24, data = 74 65 73 74 20 6f 75 74 70 75 74 20 77 69 74 68 20 6e 65 77 6c 69 6e 65 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_write_bulk_callback - port 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_write - port 0, 0 bytes Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_write - length = 0, data = Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_write_bulk_callback - port 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_write - port 0, 0 bytes Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_write - length = 0, data = Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_write_bulk_callback - port 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_write - port 0, 0 bytes Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_write - length = 0, data = Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_write_bulk_callback - port 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_write - port 0, 0 bytes Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_write - length = 0, data = Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_write_bulk_callback - port 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_write - port 0, 0 bytes Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_write - length = 0, data = Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_write_bulk_callback - port 0 Aug 20 11:39:03 lnxtest kernel: pl2303.c: pl2303_write - port 0, 0 bytes
Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_open - port 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0xc0:0x1:0x8484:0x0 1 - 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0x40:0x1:0x404:0x0 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0xc0:0x1:0x8484:0x0 1 - 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0xc0:0x1:0x8383:0x0 1 - 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0xc0:0x1:0x8484:0x0 1 - 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0x40:0x1:0x404:0x1 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0xc0:0x1:0x8484:0x0 1 - 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0xc0:0x1:0x8383:0x0 1 - 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0x40:0x1:0x0:0x1 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0x40:0x1:0x1:0xc0 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0x40:0x1:0x2:0x4 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_set_termios - port 0, initialized = 1 Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0xa1:0x21:0:0 7 - 80 25 0 0 0 0 8 Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0x40:1:0:1 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_set_termios - data bits = 8 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_set_termios - baud = 9600 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_set_termios - stop bits = 1 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_set_termios - parity = none Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0x21:0x20:0:0 7 Aug 20 11:37:08 lnxtest kernel: pl2303.c: set_control_lines - value = 3, retval = 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0xa1:0x21:0:0 7 - 80 25 0 0 0 0 8 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_open - submitting read urb Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_open - submitting interrupt urb Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_ioctl (0) cmd = 0x5401 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_ioctl not supported = 0x5401 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_ioctl (0) cmd = 0x540b Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_ioctl not supported = 0x540b Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_ioctl (0) cmd = 0x5402 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_ioctl not supported = 0x5402 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_set_termios - port 0, initialized = 1 Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0xa1:0x21:0:0 7 - 80 25 0 0 0 0 8 Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0x40:1:0:1 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_set_termios - data bits = 8 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_set_termios - baud = 9600 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_set_termios - stop bits = 1 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_set_termios - parity = none Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0x21:0x20:0:0 7 Aug 20 11:37:08 lnxtest kernel: pl2303.c: set_control_lines - value = 3, retval = 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0xa1:0x21:0:0 7 - 80 25 0 0 0 0 8 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_ioctl (0) cmd = 0x5401 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_ioctl not supported = 0x5401 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_write - port 0, 25 bytes Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_write - length = 25, data = 74 65 73 74 20 6f 75 74 70 75 74 20 77 69 74 68 20 6e 65 77 6c 69 6e 65 0a Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_write - port 0, 33 bytes Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_write - already writing Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_write_bulk_callback - port 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_write - port 0, 33 bytes Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_write - length = 33, data = 74 65 73 74 20 6f 75 74 70 75 74 20 77 69 74 68 20 63 61 72 72 69 61 67 65 20 72 65 74 75 72 6e 0d Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_ioctl (0) cmd = 0x5402 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_ioctl not supported = 0x5402 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_set_termios - port 0, initialized = 1 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_write_bulk_callback - port 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0xa1:0x21:0:0 7 - 80 25 0 0 0 0 8 Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0x40:1:0:1 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_set_termios - data bits = 8 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_set_termios - baud = 9600 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_set_termios - stop bits = 1 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_set_termios - parity = none Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0x21:0x20:0:0 7 Aug 20 11:37:08 lnxtest kernel: pl2303.c: set_control_lines - value = 3, retval = 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: 0xa1:0x21:0:0 7 - 80 25 0 0 0 0 8 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_ioctl (0) cmd = 0x5401 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_ioctl not supported = 0x5401 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_close - port 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: set_control_lines - value = 0, retval = 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_close - shutting down urbs Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_close - usb_unlink_urb (write_urb) failed with reason: -19 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_read_bulk_callback - port 0 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_read_bulk_callback - urb->status = -2 Aug 20 11:37:08 lnxtest kernel: pl2303.c: pl2303_read_bulk_callback - port is closed, exiting.
Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_open - port 0 Aug 20 11:49:30 lnxtest kernel: pl2303.c: 0xc0:0x1:0x8484:0x0 1 - 0 Aug 20 11:49:30 lnxtest kernel: pl2303.c: 0x40:0x1:0x404:0x0 0 Aug 20 11:49:30 lnxtest kernel: pl2303.c: 0xc0:0x1:0x8484:0x0 1 - 0 Aug 20 11:49:30 lnxtest kernel: pl2303.c: 0xc0:0x1:0x8383:0x0 1 - 0 Aug 20 11:49:30 lnxtest kernel: pl2303.c: 0xc0:0x1:0x8484:0x0 1 - 0 Aug 20 11:49:30 lnxtest kernel: pl2303.c: 0x40:0x1:0x404:0x1 0 Aug 20 11:49:30 lnxtest kernel: pl2303.c: 0xc0:0x1:0x8484:0x0 1 - 0 Aug 20 11:49:30 lnxtest kernel: pl2303.c: 0xc0:0x1:0x8383:0x0 1 - 0 Aug 20 11:49:30 lnxtest kernel: pl2303.c: 0x40:0x1:0x0:0x1 0 Aug 20 11:49:30 lnxtest kernel: pl2303.c: 0x40:0x1:0x1:0xc0 0 Aug 20 11:49:30 lnxtest kernel: pl2303.c: 0x40:0x1:0x2:0x4 0 Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_set_termios - port 0, initialized = 1 Aug 20 11:49:30 lnxtest kernel: pl2303.c: 0xa1:0x21:0:0 7 - 80 25 0 0 0 0 8 Aug 20 11:49:30 lnxtest kernel: pl2303.c: 0x40:1:0:1 0 Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_set_termios - data bits = 8 Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_set_termios - baud = 9600 Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_set_termios - stop bits = 1 Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_set_termios - parity = none Aug 20 11:49:30 lnxtest kernel: pl2303.c: 0x21:0x20:0:0 7 Aug 20 11:49:30 lnxtest kernel: pl2303.c: set_control_lines - value = 3, retval = 0 Aug 20 11:49:30 lnxtest kernel: pl2303.c: 0xa1:0x21:0:0 7 - 80 25 0 0 0 0 8 Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_open - submitting read urb Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_open - submitting interrupt urb Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_write - port 0, 5 bytes Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_write - length = 5, data = 68 65 6c 6c 6f Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_write_bulk_callback - port 0 Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_write - port 0, 0 bytes Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_write - length = 0, data = Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_write_bulk_callback - port 0 Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_write - port 0, 0 bytes Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_write - length = 0, data = Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_write_bulk_callback - port 0 Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_write - port 0, 0 bytes Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_write - length = 0, data = Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_write_bulk_callback - port 0 Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_write - port 0, 0 bytes Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_write - length = 0, data = Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_write_bulk_callback - port 0 Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_write - port 0, 0 bytes Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_write - length = 0, data = Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_write_bulk_callback - port 0 Aug 20 11:49:30 lnxtest kernel: pl2303.c: pl2303_write - port 0, 0 bytes