串口回显问题分析及解决

 问题:
在uClinux底下使用串口来做DTU,在DTU进程没有起来之前串口有回显
分析:
1.查驱动发现串口的硬件自动回显在初始化的时候并没有被打开
2.每次DTU程序在关闭了之后串口还是有自动回显,且在DTU程序中并没有将串口的参数设置为自动回显的功能
3.将串口的内核打印级别设为7同时将串口的调试信息打开,发现如下日志:
.......
Freeing unused kernel memory: 28k freed (0x1f6000 - 0x1fc000)
mcfrs_open ttyS0, count = 0
starting up ttyS0 (irq 73)...
mcfrs_open ttyS0 successful...
BINFMT_FLAT: Loading file: /etc/config/fw.sh
mcfrs_open ttyS0, count = 1
mcfrs_open ttyS0 successful...
mcfrs_close ttyS0, count = 2
mcfrs_open ttyS0, count = 1
mcfrs_open ttyS0 successful...
mcfrs_close ttyS0, count = 2
mcfrs_open ttyS0, count = 1
mcfrs_open ttyS0 successful...
mcfrs_close ttyS0, count = 2
mcfrs_open ttyS0, count = 1
mcfrs_open ttyS0 successful...
mcfrs_close ttyS0, count = 2
mcfrs_open ttyS0, count = 1
mcfrs_open ttyS0 successful...
mcfrs_close ttyS0, count = 2
mcfrs_open ttyS0, count = 1
mcfrs_open ttyS0 successful...
mcfrs_close ttyS0, count = 2
mcfrs_open ttyS0, count = 1
mcfrs_open ttyS0 successful...
mcfrs_close ttyS0, count = 2
mcfrs_open ttyS0, count = 1
mcfrs_open ttyS0 successful...
mcfrs_close ttyS0, count = 2
注意到红色的部分发现串口在某个地方被打开了,且肯定是在应用层被打开,并且在调用脚本fw.sh之前。
4.查看rc脚本发现,在调用fw.sh之前调用的程序主要有
klogd
syslogd
initsy

# ps
  PID TTY     Uid        Size State Command
    1         adm           0   S   init
    2         adm           0   S   [keventd]
    3         adm           0   R   [ksoftirqd_CPU0]
    4         adm           0   R   [kswapd]
    5         adm           0   S   [bdflush]
    6         adm           0   S   [kupdated]
   17         adm           0   S   klogd
   37         adm           0   S   syslogd
   70         adm           0   S   /bin/syslogd -n
   71         adm           0   S   /bin/inetd
   72         adm           0   S   /bin/boa -c /etc/httpd
   73         adm           0   S   /bin/telnetd
   74 ttyp0   adm           0   S   console 192.168.2.73
   84 ttyp0   adm           0   S   sh -c sh
   85 ttyp0   adm           0   S   sh
   88 ttyp0   adm           0   R   ps

解决办法:

你可能感兴趣的:(Linux)