GPRS模块在Linux平台上ppp拨号上网总结与心得

Linux 4G模块pppd拨号上网脚本解析 在编写脚本之前,要先安装好ppp相关驱动,pppd已知pppd位于/usr/sbin,chat位于/usr/sbin,options位于/etc/ppp。要编写脚本,就要切换目录到/etc/ppp/peers,若没有peers目录则自行创建。因为是在/etc目录之下,需要使用sudo或者进入root模式才能创建或者编辑。安装ppp时,pppd就已经被固定到系统路径/etc/ppp找options,到/etc/ppp/peers找脚本文件。namename。... 阅读详情

由于一个嵌入式平台上项目开发的需要,在arm平台上实施ppp拨号上网。说起这个linux平台的ppp拨号上网,也许很多人觉很简单,网上
的成功的例子很多!不错,你说的对,但是我还要给点我的看法,就是这个简单的ppp拨号折腾了我的时间之长,我都不好意思讲。但是,现在看来这个过程学到
了好多的东西,得到很多分析能力的锻炼。现在成功移植到arm开发板上。特写日志于此,分享我的这段时间以来的总结:
linux平台的ppp拨号上网,(注明:这里只谈命令行拨号,用linux就要习惯和熟练使用命令行)

在网上常见的有三种方式:
1.使用智能的ppp拨号软件wvdial:

参考案例:本博客的《使用wvdial启动ppp协议拨号上网》
http://blog.chinaunix.net/u2/76263/showart_1227064.html
2.使用3个脚本的方式:即ppp-on,ppp-on-dialer,ppp-off
参考文档:linux-ppp-howto (
http://www.dcaccess.net/welcome/linux/PPP-HOWTO.html
)、howto hook up ppp (
http://www.theory.physics.ubc.ca/ppp-linux.html
) 以及网上很多成功的案例

注:以上两种方式各有自己的优缺点,第一种方式智能稳定,他不需要chat程序,使用集成的wvdial工具包直接连接ISP,安全稳定,可以断线自动重
拨。第二方式,使用chat程序,但是很多的参数需要自己去配置,虽然比较灵活,但是如果遇到了拨号错误以后,你若不清ppp协议拨号实现的具体机制和每
个参数的含义,你就会很吃力,也许运气好的时候,你运行的环境正好和本地的移动isp配置吻合,恭喜你能上网了,但是你遗憾的是没有学到东西,想了解
ppp机制的朋友,可以试试第2种方式,在了解大体了解ppp协议的前提下,观察思考/var/log/messages中的信息。 
3.使用命令pppd call somescript的方式:
参考案例:
http://blog.youkuaiyun.com/bouillisy/archive/2005/07/27/436203.aspx
我使用就是该方式,下面列出ppp拨号相关配置文件并作适当的解释;
注
意:我使用的gprs模块是HUAWEI
GTM900A/B两种,不同的模块的内部设置有差异,所以配置文件中的某些参数配置有差异,另外还有自身的pc机或者arm开发板的环境以及所处的地点
的信号,移动ISP都有关,在出现问题的时候要考虑这些潜在的可能因素。错误排查的过程是个枯燥难受的过程,但是反过来去看,这个过程之后会收获很多。
 
默
认情况在/etc/ppp/目录下建立文件gprs-connect-chat,内容如下(每个参数解释在ppp-howto中有详细解释。它是在ppp
底层会话的时候给chat进程的参数每行是一个“期望/发送”的组合序列。当出现一些经典的错误如: "LCP: timeout sending
Config-Requests" ,"serial line is not 8 bit clean...",“serial line is
looped
back”等,去参看方式2提到的两个文档,或者google。注意,为什么不能确切地给出解决的方式,原因是打印出来的同一个错误信息,我称之为现象,
同一现象可能是由很多种原因造成的,需要自己实地排查。)
#/etc/ppp/gprs-connect-chat
TIMEOUT         15
ABORT  '\nBUSY\r'  
ABORT  '\nNO ANSWER\r'  
ABORT  '\nRINGING\r\n\r\nRINGING\r'
#'' AT 
#'OK-+++\c-OK' ATH0
TIMEOUT         40
''              \rAT
OK              ATS0=0      #这些都是标准的at命令,建议查看随模块的at命令手册
OK              ATE0V1
OK              AT+CGDCONT=1,"IP","CMNET" #设置isp接入网关为中国移动的cmnet,如果你想 获得更多访问资源的话
OK              ATDT*99***1#   #中国移动gprs的接入号吗
CONNECT         ''
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
建立文件/etc/ppp/peers/gprs,它的作用是给pppd进程提供配置参数(详见man 8 pppd的输出内容,如果出现问题这个将是非常重要的参考页),内容如下:
#/etc/ppp/peers/gprs
# Usage:   root>pppd call gprs
/dev/s3c2410_serial1   #改成自己的端口名
115200    #改成自己串口波特率
nocrtscts
#可能你的串口是需要crtscts,硬件流控的,这是由你的串口决定的,一般嵌入式系统的串口没有带硬件流控,也不需要就加nocrtscts
modem   #这个参数使得pppd进程将等待模块发回的CD (Carrier Detect)信号,与local真好相反
#noauth
debug  #把调试信息输出到/var/log/messages,在调试成功后去掉它,以减少垃圾的产生。
nodetach
#hide-password
usepeerdns  #以下的3个参数一般不可少
noipdefault
defaultroute
user smsong  #设置接入的用户名,在chap-secrets或者pap-secets中使用
0.0.0.0:0.0.0.0  #本地和远端的ip都设为0使得接入的isp分配本地的ip地址
ipcp-accept-local  #要求peer也就是isp给自己非配动态的IP地址
#ipcp-accept-remote
#lcp-echo-failure  12
#lcp-echo-interval 3
noccp  #不需要压缩控制协议,有可能对端不需要,根据自己的isp的情况
#novj
#novjccomp
persist  #保证在连接断开的情况下不退出,并尝试重新打开连接
connect '/usr/sbin/chat -s -v -f /etc/ppp/gprs-connect-chat'
#pppd调用chat会话进程接入对端isp,启动对端的pppd,然后本地pppd与对端的pppd一起进行协
#商网络参数和chap/pap认证,成功后,再进行ncp层的ip的分配。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#/etc/ppp/chap-secets
# Secrets for authentication using CHAP
# client server secret   IP addresses
####### redhat-config-network will overwrite this part!!! (begin) ##########
####### redhat-config-network will overwrite this part!!! (end) ############
smsong * 123456 *
有点地区的GPRS可能使用pap方式认证接入用户,所以在同一级目录下,创建pap-secets文件,内容与chap-secets类似有4项的内容第2和第4项一般不限制就用*(星号)代表。反正要你在/etc/ppp/下放着这两个文件就好。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
在建立了ppp0连接以后可以使用ctrl+c或者下面的脚本程序ppp-off断开ppp连接
#/etc/ppp/ppp-off
#!/bin/sh
######################################################################
#
# Determine the device to be terminated.
#
if [ "$1" = "" ]; then
DEVICE=ppp0
else
DEVICE=$1
fi
######################################################################
#
# If the ppp0 pid file is present then the program is running. Stop it.
if [ -r /var/run/$DEVICE.pid ]; then
        kill -INT `cat /var/run/$DEVICE.pid`
#
# If the kill did not work then there is no process running for this
# pid. It may also mean that the lock file will be left. You may wish
# to delete the lock file at the same time.
        if [ ! "$?" = "0" ]; then
                rm -f /var/run/$DEVICE.pid
                echo "ERROR: Removed stale pid file"
                exit 1
        fi
#
# Success. Let pppd clean up its own junk.
        echo "PPP link to $DEVICE terminated."
        exit 0
fi
#
# The ppp process is not running for ppp0
echo "ERROR: PPP link is not active on $DEVICE"
exit 1
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
做好上面的配置以后,输入pppd call gprs命令,注意如果你的gprs这个文件不在/etc/ppp/peers/目录下,在给出标注路径给pppd
[root@localhost ppp_scripts]# pppd call gprs
timeout set to 15 seconds
abort on (\nBUSY\r)
abort on (\nNO ANSWER\r)
abort on (\nRINGING\r\n\r\nRINGING\r)
timeout set to 40 seconds
send (^MAT^M^M)
expect (OK)
^M^M
OK
-- got it
send (ATS0=0^M^M)
expect (OK)
^M
AT^M
OK
-- got it
send (ATE0V1^M^M)
expect (OK)
^M
^M^M
OK
-- got it
send (AT+CGDCONT=1,"IP","CMNET"^M^M)
expect (OK)
^M
ATS0=0^M^M
OK
-- got it
send (ATDT*99***1#^M^M)
expect (CONNECT)
^M
^M^M
OK^M
ATE0V1^M^M
OK^M
^M
OK^M
^M
OK^M
^M
OK^M
^M
CONNECT
-- got it
send (^M)
Serial connection established.
using channel 20
Using interface ppp0
Connect: ppp0  /dev/ttyS0
Warning - secret file /etc/ppp/pap-secrets has world and/or group access
sent [LCP ConfReq id=0x1    ]
rcvd [LCP ConfRej id=0x1 ]
sent [LCP ConfReq id=0x2   ]
rcvd [LCP ConfAck id=0x2   ]
rcvd [LCP ConfReq id=0x1    ]
sent [LCP ConfAck id=0x1    ]
rcvd [CHAP Challenge id=0x1 , name = ""]
Warning - secret file /etc/ppp/chap-secrets has world and/or group access
sent [CHAP Response id=0x1 , name = "smsong"]
rcvd [CHAP Success id=0x1 ""]
CHAP authentication succeeded
CHAP authentication succeeded
sent [CCP ConfReq id=0x1  ]
sent [IPCP ConfReq id=0x1    ]
rcvd [LCP ProtRej id=0x1 80 fd 01 01 00 0c 1a 04 78 00 18 04 78 00]
Protocol-Reject for 'Compression Control Protocol' (0x80fd) received
rcvd [IPCP ConfReq id=0x1]
sent [IPCP ConfNak id=0x1 ]
rcvd [IPCP ConfRej id=0x1 ]
sent [IPCP ConfReq id=0x2   ]
rcvd [IPCP ConfReq id=0x2]
sent [IPCP ConfAck id=0x2]
rcvd [IPCP ConfNak id=0x2   ]
sent [IPCP ConfReq id=0x3   ]
rcvd [IPCP ConfAck id=0x3   ]
Could not determine remote IP address: defaulting to 10.64.64.64
local  IP address 10.144.202.159
remote IP address 10.64.64.64
primary   DNS address 211.138.200.69
secondary DNS address 211.103.13.101
Script /etc/ppp/ip-up started (pid 4578)
Script /etc/ppp/ip-up finished (pid 4578), status = 0x0
使用ctrl+c可以断开连接,这样一般不太好测试是不是连接上了(遇有开发不上的控制台只有一个的原因),可以去掉/etc/ppp
/peers/gprs文件中的nodetach参数,要用ping,你需要将eth0即网口给禁用掉,这样ping才会通过ppp0端口寻找路由连接外
网。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
可以用命令tail -f /var/log/messages看到日志:
Mar 20 20:55:55 localhost pppd[4557]: pppd 2.4.4 started by root, uid 0
Mar 20 20:55:56 localhost chat[4558]: timeout set to 15 seconds
Mar 20 20:55:56 localhost chat[4558]: abort on (\nBUSY\r)
Mar 20 20:55:56 localhost chat[4558]: abort on (\nNO ANSWER\r)
Mar 20 20:55:56 localhost chat[4558]: abort on (\nRINGING\r\n\r\nRINGING\r)
Mar 20 20:55:56 localhost chat[4558]: timeout set to 40 seconds
Mar 20 20:55:56 localhost chat[4558]: send (^MAT^M^M)
Mar 20 20:55:56 localhost chat[4558]: expect (OK)
Mar 20 20:55:56 localhost chat[4558]: ^M^M
Mar 20 20:55:56 localhost chat[4558]: OK
Mar 20 20:55:56 localhost chat[4558]:  -- got it
Mar 20 20:55:56 localhost chat[4558]: send (ATS0=0^M^M)
Mar 20 20:55:56 localhost chat[4558]: expect (OK)
Mar 20 20:55:56 localhost chat[4558]: ^M
Mar 20 20:55:56 localhost chat[4558]: AT^M
Mar 20 20:55:56 localhost chat[4558]: OK
Mar 20 20:55:56 localhost chat[4558]:  -- got it
Mar 20 20:55:56 localhost chat[4558]: send (ATE0V1^M^M)
Mar 20 20:55:56 localhost chat[4558]: expect (OK)
Mar 20 20:55:56 localhost chat[4558]: ^M
Mar 20 20:55:56 localhost chat[4558]: ^M^M
Mar 20 20:55:56 localhost chat[4558]: OK
Mar 20 20:55:56 localhost chat[4558]:  -- got it
Mar 20 20:55:56 localhost chat[4558]: send (AT+CGDCONT=1,"IP","CMNET"^M^M)
Mar 20 20:55:57 localhost chat[4558]: expect (OK)
Mar 20 20:55:57 localhost chat[4558]: ^M
Mar 20 20:55:57 localhost chat[4558]: ATS0=0^M^M
Mar 20 20:55:57 localhost chat[4558]: OK
Mar 20 20:55:57 localhost chat[4558]:  -- got it
Mar 20 20:55:57 localhost chat[4558]: send (ATDT*99***1#^M^M)
Mar 20 20:55:57 localhost chat[4558]: expect (CONNECT)
Mar 20 20:55:57 localhost chat[4558]: ^M
Mar 20 20:55:57 localhost chat[4558]: ^M^M
Mar 20 20:55:57 localhost chat[4558]: OK^M
Mar 20 20:55:57 localhost chat[4558]: ATE0V1^M^M
Mar 20 20:55:57 localhost chat[4558]: OK^M
Mar 20 20:55:57 localhost chat[4558]: ^M
Mar 20 20:55:57 localhost chat[4558]: OK^M
Mar 20 20:55:57 localhost chat[4558]: ^M
Mar 20 20:55:57 localhost chat[4558]: OK^M
Mar 20 20:55:57 localhost chat[4558]: ^M
Mar 20 20:55:57 localhost chat[4558]: OK^M
Mar 20 20:55:57 localhost chat[4558]: ^M
Mar 20 20:55:57 localhost chat[4558]: CONNECT
Mar 20 20:55:57 localhost chat[4558]:  -- got it
Mar 20 20:55:57 localhost chat[4558]: send (^M)
Mar 20 20:55:57 localhost pppd[4557]: Serial connection established.
Mar 20 20:55:57 localhost pppd[4557]: Using interface ppp0
Mar 20 20:55:57 localhost pppd[4557]: Connect: ppp0  /dev/ttyS0
Mar 20 20:55:58 localhost pppd[4557]: Warning - secret file /etc/ppp/pap-secrets has world and/or group access
Mar 20 20:56:00 localhost pppd[4557]: Warning - secret file /etc/ppp/chap-secrets has world and/or group access
Mar 20 20:56:00 localhost pppd[4557]: CHAP authentication succeeded
Mar 20 20:56:00 localhost pppd[4557]: CHAP authentication succeeded
Mar 20 20:56:01 localhost kernel: PPP Deflate Compression module registered
Mar 20 20:56:02 localhost pppd[4557]: Could not determine remote IP address: defaulting to 10.64.64.64
Mar 20 20:56:02 localhost pppd[4557]: local  IP address 10.144.202.159
Mar 20 20:56:02 localhost pppd[4557]: remote IP address 10.64.64.64
Mar 20 20:56:02 localhost pppd[4557]: primary   DNS address 211.138.200.69
Mar 20 20:56:02 localhost pppd[4557]: secondary DNS address 211.103.13.101
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[root@localhost ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0A:EB:91:3B:C4 
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
          Interrupt:209 Base address:0x4000
lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1240 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1240 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:2039094 (1.9 MiB)  TX bytes:2039094 (1.9 MiB)
ppp0      Link encap:Point-to-Point Protocol 
          inet addr:10.144.202.159  P-t-P:10.64.64.64  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:5 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:62 (62.0 b)  TX bytes:98 (98.0 b)
[root@localhost ~]# ifconfig eth0 down      
禁用以太网接口eth0,使得不和ppp0接口使用时候的路由冲突
[root@localhost ~]# ping 211.136.20.203
PING 211.136.20.203 (211.136.20.203) 56(84) bytes of data.
64 bytes from 211.136.20.203: icmp_seq=1 ttl=247 time=3379 ms
64 bytes from 211.136.20.203: icmp_seq=2 ttl=247 time=2388 ms
64 bytes from 211.136.20.203: icmp_seq=3 ttl=247 time=2892 ms
64 bytes from 211.136.20.203: icmp_seq=4 ttl=247 time=1952 ms
64 bytes from 211.136.20.203: icmp_seq=5 ttl=247 time=1692 ms
64 bytes from 211.136.20.203: icmp_seq=6 ttl=247 time=2112 ms
64 bytes from 211.136.20.203: icmp_seq=7 ttl=247 time=1492 ms
64 bytes from 211.136.20.203: icmp_seq=8 ttl=247 time=1472 ms
--- 211.136.20.203 ping statistics ---
9 packets transmitted, 8 received, 11% packet loss, time 7999ms
rtt min/avg/max/mdev = 1472.094/2172.525/3379.568/638.150 ms, pipe 4
这个时候如果你只能ping纯的ip地址,而不能解析域名,这个时候你可能需要将/etc/ppp/resolv.conf(内容被新获得的
dns取代)内容拷贝到/etc/resolv.conf中或者做一个到/etc/resolv.conf的链接。这样就可以ping域名和在浏览器中打
开网页啦。

[root@localhost ~]# ping
www.baidu.com
PING
www.a.shifen.com
(202.108.22.5) 56(84) bytes of data.
64 bytes from 202.108.22.5: icmp_seq=1 ttl=50 time=3142 ms
64 bytes from 202.108.22.5: icmp_seq=2 ttl=50 time=3348 ms
64 bytes from 202.108.22.5: icmp_seq=3 ttl=50 time=2796 ms
64 bytes from 202.108.22.5: icmp_seq=4 ttl=50 time=3632 ms
64 bytes from 202.108.22.5: icmp_seq=5 ttl=50 time=1936 ms
64 bytes from 202.108.22.5: icmp_seq=7 ttl=50 time=909 ms
64 bytes from 202.108.22.5: icmp_seq=6 ttl=50 time=1951 ms
64 bytes from 202.108.22.5: icmp_seq=8 ttl=50 time=2839 ms
64 bytes from 202.108.22.5: icmp_seq=9 ttl=50 time=1984 ms
64 bytes from 202.108.22.5: icmp_seq=10 ttl=50 time=2404 ms
64 bytes from 202.108.22.5: icmp_seq=11 ttl=50 time=1417 ms
---
www.a.shifen.com
ping statistics ---
12 packets transmitted, 11 received, 8% packet loss, time 13806ms
rtt min/avg/max/mdev = 909.082/2396.720/3632.981/803.194 ms, pipe 4
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
另
外,如果你希望一开机就可以自动拨号上网,只要在自己的开机启动脚本(我的开发板上是/etc/init.d/rcS,在pc上有好几个如:/etc
/rc.local文件,做链接到cd
/etc/rcN.d,N的选择看运行的级别)里面加上如下的语句,注意这个脚本里面的可执行程序给出的必须是据对路径,因为刚开机嘛,整个机子的环境变
量还没有设置好。 还有不要在新加入的命令后面加&使得其变成后台进程,它会周期性执行,会出错!
添加的几条shell语句如下:                 
/etc/ppp/rmlock  #简单的一个判断并删除无效的串口的lock文件,保证成功拨号                 
/usr/bin/pppd call gprs    #自动拨号        
/usr/bin/sleep 20   #给它20s的拨号时间,看你的模块拨通的情况了。                       
/bin/qtopia & #这个是原来脚本里面有的,把它的顺序安排在这个位置,是为了在看到qt界面启    #动以后,真好gprs拨号已经建立号,也就可以上网了。                     
/sbin/ifconfig eth0 down  #顺便开机禁用eth0网口
注:rmlock文件
#/etc/ppp/rmlock file
#!/bin/sh
if [ -f /var/lock/LCK..s3c2410_serial1 ]; then
/bin/rm -f /var/lock/LCK..s3c2410_serial1  
fi
如何解决pppd 运行的段错误:
当你手动中断ppp链接次数过多后,可能回出现pppd运行的段错误,
The suggestion from debian bug report solves this problem. It is
pretty straightforward: Simply delete /var/run/pppd.tdb file (in my
system, it is /var/run/pppd2.tdb).
总结:根据自己的环境和喜好选用其中一种拨号方式,wvdial的方式移植到arm开发板的时候,交叉编译的时候出错很多,可以试试,相对比较
麻烦,而其它运行需要wvstreams的库的支持,占用空间大。第2中方式最常用,但是出错的可能性比较大,原因使其比较灵活,第3中跟第2中方式类
似。在出错的时候可以到google上搜索同样的错误现象,参考并修改自己的参数,再分析尝试,只要坚持到底,才会真有收获!当时你要没有什么时间了也不
想学习ppp的内部拨号机制,建议用windows把,那个封装的很好。稳定可靠!呵呵

祝:ppp&linux拨号的朋友好运!

转自:http://linux.chinaunix.net/techdoc/system/2009/07/17/1124824.shtml

在ARM-linux上实现4G模块PPP拨号上网 搞了3、4天4G模块,从毫无头绪到可以ping通外网,着实不轻松。用的是一不知名品牌EC20, 技术支持很少,资料很乱,然后自己搜集资料,一步一步调试,才搞通。 环境: ubuntu12.04.02 gcc:arm-2009q3 主要步骤: 1、配置内核 menuconfig: 1)、USB驱动配置 Device Drivers---→ USB support---→ USB 阅读详情

相关推荐

pppd拨号流程详解

Linux下ppp拨号

3g移植

一 开发环境简介 内容                                                                   说明 3G模块              华为EM820W(WCDMA) 3G SIM卡              中国联通3G卡 嵌入式li

星星之火,可以燎原!...... 4万+

pppd拨号配置文件,放入相应目录直接可用。使用方法pppd call 4gnet&

pppd拨号配置文件,放入相应目录直接可用。 使用方法pppd call 4gnet&

linux ppp 串口 gprs,GPRS模块在Linux平台上ppp拨号上网总结与心得

GPRS模块在Linux平台上ppp拨号上网总结与心得2009年07月17日02:09 来源:ChinaUnix博客作者:iibull 编辑:周荣茂由于一个嵌入式平台上项目开发的需要,在arm平台上实施ppp拨号上网。说起这个linux平台的ppp拨号上网,也许很多人觉很简单,网上的成功的例子很多!不错,你说的对,但是我还要给点我的看法,就是这个简单的ppp拨号折腾了我的时间之长,我都不好意思讲。...

weixin_35734209的博客 242

scrapy - 美团民宿 实战练习

目录结构 items.py import scrapy # 民俗名称,地区,价格,房间类型及数量,床的数量,可住几人 class MeituanItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() title = scrapy.Field() place = scrapy.Field() price = scrapy.F...

小刘的博客 2665

I2C通信协议SCL与SDA引脚特性:核心要点总结

深入讲解I2C通信协议中SCL和SDA引脚的工作机制与电气特性,帮助理解i2c通信协议的稳定传输原理,掌握上拉电阻配置与信号时序控制要点。

weixin_42103128的博客 2740

关于PPP拨号 和 AT指令实现GPRS模块联网的疑问

以下内容摘抄自互联网: ppp拨号 与 at命令的疑问 GPRS模块在Linux平台上ppp拨号上网总结与心得 以PPP拨号实现GPRS与因特网的数据通信的具体实现流程 问: 我刚接触GPRS,了解AT指令方式如何实现的GPRS网络通信,但对PPP拨号不太了解,有以下问题: 1)ppp拨号与用at命令实现gprs网络通信有什么区别?ppp拨号完成的哪一步骤? 2)看了一些资...

1437

开心消消乐

1)当点击一个1时,该1变被反转为0,同时相邻的上、下、左、右,以及左上、左下、右上、右下8个方向的1(如果存在1)均会自动反转为0;2)进一步地,一个位置上的1被反转为0时,与其相邻的8个方向的1(如果存在1)均会自动反转为0;上述样例中,四个角上的1均在中间的1的相邻8个方向上,因此只需要点击一次即可。给定一个N行M列的二维矩阵,矩阵中每个位置的数字取值为0或1。在上述4 * 4的矩阵中,只需要点击2次,即可将所有的1进行消除。接下来N行表示矩阵的初始值,每行均为M个数,取值范围[0,1]

面试高手的博客 2730

关于Linux使用pppd拨号,自动断网,重新拨号功能

脚本如下:auto_pppd.sh#!/bin/shwhile true;do    ping -w1 news.sina.com.cn >/dev/null 2>&1 || ( killall pppd; date; pppd call ls-gprs &)   sleep 20  #每20秒检测一次done  可以放在开机脚本auto_pppd.sh#!/bin/s...

u010871058的专栏 1万+

(11)(2.2.2) BLHeli32,AM32, and BLHeli_S ESCs(一)

Ardupilot官网关于《Peripheral Hardware》的翻译 —《(2.2.2) BLHeli32,AM32, and BLHeli_S ESCs》。

无人机开发(开源Ardupilot) 2234

手把手教你模拟登录豆瓣并爬取个人书影音数据:从Cookie解析到反爬攻防实战

在开始写代码之前,先明确我们需要的工具。:建议用3.10以上版本,方便使用一些新特性(如match语句)httpx:比requests更现代,支持HTTP/2,异步性能强,连接池复用好:解析HTML,语法简单,容错性强selenium:仅用于处理登录时的滑块验证(模拟真人)pandas:最终数据清洗和导出Excel/CSVretrying:自动重试机制,应对临时封禁:随机UA,降低特征lxml:作为BeautifulSoup的解析器,速度快为什么不只用requests?

2201_76125261的博客 577

PPPD 拨号上网监控脚本

【代码】PPPD 拨号上网监控脚本。

440

毕设助力!从0到1构建基于YOLO的家居安防异常活动监测系统,让你的毕设守护家庭安全

做完这个项目,你会发现自己完整走过了“数据采集→标注→模型训练→功能集成→界面开发”的毕设全流程,这不仅是技术能力的证明,更是对“技术守护生活”这一理念的实践。答辩时,你可以重点讲这几点:系统解决了家居安防的哪些痛点、对比了不同YOLO模型的性能差异、系统未来能怎么优化(比如对接智能门锁/报警器、实现语音交互)。未来,这个系统还能往“更智能”的方向发展:比如结合行为分析判断异常意图、开发移动端APP实现全屋设备联动、在智慧社区中实现多家庭联防……想象空间很大。

LXY_LOVE36的博客 125

pppd 拨号脚本设置 拨号讲解

 pppd 拨号脚本设置 浅析linux下脚本拨号上网  既然是拨号上网,就不能不提到ppp(point-to-point protocol)协议.ppp协议提供了一种通过串行点对点联接传输数据报的方式.它由三部份组成:一种在串行封装数据报的方式,扩展联接控制协议 LCP,和用来建立和配置不同网络层协议的家族网络控制协议NCP.封装方案由内核驱动代码来提供.pppd(ppp daem

jk110333的专栏 2万+

黑猫带你学eMMC协议第2篇:eMMC部分相关名词释义

1 前言 1.1 声明 本文依据eMMC JEDEC5.1、网络资料及个人工作经验整理而成,如有错误请留言。 本文结合eMMC JEDEC5.1协议手册查看效果更佳。 1.2 本文背景 本文关键词不包括emmc jedec5.1协议第3章节:《Terms and definitions》内容。关于emmc协议层的关键词,直接查阅spec相关章节即可,清晰明了,此处没必要再列出。 本文为本人工作学习中常听到或常用到关乎于emmc/flash的一些关键词合集,没有固定分类,不需要强行记忆,供查询使用。 1.

黑猫奥利奥的博客 7446

58.Sobel边缘检测算子

注:在梯度运算中,很可能会出现负的灰度值,我们不能再采用uint8类型作为像素的数据类型,而是采用了CV_16S或者CV_32F这种有负数范围的类型,运算结果里的负数也不能不处理,否则在显示的时候就会被截断为0,这样就会丢失边界信息。如下图所示,对中心像素Z5求取多个方向的灰度差分,对于Z5的8邻域,分为4个方向,即对角线和水平垂直4个方向对:(z1, z9) ,(z2, z8), (z3, z7), (z6, z4) 给定邻域方向梯度矢量g的幅度为:|g| = <像素灰度差分>/<相邻像素的距离>。

twnkie的博客 4884

linux pppd源码下载_Linux 使用pppd和ppp程序进行3G/4G拨号

试验环境:Linux marsboard 3.4.90 #9 SMP PREEMPT Thu Mar 3 18:28:43 CST 2016 armv7l armv7l armv7l GNU/Linux (注:A20核心板)通讯模块,加载成ttyUSB*设备;目标:使用通讯模块进行3G4G拨号连接互联网方法:使用pppd和ppp程序,进行拨号连接前提:安装了ppp、pppd两个程序摘要:涉及的文件...

weixin_33836754的博客 1336

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: LINUX下查找文件的方法
下一篇: 一个失误,编译器报错Error: invalid char '[' beginning operand 2 `[ %eax]'
tinyhare
博客等级 码龄15年 11粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值