ARM40-A5应用——RDACE的一种默认出厂配置
2018.9.15
一、网络配置
RDACE使用eth0或ppp0连接公网,eth1用于调试。
并且有线存在则用有线eth0,有线不存在则用无线ppp0,本文介绍该应用场景的配置。
RDACE共使用3个网络:eth0、eth1、ppp0,其默认配置与用途分别为:
eth0 192.168.0.250 业务 将RDACE的数据传送到服务器
eth1 192.168.6.6 调试 使用网络与PC机连接,用 telnet 登陆
ppp0 移动分配IP 业务 将RDACE的数据传送到服务器
1.1、eth0
上电启动时,/etc/init.d/S40network 会读取 /etc/network/interfaces.eth0 的内容,配置eth0网口。
interfaces.eth0 的内容示例:
# Configure eth0
MACADDRESS=28:3e:34:00:01:01
IPADDRESS=192.168.0.250
NETMASK=255.255.255.0
1.2、eth1
上电启动时,/etc/init.d/S41network 会读取 /etc/network/interfaces.eth1 的内容,配置eth1网口。
interfaces.eth1 的内容示例:
# Configure eth1
MACADDRESS=28:3e:34:00:02:02
IPADDRESS=192.168.6.6
NETMASK=255.255.255.0
1.3、ppp0
参考《ARM40-A5应用——GPRS模块ppp拨号上网》。
RDACE的无线网络,使用GPRS模块,通过ppp模式拨号上网。
/etc/ppp/pon-M26-auto.sh & 用于启动GPRS模块。
脚本 /etc/ppp/pon-M26-auto.sh 每60s 会 ping 223.5.5.5 和 223.6.6.6,如果不通,则重启GPRS模块。所以GPRS模块断网后,一般会在2分钟左右重新连上。源码见附(1)。
二、应用场景
RDACE使用eth0或ppp0连接公网,eth1用于调试。
在图形界面上选择有线eth0或无线ppp0;若选中eth0,则ppp0无法使用;若选中ppp0,则eth0无法使用。
2.1、使用eth0连接公网
建立 /etc/network/if-public-network.sh 文件,
touch /etc/network/if-public-network.sh
chmod 755 /etc/network/if-public-network.sh
其内容为:
#!/bin/sh
killall pon-M26-auto.sh
killall pppd
route del -net default
route add -net default netmask 0.0.0.0 gw 192.168.0.1 eth0
测试:
(1)/etc/network/if-public-network.sh
(2)ping 223.5.5.5 可以看到是通过eth0发出的数据包
2.2、使用ppp0连接公网
修改 /etc/network/if-public-network.sh 文件的内容:
echo "/etc/ppp/pon-M26-auto.sh &" > /etc/network/if-public-network.sh
ppp连接建立后,系统自动调用/etc/ppp/ip-up脚本。我们在/etc/ppp/ip-up脚本中增加路由:
route del default
route add default gw $5 $1 # $5 the remote IP address,$1 e.g. ppp0
测试:
killall pppd
killall pon-M26-auto.sh
/etc/network/if-public-network.sh
然后 ping 223.5.5.5 可以看到是通过ppp0发出的数据包
root@ARM40:/# ping 223.5.5.5
PING 223.5.5.5 (223.5.5.5): 56 data bytes
64 bytes from 223.5.5.5: seq=0 ttl=51 time=1163.151 ms
64 bytes from 223.5.5.5: seq=1 ttl=51 time=387.219 ms
64 bytes from 223.5.5.5: seq=2 ttl=51 time=353.236 ms
^C
--- 223.5.5.5 ping statistics ---
4 packets transmitted, 3 packets received, 25% packet loss
round-trip min/avg/max = 353.236/634.535/1163.151 ms
route可以看到:
2.3、上电自启动 /etc/network/if-public-network.sh
若要上电自启动 /etc/network/if-public-network.sh,则修改/etc/profile,
logintty=$(tty|grep -c "console")
if [ $logintty -eq 1 ]; then # ssh,telnet can't get into this line
/etc/network/if-public-network.sh
fi
二、时间设置
参考《ARM40-A5应用——与网络时间的同步》。
ARM40上电启动时,会运行/etc/init.d/profile,在该脚本的最后,添加:
reset
export TZ='CST-8'
hwclock -s -f /dev/rtc0
logintty=$(tty|grep -c "console")
if [ $logintty -eq 1 ]; then # ssh,telnet can't get into this line
/opt/user/date_update.sh & # when startup,update date
#/opt/user/cron_user.sh &
fi
- reset
将终端设回原始的状态,当系统终端因为程序不正常执行而进入一些奇怪的状态时,可用它来重设终端状态。 - export TZ=’CST-8’
设定时区为东八区(北京时间)。 - hwclock -s -f /dev/rtc0
将硬件时间(/dev/rtc0)设置为系统时间。 - /opt/user/date_update.sh
在ARM40刚上电启动时,脚本/opt/user/date_update.sh会从网络同步一次时间,同步成功后退出。若无法同步成功,则每60s再尝试同步一次。 - /opt/user/cron_user.sh
脚本/opt/user/cron_user.sh执行定时任务(例行性排程),其内容为:
0 1 * * * (rdate -s 129.6.15.28) && (hwclock -w) &>/dev/null 2>&1
即每天从网络同步一次时间,并存入到/dev/rtc0中。
默认不使用该功能,将其注释掉。
三、远程登录
参考《ARM40-A5应用——使用holer访问内网的ARM40》。
RDACE默认安装holer,在远端PC机上,可以通过如下方式访问ARM40:
(1)先ping一下更放心 ping www.holer.org
若ping不通,需在/etc/hosts中增加: 121.196.199.47 holer.org
(2)访问ARM40
ssh armholer@holer.org -p 65534 #使用对应的HOLER KEY和PORT
root@holer.org's password: #输入登陆密码
root@ARM40:~# ls /home/test
gpio_test uart_test can_test spi_test
可见,能够访问ARM40了。 按Ctrl+D键可退出登录。
参考文章:
ARM40-A5应用——GPRS模块ppp拨号上网
ARM40应用——ARM40联网的几种应用场景配置示例
ARM40-A5应用——与网络时间的同步
ARM40-A5应用——使用holer访问内网的ARM40
荟聚计划:共商 共建 共享 Grant
附:
(1)脚本 /etc/ppp/pon-M26-auto.sh
#!/bin/sh
dns1="223.5.5.5" #aliyun dns
dns2="223.6.6.6" #aliyun dns
if [ ! -e /etc/ppp/connect-errors ]; then
ln -s /dev/console /etc/ppp/connect-errors
fi
while true
do
procnum=`ps -ef|grep "pppd"|grep -v grep|wc -l`
if [ $procnum -eq 0 ]; then
pppd call M26-gprs &
fi
sleep 60
ping -s 1 -c 1 -w 50 -I ppp0 $dns1 >/dev/null #ping dns1,1 byte,1 count,timeout is 50s
if [ "$?" != "0" ]; then #ping request timed out
ping -s 1 -c 2 -w 50 -I ppp0 $dns2 #ping dns2,1 byte,2 count,timeout is 50s
if [ "$?" != "0" ]; then #ping request timed out
killall pppd #kill pppd
fi
fi
done
(2)/opt/user/date_update.sh 的内容
#!/bin/sh
ntpServer="129.6.15.28"
#echo "nameserver 223.5.5.5" > /etc/resolv.conf # aliyun DNS1
#echo "nameserver 223.6.6.6" >> /etc/resolv.conf # aliyun DNS2
while true
do
sleep 60
rdate -s $ntpServer
tmp=$?
#echo $tmp # for test
if [ $tmp -eq 0 ]; then # get ntp time
hwclock -w
echo "Date is updated."
exit 0
else # can't get ntp time
procnum=`ps -ef|grep "rdate"|grep -v grep|wc -l`
if [ $procnum -ne 0 ]; then
killall rdate
fi
fi
done
(3)/opt/user/cron_user.sh 的内容
/opt/user$ cat cron_user.sh
#!/bin/sh
if [ ! -d /var/spool/cron/crontabs ]; then
mkdir -p /var/spool/cron/crontabs
fi
crontab /etc/cron.arm40 # cron
crond