我遇到了pppd call provider
与 Hayes 兼容的调制解调器的命令问题。
PPPD 的版本是 2.4.7,我相信它是最新的。
只有当我关闭调制解调器时它才会失败(即它不会回复任何 AT 命令)。
我的聊天脚本很简单:
ABORT "BUSY"
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
ABORT "ERROR"
ABORT "NO ANSWER"
TIMEOUT 30
"" AT
OK ATE0
...
当调制解调器关闭时pppd call provider
输出:
... #bunch of pppd configurations
abort on (BUSY)
abort on (NO CARRIER)
abort on (NO DIALTONE)
abort on (ERROR)
abort on (NO ANSWER)
timeout set to 30 seconds
send (AT^M)
expect (OK)
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@....
在这里,我完全糊涂了。
事实:
- 调制解调器已关闭
- 如果我用minicom向调制解调器发送 "" ,它不会应答(如我所料)
- ^@ 永久打印,30 秒后不会停止。我必须手动杀死它
killall -9 chat; killall -9 pppd
即使我将"" AT
行更改为OK AT
(在发送 AT 之前预计 OK),那些 ^@ 字符也会出现:
...
timeout set to 30 seconds
expect (OK)
^@^@^@^@^@^@^@^@^@^@...
现在我也测试了这个设备:
cat /dev/ttyS0
^C
我等了 10 多秒,但没有打印任何内容。
所以我的问题是:
- 如果聊天程序没有收到预期的答案,它应该会出错,为什么这个程序没有这样做?(显然没有收到OK)
- 为什么在输出中
^M
的命令之后打印AT
?(我为聊天脚本做了dos2unix)
您可能必须调整 S3 和 S4(调制解调器 CR 和 LF 设置)以匹配您正在使用的软件的预期 - 或相应地调整软件设置。
请注意,^@ 是 ascii nul 的可能表示形式 - 软件尝试读取串行端口,但失败并从读取中获取 nul 字符,或者无法识别空读取结果,修补字符串 end nul (0x00) - 或任何变化。
参考:https ://en.wikipedia.org/wiki/Hayes_command_set