Serial 
  port modifications
  This is a Blog of my progress
  - doing this forces me to make proper notes
  - jump to the bottom for the latest story!
Objective
Be able to use ttyS0 (RS232 
  serial port connected to the header) to control external devices
  without random terminal activity (terminal chatter) getting in the way.
Some early notes for my record
In the thread -
  http://midge.vlad.org.ua/forum/viewtopic.php?t=377
  
Vlad says -
  You can change rate by several methods:
  quick: exec /sbin/getty -L ttyS0 9600 vt100
  by stty (man stty on PC)
  or by terminal program: minicom, picocom, microcom etc
  (I think pppd also can set rate)
  Thanks SergeyV for patch!
  
To the tool-chain I used to build the file -
that is used in the current "distro" created for myself and other external hardware user's I added SergeyV's patch -
and then created -
I modified etc/inittab (on the USB stick) as instructed in thread -
http://midge.vlad.org.ua/forum/viewtopic.php?t=407
to remove the getty lines as below at <<<<<
______________________________________________
  # /etc/inittab
  #
  # Copyright (C) 2001 Erik Andersen <andersen@codepoet.org>
  #
  # Format for each entry: <id>:<runlevels>:<action>:<process>
  #
  # id == tty to run on, or empty for /dev/console
  # runlevels == ignored
  # action == one of sysinit, respawn, askfirst, wait, and once
  # process == program to run
  
  # now run any rc scripts
  ::sysinit:/etc/init.d/rcS
  
  # Set up a couple of getty's
  #console::respawn:/bin/sh
  #::sysinit:/bin/sh
  #ttyS0::respawn:/sbin/getty 115200 ttyS0
  #console::respawn:/sbin/getty 115200 ttyS0 <<<<<
  #ttyS1::respawn:/sbin/getty 9600 ttyS1 <<<<<
  
  # Stuff to do before rebooting
  null::restart:/etc/init.d/Kreboot
  null::restart:/bin/sync
  null::restart:/usr/bin/killall klogd
  null::restart:/usr/bin/killall syslogd
  null::restart:/bin/umount -a -r
  
  # Stuff to do before rebooting
  null::shutdown:/etc/init.d/Kshutdown
  null::shutdown:/bin/sync
  null::shutdown:/usr/bin/killall klogd
  null::shutdown:/usr/bin/killall syslogd
  null::shutdown:/bin/umount -a -r
______________________________________________
I sent the new firmware 
  to the Sweex and rebooted with HyperTerminal looking at ttyS0 (first rs232 port).
  I saw the usual listing of activity - it got to the end of this listing as usual 
  then the terminal did NOT ask me to log in as root/midge.
  I then typed
  echo "Hello from router">/dev/ttyS0
  in a Telnet session
  and on HyperTerminal saw
  Hello from router
  So it can output text - I am not sure if I can send text in to the Sweex. 
26 
  Oct 06
  New compile 
  (using tool-chain with most settings as before plus as below)
I tried to do this as requested -
Start 
  with "make menuconfig" as usual, from the firmware directory
  then go into "Kernel Configuration / Device Support"
  and then into "Device specific configuration"
  then edit the kernel boot options line and REMOVE "console=ttyS0"
  save the new config, and build the firmware as usual.
But I saw 
  no reference to "console=ttyS0" or a kernel boot options line in my 
  menuconfig
  (the one 
  in 
  http://www.sunspot.co.uk/Projects/SWEEX/files/notes.html
  Block B - about half way down)
Patches included -
  004-kernel-entry.patch
  100-serial-rateselect-sergeyv.patch
  
  serial.c - still set 
  to 9600 in irq:2 line
as requested, in
  trunk/openwrt/build_mipsel/linux-2.4-adm5120/root/etc/inittab
  BEFORE BUILDING the firmware the two GETTY lines were removed 
  like this:
  #ttyS0::respawn:/bin/sh
  #ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 
  ( I do not think this will affect my system since etc/inittab is on the memory 
  stick)
I edited drivers/net/adm5120sw.c and replaced
request_irq(SW_IRQ,
  swdrv_ProcessInt,
  SA_SHIRQ,
  dev->name, dev);
  with:
  request_irq(SW_IRQ,
  swdrv_ProcessInt,
  SA_SHIRQ | SA_SAMPLE_RANDOM,
  dev->name, dev); 
  done in main chain
The new firmwares are here -
vmlinuz for testing in RAM
TESTING
On boot the terminal gave a long string of data as usual but then went quiet
  Send data out from the Sweex via ttyS0 to an external terminal device 
  
  in a Telnet session
  I typed
  echo "Hello from router">/dev/ttyS0
  and on HyperTerminal saw
  Hello from router 
to suppress the trailing 
  newline character use
  echo -n "Hello from router">/dev/ttyS0
  Send 
  data from a terminal device via ttyS0 to the Sweex
  in a Telnet session
  I typed
  cat /dev/ttyS0
  and in that Telnet screen I could see all text typed into the Hyper-term 
  ttyS0 serial port session
To stop text being displayed in the Telnet window I typed Control-C in that window and saw the midge# prompt again
(The above also applies for ttyS1)
attempts to change the terminal 
  speed from a Telnet session failed
  
  Sending 
  text from a webpage to a serial port
  On the web 
  page on the Sweex I have a line
<a href="both_ports_out_test.cgi?page=string_to_ttyS0&string=0123456789">numbers 0 to 9</a>
both_ports_out_test.cgi is shown here
It runs the script pg-string_to_ttyS0.sh which first displays
both_ports_out_test.html 
  
  
  and then sends $string (in this case 123456789) to serial port ttyS0
  - waits for a second for the PIC to act then displays all the PIC reply
  (it uses the ramdisk to save the text and so not hit the Flash)
  - and then closes the webpage
pg-string_to_ttyS0.sh #!/bin/sh  | 
  
31 
  Oct 06
  Another compile 
I now need to run two RS232 devices from the Sweex (a PIC and a radio link) both at 9600baud.
So I changed 
  the settings in build_mipsel/linux-2.4-adm5120/linux-2.4.32/arch/mips/am5120/serial.c 
  so that both ports run at 9600baud and did a new compile to create these files
  vmlinuz  for 
  RAM and midge_tty96_96_noconsole.bin 
  for FLASH
  and just to keep things clean recompiled for ttyS0 115200 and ttyS1 96000
  vmlinuz for 
  RAM  and midge_tty115_96_noconsole.bin 
  for FLASH
  So ONLY the baud rate differs in the above firmwares.
TESTING
I loaded midge_tty96_96_noconsole.bin 
  into firmware.
  On reboot the boot loader message comes over at 115200baud as usual 
  and then all the boot reporting comes over at 9600baud. It gets to the usual 
  conclusion and then the terminal stays quiet and is available for control applications.
An odd thing
  
  ttyS0 sends out text strings with CRLF added (as viewed in HyperTerminal).
  If you then plug ttyS1 into the same HyperTerminal session 
  (same preferences settings) any string sent out has just a line feed added and 
  no carriage return.
I just want simple strings 
  so I use the -n option before the string
  echo -n "Hello from router">/dev/ttyS0 
  
  and it stops both the CRLF and the LF at the end of the strings.
Another odd thing
I have an application on the Sweex that, when you click on a link, sends a character to a PIC via a serial port and then receives a reply and shows it on the webpage.
If I use ttyS1 the returned 
  chararacters are handled one by one.
  If I use ttyS0 they only get accepted after a carriage return 
  (as tested on HyperTerminal so I think I am sending CRLF)
A work-around is to get the PIC to send CRLF but I would rather have both ports the same.
Observation
Connect ttyS1 to HyperTerminal
  on a PC and open a Telnet session on another PC (or the same one)
  type cat /dev/ttyS1 
  in Telnet.
  Every character typed on the PC is seen in telnet. A return character causes 
  a carriage return but no linefeed 
  on both screens.
  Kill 
  the connection with Ctrl-C in the Telnet session
Connect ttyS0 to HyperTerminal 
  on a PC and open a Telnet session on another PC (or the same one)
  type cat /dev/ttyS0 
  in Telnet.
  Every character typed on the PC is immediately 
  reflected back to the PC. (If HyperTerminal is set to echo characters 
  locally you see the character twice)
  The string of characters typed in HyperTerminal are only 
  seen in the Telnet session after a return character is pressed.
  A return character causes a carriage return and 
  a linefeed in both screens.
Do you know why this happens?
2 Nov 06
Both ports output data as they should with a C program
My anonymous email contact 
  (to whom all thanks!) sent me a C program that previously 
  I could only get to work with ttyS1.
  
  I modified the original program (rs232io.c) 
  to run 
  ttyS1 (rs232io_ttyS1_96.c compiled 
  as rs232io_ttyS1_96) and 
  ttyS0 (rs232io_ttyS0_96.c compiled 
  as rs232io_ttyS0_96)
I put these into usr/bin on the memory stick
I typed
  ./ rs232io_ttyS1_96 testing
  into a Telnet session and saw
  testing
  in HyperTerminal
  and both the ports, ttyS0 and ttyS1, worked the same - you see exactly what 
  you type, no CR LF etc.
but
  echo -n "Hello from router">/dev/ttyS0
  does just the same - we need an input C program that goes in at a low 
  level. 
Changing the baud rate line in the c program had no effect
3 Nov 06
Cracked it! - (by accident!) If I run rs232io_ttyS0_96.c from Telnet - ie type
rs232io_ttyS0_96 string
  
  "string" goes out of the ttyS0 serial port and can be seen in HyperTerminal 
  
  - you just see the characters - no CRLF - just like the ttyS1 default.
I then I find ttyS0 
  stays in that state
  so my
  cat 
  < /dev/ttyS0 > /var/www/ramdisk/rsin &
   line 
  in 
  pg-string_to_ttyS0.sh 
  (which stores an input string 
  - see above) works just as it does on ttyS1 
The USB memory stick files 
  used on 3 Nov 06 (used with the .bin files of 31 Oct 06 above) are compressed 
  here as stick061103.tar.gz
  (even more junk to get rid of - but all working on BOTH RS232 ports)
4 Nov 06
I now use 
  rs232io_ttyS0_96 to 
  send out all strings to ttyS0
  - then the "receive string" I do after will always find ttyS0 in the 
  simple two way data flow state like the default state of ttyS1 (no repeats of 
  input characters, "wait for linefeed", etc) 
This script uses rs232io_ttyS0_96 
  for output and
  cat 
  < /dev/ttyS0 > /var/www/ramdisk/rsin &
  to collect an input string before 
  sending it to the web page.
| 
 pg-string_to_ttyS0-get_reply.sh #!/bin/sh  | 
  
Who can change the baudrate without a re-compile!!!???
to be continued!!
USB serial port converter tests on the router
  
I bought a US232R-10 (FTDI chipset) from http://www.easysync.co.uk/
(Purchased for my MacBook Pro - works well on the Mac with the included driver) 
I tested it on the router - 
http://midge.vlad.org.ua/wiki/usb - bottom of page - did not work for me 
BUT
The following compile creates a firmware that runs the USB serial adapter for a few minutes - then the router hangs.
cd /home/graham/kamikaze-200602050443/trunk/openwrt/build_mipsel/linux-2.4-adm5120/linux-2.4.32
  make menuconfig
  USB support  --->
  USB Serial Converter Support --->
<*> USB Serial Converter support
  [*]   USB Generic Serial Driver 
<*>   USB FTDI Single Port Serial Driver