??xml version="1.0" encoding="utf-8" standalone="yes"?> ---wiki : http://zh.wikipedia.org/zh-cn/PPPoE (PPPoE及TCP/IP协议?
(一)pppoe-server
也就是PC机器Q我q边只说linuxpȝ下面的情况,我的是UbuntupȝQ下载rp-pppoeQ?nbsp; http://www.roaringpenguin.com/products/pppoe 按照里面的README来要求来安装rp-pppoe。最单的是default直接q行go脚本。然后PC机器可以运行pppoe-server命o了。不要急,q要对serverq行配置Q配|文件在/etc/pppoe-server-optionsQ打开q行改写。我的配|如?
保存退出,q样配置完成Q这样在建立ppp链接的Discovery阶段׃q行验证Qserver保存的验证用户名Q密码就?etc/ppp/chap-secrets里面Q?/p>
最后在PC端启动pppoe-serverQ输入命令:
(?pppoe-client
在android上面ULpppoe模块Q同样用rp-pppoeQ我们可以build成模块移植到androidl端上面Q需要自己写make fileQ我q边是用Android.mk:
于是build出来pppoe可执行模块,push?system/bin下面Q当然可以直接改写rp-pppoe的makefile。于是在l端可以发起pppoe链接h了?/span>
(?q行试
Q?Q首先要保证ClientQServer都在一个广播域中,按照前文中的思\Q手持终端是通过wifiQ链接到接入LAN中的无线路由器中Q而PC是直接接入到LAN中的?span class="Apple-converted-space"> Q?Qadbq入讑֤l端后,输入
q样׃发vpppoe链接Q经qDiscoveryQ认证,LCPQ最l徏立其ppp链接。在PC端会看到新徏立v来的ppp0QClient端也会看到?/p>
(?后箋配置
Q?QPC端配|iptable使终端的数据包能够请求访问internets Q?Q在l端增加路由表项?/p>
Q?Q配|dns q样操作的话是不需要设|dns的,因ؓ链接wlan的时候,使用的dns-server与现在的是完全一LQ如果经q上q操作,能够ping通internet但是不能够正怸|的话,一定就是dns的问题了?/p>
PPPoE
QPoint to Point Protocol over EthernetQ基于以太网的点对点协议Q的工作程包含发现QDiscoveryQ?/strong>?strong>会话QSessionQ?/strong>两个阶段Q发现阶D|无状?/strong>的,目的是获得PPPoEl端Q在局端的ADSL讑֤上)的以太网MAC地址Qƈ建立一个惟一的PPPoE SESSION-ID。发现阶D늻束后Q就q入标准的PPP会话阶段?/span>
1.发现阶段QPPPoEDQPPPoE DiscoveryQ?/strong>
1.1 PADIQPPPoE Active Discovery InitiationQ?/span>
Lq播发v分组Q分l的目的地址Z太网的广播地址 0xffffffffffffQCODEQ代码)字段gؓ0×09QPADI CodeQ,SESSION-IDQ会话IDQ字Dgؓ0x0000。PADI分组必须臛_包含一个服务名U类型的标签QService Name TagQ字Dgؓ0x0101Q,向接入集中器提出所要求提供的服务?/span>
1.2 PADOQPPPoE Active Discovery OfferQ?/span>
接入集中器收到在服务范围内的PADI分组Q发送PPPoE有效发现提供包分l,以响应请求。其中CODE字段gؓ0×07QPADO CodeQ?/span>QSESSION-ID字段g?x0000。PADO分组必须包含一个接入集中器名称cd的标{(Access Concentrator Name TagQ字Dgؓ0x0102Q,以及一个或多个服务名称cd标签Q表明可向主机提供的服务U类?u>PADO和PADI?/span>Host-Uniq Tag值相?/u>?br />
1.3 PADRQPPPoE Active Discovery RequestQ?/span>
L在可能收到的多个PADO分组?strong>选择一?/strong>合适的PADO分组Q然后向所选择的接入集中器发送PPPoE有效发现h分组。其中CODE字段?x19QPADR CodeQ?/span>QSESSION_ID字段g?x0000。PADR分组必须包含一个服务名U类型标{,定向接入集U器Q或交换机)h的服务种cR当L在指定的旉内没有接收到PADOQ它应该重新发送它的PADI分组Qƈ?strong>加倍等?/strong>旉Q这个过E会被重复期望的ơ数?/span>
1.4 PADSQPPPoE Active Discovery Session-confirmationQ?/span>
接入集中器收到PADR分组后准备开始PPP会话Q它发送一个PPPoE有效发现会话认PADS分组。其中CODE字段gؓ0×65QPADS CodeQ,SESSION-ID字段gؓ接入集中器所产生的一?strong>惟一?/strong>PPPoE会话标识L。PADS分组也必d含一个接入集中器名称cd的标{以认向主机提供的服务。当L收到PADS 分组认后,双方p入PPP会话阶段?u>PADS和PADR?/span>Host-Uniq Tag值相?/u>?/span>
? PPPoE的协商流E?/span>
2.会话阶段QPPPoESQPPPoE SessionQ?/strong>
PPP会话的徏立,需要两端的讑֤都发送LCP数据包来配置?a title="软g试知识? class="replace_word" style="text-decoration: none; font-weight: bold; color: #df3434" target="_blank">试数据通信链\?/span>
用户L与接入集中器Ҏ在发现阶D|协商的PPP会话q接参数q行PPP会话。一旦PPPoE会话开始,PPP数据可以以M其他的PPP装形式发送。所有的以太|都是单播的。PPPoE会话的SESSION-ID一定不能改变,q且必须是发现阶D分配的倹{?/span>
2.1 LCP协商阶段Q?strong>LCPQLink Control ProtocolQ?/span>
LCP的RequestL和AC都要l对方发送,LCP协商阶段完成最大传输单元(MTUQ,是否q行认证和采用何U认证方式(Authentication TypeQ的协商?/span>
Q?QLCP协议数据报文分类
链\配置报文Q用来徏立和配置一条链路,主要包括Configure-Request、Configure-Ack、Configure-Nak和Configure-Reject报文
链\l护报文Q用来管理和调试链\Q主要包括Code-Reject、Protocol-Reject、Echo-Request、Echo-Reply和Discard-Request报文
链\l止报文Q用来终止一条链路,主要包括Terminate-Request和Terminate-Reply报文
Q?QLCP协商q程
LCP协商的过E如下:协商双方互相发送一个LCP Config-Request报文Q确认收到的Config-Request报文中的协商选项Q根据这些选项的支持与接受情况Q做出适当的回应。若两端都回应了Config-ACKQ则标志LCP链\建立成功Q否则会l箋发送Request报文Q直到对端回应了ACK报文为止?/span>
? LCP协商的基本过E?/span>
说明Q?/strong>
Q?QConfig-ACKQ若完全支持对端的LCP选项Q则回应Config-ACK报文Q报文中必须完全协带对端Request报文中的选项?/span>
Q?QConfig-NAKQ若支持对端的协商选项Q但不认可该协商的内容Q则回应Config-NAK报文Q在Config-NAK的选项中填上自己期望的内容Q如:对端MRUgؓ1500Q而自己期望MRUgؓ1492Q则在Config-NAK报文中埴上自q期望?492?/span>
Q?QConfig-RejectQ若不能支持对端的协商选项Q则回应Config-Reject报文Q报文中带上不能支持的选项Q如Windows拨号器会协商CBCPQ被叫回|Q而ME60不支持CBCP功能Q则回将此选项拒绝掉?/span>
2.2 认证阶段Q?span style="font-size: 14px">PPP AuthenticationQPAP/CHAPQ?/span>
会话双方通过LCP协商好的认证Ҏq行认证Q如果认证通过了,才可以进行下面的|络层的协商。认证过E在链\协商l束后就q行?/span>
Ⅰ PAPQPassword Authentication ProtocolQ口令认证协议)认证
PAP?strong>两次握手协议Q它通过用户名及口o来对用户q行验证。PAP验证q程如下Q?/span>
当两端链路可怺传输数据Ӟ被验证方发送本端的用户名及口o到验证方Q验证方Ҏ本端的用戯Q或Radius服务器)查看是否有此用户Q口令是否正。如正确则会l对端发送Authenticate-ACK报文Q通告对端已被允许q入下一阶段协商Q?strong>否则发送NAK报文Q通告对端验证p|。此Ӟq不会直接将链\关闭。只有当验证不过ơ数辑ֈ一定|~省?0Q时Q才会关闭链路?/span>
PAP的特Ҏ在网l上?strong>明文的方式传递用户名及口令,如在传输q程中被截获Q便有可能对|络安全造成极大的威胁。因此,它适用于对|络安全要求相对较低的环境?/span>
? PAP认证程
Ⅱ CHAPQChallenge Handshake Authentication ProtocolQ质询握手认证协议)认证
CHAP?strong>三次握手协议?span style="color: red">只在|络上传输用户名Qƈ不传输用户口?/span>Q因此它的安全性要比PAP高。CHAP的验证过EؓQ?/span>
首先?span style="color: #990000">验证?/strong>QServerQ向被验证方QClientQ发送一?span style="color: #ff0000">随机产生的报?/span>Qƈ同时本端的L?/strong>附带上一起发送给被验证方?span style="color: #990000">被验证方接到对端Ҏ端的验证hQChallengeQ时Q便Ҏ此报文中验证方的L名和本端的用戯查找用户口o字,如找到用戯中与验证方主机名相同的用P便利用报文ID、此用户的密钥用Md5法生成应答QResponseQ?/span>Q随后将应答和自qL?/strong>送回?span style="color: #990000">验证?/strong>接到此应{后Q用报文ID、本方保留的口o字(密钥Q和随机报文用Md5法得出l果Q与被验证方应答比较Q根据比较结果返回相应的l果QACK or NAKQ?/span>
Q?Q接受认证端发送Challenge
Q?Q申误证端发验证请求报?/span>
Q?Q接受认证端回应认证接受报文
l过以上三次报文交互后,CHAP认证完成?/span>
? CHAP认证程
2.3 NCP协商阶段Q?strong>NCPQNetwork Control ProtocolQ?/span>
NCP有很多种Q如IPCP、BCP、IPv6CPQ最为常用的?strong>IPCPQInternet Protocol Control ProtocolQ协议。NCP的主要功能是协商PPP报文的网l层参数Q如IP地址QDNS Server IP地址QWINS Server IP地址{。PPPoE用户主要通过IPCP来获取访问网l的IP地址或IP地址Dc?/span>
NCP程与LCP程cMQ用户与ME讑֤之间互相发送NCP Config-Request报文q且互相回应NCP Config-Ack报文后,标志NCP己协商完Q用户上U成功,可以正常讉K|络了?/span>
IPCP的协商过E是ZPPP状态机q行协商的。经q双方协商,通过配置h、配|确认、配|否认等包文交换配置信息Q最l由initial (或closed)状态变为Opened状态。IPCP状态变为Opened的条件必L发送方和接收方都发送和接收q确认包文?/span>
IPCP协商q程中,协商包文可包含多个选项Q即参数。各个选项的拒l或否认都不能媄响IPCP的UPQIPCP可以无选项协商Q无选项协商也同栯够UP。选项有IP Address、网兟뀁掩码等Q其中IP Address是最重要的一个选项Q有些厂家的实现必须q个选项得到认Q大多数厂家的实现允许这个选项为空?/span>
NCP的基本协商流E见下图Q?/span>
? NCP的基本协商流E?/span>
用户和接入设备对IP服务阶段的一些要求进行多ơ协商,以决定双斚w能够接收的约定?/span>
如:IP业务阶段使用的IP压羃协议{。双方的协议是通过报文中包含的Option进行协商的Q每一个Option都是一个需要协商的问题?/span>
最后双斚w需要对方答复Configure_Ack的同意报文?/span>
2.4 会话l持QSession Keep-aliveQ?/strong>
讑֤d发?strong>Echo Requestq行PPPoE心蟩保活Q若3ơ未得到服务器的响应Q则讑֤d释放地址。发LCP Echo Request 的时候,术字字D要和之前通信的Configure_Request使用的魔术字字段保持一致?/span>
有些讑֤或终端不支持d发?Echo-Request 报文, 只能支持回应Echo-Reply报文?/span>
2.5 会话l束QSession TerminationQ?/strong>
PPPoE q有一?strong>PADTQPPPOE Active Discovery TerminateQ分l,它可以在会话建立后的M时候发送,来终止PPPoE会话Q也是会话释放。它可以׃机或者接入集中器发送,目的地址填充为对端的以太|的MAC地址?/span>
当对Ҏ收到一?PADTQPPPOE Active Discovery TerminateQ分l,׃再允怋用这个会话来发送PPP业务。PADT分组不需要Q何标{,其CODE字段gؓ0xa7QPADT CodeQ,SESSION-ID字段gؓ需要终止的PPP会话的会话标识号码。在发送或接收PADT后,即正常的PPPl止分组也不必发送。PPP对端应该使用PPP协议自n来终止PPPoE会话Q但是当PPP不能使用Ӟ可以使用PADT?/span>
3.PPPoE接入程CZ
PPP状态变q如?所C:
? PPP状态变q图
以PPPoE-CHAPZQPPP用户接入程如图7所C:
? PPPoE/CHAP接入认证程
4.Linux中的PPPoE拨号守护q程
Q?span style="color: #ff0000">pppdQPoint-to-Point Protocol DaemonQ?/span>
pppd是一个后台服务进E?daemon)Q是一个用L间的q程Q所以把{略性的内容从内核的PPP协议处理模块Udpppd中是很自然的事了。pppd实现了所有鉴权、压~?解压和加?解密{扩展功能的控制协议?/span>
pppd只是一个普通的用户q程Q它如何扩展PPP协议呢?q就是pppd与内怸的PPP协议处理模块之间U定了,它们之间采用了最传统的内核空间与用户I间之间通信方式Q设备文件?/span>
讑֤文g名是/dev/ppp。通过readpȝ调用Qpppd可以dPPP协议处理模块的数据包Q当ӞPPP协议处理模块只会把应该由pppd处理的数据包发给pppd。通过writepȝ调用Qpppd可以把要发送的数据包传递给PPP协议处理模块。通过ioctrlpȝ调用Qpppd可以讄PPP协议的参敎ͼ可以建立/关闭q接?/span>
参考:
?a style="text-decoration: none; color: #ca0000" target="_blank">PPP协议?/span>
?a style="text-decoration: none; color: #ca0000" target="_blank">PPP状态机ȝ?/span>
?a style="text-decoration: none; color: #ca0000" target="_blank">PPP协议详细解析?/span>
?a style="text-decoration: none; color: #ca0000" target="_blank">PPPoE协议?/a>?/span>
?a style="text-decoration: none; color: #ca0000" target="_blank">PPPoE通信协议?/span>
?a style="text-decoration: none; color: #ca0000" target="_blank">PPPoE拔号程?/span>
?a style="text-decoration: none; color: #ca0000" target="_blank">PAP和CHAP认证?/span>
?a style="text-decoration: none; color: #ca0000" target="_blank">PPP-CHAP原理与配|?/a>?/span>
?a style="text-decoration: none; color: #ca0000" target="_blank">PPP的CHAP认证完全配置?/span>
?a style="text-decoration: none; color: #ca0000" target="_blank">PPPoE实例?/a>
?a style="text-decoration: none; color: #ca0000" target="_blank">PPPoE拨号q程抓包解析?/span>
?a style="text-decoration: none; color: #ca0000" target="_blank">PPPoE用户上线交互q程?/span>
?a style="text-decoration: none; color: #ca0000" target="_blank">PPPoE协议技术与标准培训教材?/span>
?a style="text-decoration: none; color: #ca0000" target="_blank">路由器如何设|PPPoE上网QADSL虚拟拨号Q?/a>?br />
?a style="text-decoration: none; color: #ca0000" target="_blank">Linuxpȝ修改PPPOE配置解决ADSL频繁掉线问题?/span>
?a style="text-decoration: none; color: #ca0000" target="_blank">LinuxPPP实现源码分析?/span>
?a style="text-decoration: none; color: #ca0000" target="_blank">Linux PPP 数据收发程?/span>
?a style="text-decoration: none; color: #ca0000" target="_blank">PPPoE协议和pppd源码分析?/span>
?a style="text-decoration: none; color: #ca0000" target="_blank">如何用Linux做PPPoE服务?/a>?/span>
?a style="text-decoration: none; color: #ca0000" target="_blank">LinuxPPPoE讄的六个步?/a>?/span>
?a style="text-decoration: none; color: #ca0000" target="_blank">关于pppdUL?g功能?/a>
?a style="text-decoration: none; color: #ca0000" target="_blank">UL——linux下?G拨号上网?/span>
?a style="text-decoration: none; color: #ca0000" target="_blank">成功实现Linux下pppd通过GPRS拨号上网?/span>
pȝQWindows 7 PHP版本QPHP 7.0.1 服务器工Pupupw PHPUnit版本QPHPUnit 5.7.15
一、配|PHPUnit
首先到PHPUnit官网Q?a style="font-size: 16px; text-decoration: none; font-family: 'Microsoft Yahei'; color: #ff4200; transition: all 0.5s ease" target="_blank">Ҏq入Q下载相应的版本。我们用的是php 7.0Q于是选择PHPUnit 5。得?nbsp; 把该文g攑ֈL位置。以我自׃ؓ例,我把它放到我们项目的目录下,?code style="font-weight: normal; font-style: normal">D:\repository\CourseManagement\mobile_api_test ?/p>
右键 我的电脑 Q选择 属?/strong> 。点d侧的 高pȝ讄 。此时弹?nbsp;pȝ属?/strong> Q选择 高 选项卡,点击右下角的 环境变量 ?在用户变量里面,双击 PATH Q在 变量?/strong> 后面d 官方文里有一Ҏ有提刎ͼ是php的环境变量也要设|。比如我?nbsp; 按快捷键
]]>
]]>
]]>
]]>
# PPP options for the PPPoE server
# LIC: GPL
auth #链接时候验?/span>require-chap #CHAP认证# login #链接后验?/span>
lcp-echo-interval 10#?0U发送心跳信令request
lcp-echo-failure 2#q箋两条心蟩信oreply没有回复断开链接
# Secrets for authentication using CHAP
# client server secret IP addresses"user_xiaokeweng" * "my_password" *
其中各个字段的含义,思义Q?指代all?
sudo pppoe-server -I eth0
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:=\
src/pppoe.c \
src/if.c \
src/debug.c \
src/common.c \
src/ppp.c \
src/discovery.c
LOCAL_MODULE_PATH := $(LOCAL_PATH)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := pppoe
LOCAL_C_INCLUDES += $(LOCAL_PATH)/src
include $(BUILD_EXECUTABLE)
/system/bin/pppoe -d
׃发vDiscorveryQ在q播域内q播PADI报文Q成功的话会q回发现的pppoe-server的MAC地址Qƈ且在PC端抓包eth0的话Q用ppp||pppoedq行qoQ能够收到终端的q播报文。这样就能说明已l实现pppoe通\。接着Q?
/system/bin/pppd pty "/system/bin/pppoe -I wlan0" user user_xiaokeweng password my_password
echo 1 > /proc/sys/net/ipv4/ip_forward //打开iptableQ该命o切换到rootq行
iptables -t nat -F //清空表项
iptables -t nat -L //现实表项
iptables -t nat -A POSTROUTING -s 192.168.1.1 -j SNAT --to 192.168.163.254
//-s 为终端获得的ipQ?-to 为ethx 的ip
ip -d route //查看路由表项
ip route del default//删除掉全部defaultQ需要操作多?
ip route adddefault dev ppp0 //默认\p为ppp0
ip -d route //再次查看
getprop
net
.dns1
//查看默认路由1
getprop
net
.dns2
//查看默认路由2
setprop
net
.dns1
110
.112
.120
.115
//讄默认路由1
setprop
net
.dns2
110
.112
.120
.114
//讄默认路由2
]]>
]]>
转发自:http://blog.csdn.net/lishanmin11/article/details/39399939
]]>
.phar
文gQƈ把名字改?nbsp;phpunit.phar
?/p>
;D:\repository\CourseManagement\mobile_api_test
Q注意最前面的分P路径填存放phpunit.phar的\径)。配|这个是Z在Q意位|都能用PHPUnitQ不配置的话Q需要在phpunit.phar的\径下才能使用PHPUnit?/p>
php.exe
?code style="font-weight: normal; font-style: normal">E:\software\wamp\bin\php\php5.5.12 里,那么也要?nbsp;PATH 后面d;E:\software\wamp\bin\php\php5.5.12
。PSQ可能是因ؓ我没有安装PHP的IDEQ所以一直没有配|它Q偶然之间才惛_可能要添加这个环境变量?/p>
Win + R
Q输入cmdq回车。进入存放phpunit.phar的\径。输?nbsp;echo @php "%~dp0phpunit.phar" %* > phpunit.cmd
q回车。接着输入 phpunit --version
q回车。如果得到输?nbsp;PHPUnit x.y.z by Sebastian Bergmann and contributors.
则表C配|好了(如果有误Q输?code style="font-weight: normal; font-style: normal">exit q回车,重新来一遍)。如下图Q?/p>
二、用PHPUnitq行试
使用PhpUnit必须使用c进行测试,我们先新Z个phpc,然后q行一下?br />
<?php
2class MyTestClass extends PHPUnit_Framework_TestCase
3{
4 /**
5 * Testing the answer to “do you love unit tests?”
6 */
7 public function testDoYouLoveUnitTests()
8 {
9 $love = true;
10 $this->assertTrue($love);
11 }
12}
13?>
该文g保存为testUnit.phpQ然后进入到该文件的目录下,q行phpunit testUnit.php
得到如下l果Q?br />
D:\UPUPW_AP7.0\htdocs\testUnit>phpunit testUnit.php
PHPUnit 5.7.15 by Sebastian Bergmann and contributors.
. 1 / 1 (100%)
Time: 209 ms, Memory: 10.00MB
OK (1 test, 1 assertion)
参考文章:http://developer.51cto.com/art/201512/499453.htm
http://developer.51cto.com/art/201102/244535.htm
]]>
1、在ubuntu下搭Z叉编译环?br /> 1Q?开发板提供的gcc拯到ubuntu环境下,如我本地拯完后的bin目录为:
/home/acer/source/arm-gcc/fsl-linaro-toolchain/bin/
2Q?配置ubuntu的环境变量文Ӟ
我的ubuntu版本?0.04Q打开/etc/bash.bashrc文gQ然后在文g末尾增加环境变量?br />
|上通用配置都包括如下一?br /> export PATH=/opt/liunx/arm-gcc/fsl-linaro-toolchain/bin:$PATH
但是因ؓ开发板不同Q我的还要增加如下几句:
export ARCH=arm
export CROSS_COMPILE=/home/acer/source/arm-gcc/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-
配置完成后,保存文g
3Q重新加载环境变量:
source /etc/bash.bashrc
4)验证交叉~译环境Q我的会输出如下提示Q?br /> acer@ace:~/lighttpd/lighttpd-1.4.18$ arm-linux-gcc -v
Using built-in specs.
COLLECT_GCC=arm-linux-gcc
COLLECT_LTO_WRAPPER=/opt/liunx/arm-gcc/fsl-linaro-toolchain/bin/../libexec/gcc/arm-fsl-linux-gnueabi/4.6.2/lto-wrapper
Target: arm-fsl-linux-gnueabi
Configured with: /work/build/.build/src/gcc-linaro-4.6-2011.06-0/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-fsl-linux-gnueabi --prefix=/work/fsl-linaro-toolchain-2.13 --with-sysroot=/work/fsl-linaro-toolchain-2.13/arm-fsl-linux-gnueabi/multi-libs --enable-languages=c,c++ --with-pkgversion='Freescale MAD -- Linaro 2011.07 -- Built at 2011/08/10 09:20' --enable-__cxa_atexit --disable-libmudflap --disable-libgomp --disable-libssp --with-gmp=/work/build/.build/arm-fsl-linux-gnueabi/build/static --with-mpfr=/work/build/.build/arm-fsl-linux-gnueabi/build/static --with-mpc=/work/build/.build/arm-fsl-linux-gnueabi/build/static --with-ppl=/work/build/.build/arm-fsl-linux-gnueabi/build/static --with-cloog=/work/build/.build/arm-fsl-linux-gnueabi/build/static --with-libelf=/work/build/.build/arm-fsl-linux-gnueabi/build/static --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm -L/work/build/.build/arm-fsl-linux-gnueabi/build/static/lib -lpwl' --enable-threads=posix --enable-target-optspace --enable-plugin --enable-multilib --with-local-prefix=/work/fsl-linaro-toolchain-2.13/arm-fsl-linux-gnueabi/multi-libs --disable-nls --enable-c99 --enable-long-long --with-system-zlib
Thread model: posix
gcc version 4.6.2 20110630 (prerelease) (Freescale MAD -- Linaro 2011.07 -- Built at 2011/08/10 09:20)
xQ交叉编译环境搭建完?br />
2、ubuntu上编译lighttpd
我的lighttpd版本?.4.18Q可以自己去lighttpd官网上下载?br />
1)配置configure命o
首先q入lighttpd安装文g夹下
cd /home/acer/lighttpd/lighttpd1.4.18
./configure --prefix=/lighttpd --host=arm-linux --build=i486-linux-gnu --disable-FEATURE -disable-ipv6 -diable-lfs
2)~译
make
3)构徏
创徏/lighttpd文g夹(同configure中的prefix跟的路径Q,然后授权,最后在lighttpd的安装文件夹下构?br />sudo mkdir /lighttpd
sudo chmod 777 /lighttpd
cd /home/acer/lighttpd/lighttpd1.4.18
make install
上述三步q行完之后,?lighttpd下会生成lib、bin、sbin、share四个文g夹,q就是要拯到开发板上的文g?br />
3、开发板Q创建目录,同时拯文g到开发板Q?br />1Q创建根目录/lighttpdQ同~译时configure命o中的prefix后跟的\径)Q授予权?br />mkdir /lighttpd
chmod 777 /lighttpd
然后ubuntu?lighttpd中的四个文g夹lib、bin、sbin、share拯到开发板?lighttpd下,具体什么方式,自己定吧Q我们用tftp考的的,在此不冗q?br />
2Q创建web根目?htdocs
mkdir /htdocs
chmod 777 /htdocs
3Q创建日志保存目?var/log/lighttpd
mkdir /var/log/lighttpd
chmod 777 /var/log/lighttpd
4、配|ƈ拯配置文g到开发板
在ubuntu的lighttpd安装文g中,扑ֈlighttpd.config文g
cd /home/acer/lighttpd/lighttpd1.4.18/doc
打开lighttpd.config,作如下修改:
server.document-root = "/htdocs/"
server.errorlog = "/var/log/lighttpd/error.log"
然后注释掉:
#$HTTP["url"] =~ "\.pdf$" {
# server.range-requests = "disable"
#}
保存后,lighttpd.config拯到开发板?etc/目录下,xQ已l配|完?br />
5、启动lighttpd
在开发板上运行:
/lighttpd/sbin/lighttpd -f /etc/lighttpd.conf
然后一?html文g攑ֈ/htdocs文g夹下Q访问web服务器试下吧Q?br />
参考文Ӟ
http://www.linuxidc.com/Linux/2011-09/43619.htm
http://www.linuxidc.com/Linux/2013-06/85902.htm
http://blog.163.com/ljf_gzhu/blog/static/131553440201211522317367/
]]>
]]>
PHP代码Q?br />
2 <?php
3 $id = msg_get_queue ( 1 );
4 if (!msg_send ($id, 317, "sdsadsdsds", false, true, $msg_err))
5 {
6
7 echo "faile!";
8 return "Msg not sent because $msg_err\n";
9 }else{
10 echo "success!";
11 }
12
13 ?>
C代码Q?br />
2 #include <stdlib.h>
3 #include <fcntl.h>
4 #include <string.h>
5 #include <unistd.h>
6 #include <sys/types.h>
7 #include <sys/ipc.h>
8 #include <sys/msg.h>
9 #define MAX_TEXT 512
10 #define BUFSIZE BUFSIZ
11
12 struct msg_st {
13 long mtype;
14 char mtext[1];
15 };
16
17 void logst(struct msg_st some_data);
18
19 int main(int argc,char **argv)
20 {
21 while(1){
22
23 int msgid1;
24 struct msg_st some_data1;
25 int msg_to_recevie = 0;
26 if((msgid1= msgget((key_t)1,0666|IPC_CREAT)) == -1)
27 {
28 perror("msgget");
29 exit(EXIT_FAILURE);
30 }
31 if(msgrcv(msgid1,(void *) &some_data1, BUFSIZ, msg_to_recevie , 0) == -1)
32 {
33 perror("msgrcv");
34 exit(EXIT_FAILURE);
35 }
36 printf("recevier mssage : %s, type= %d;\n", some_data1.mtext, some_data1.mtype);
37 //printf("%s, %d\n", msg_text, strlen(msg_text));
38
39 if(msgctl(msgid1,IPC_RMID,0) == -1)
40 {
41 fprintf(stderr,"msgctl(IPC_RMID) failed \n");
42 exit(EXIT_FAILURE);
43 }
44 //break;
45 sleep(1);
46 }
47
48 }
参考链接:
http://blog.csdn.net/leinchu/article/details/8132530
http://blog.csdn.net/guoping16/article/details/6584024
]]>q入pȝQ直接安装:
sudo apt-get install lighttpd
安装完,查看lighttpd目录Q?br />a***@a***:/usr/bin$ whereis lighttpd
lighttpd: /usr/sbin/lighttpd /etc/lighttpd /usr/lib/lighttpd /usr/share/lighttpd /usr/share/man/man8/lighttpd.8.gz
认lighttpd状态:
a****@a***:/usr/bin$ sudo /etc/init.d/lighttpd status
* lighttpd is running
2、安装php
sudo apt-get install php5-cgi
安装完,查看php目录Q?br />a***@a***:/usr/bin$ whereis php5
php5: /etc/php5 /usr/lib/php5 /usr/share/php5
a***@a***:/usr/bin$ whereis php5-cgi
php5-cgi: /usr/bin/php5-cgi /usr/share/man/man1/php5-cgi.1.gz
安装完,查看php版本Q?br />a***@a***:/usr/bin$ /usr/bin/php5-cgi -v
PHP 5.3.2-1ubuntu4.28 with Suhosin-Patch (cgi-fcgi) (built: Oct 29 2014 11:54:36)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
3、配|lighttpd支持phpQ?br />/etc/lighttpd/lighttpd.conf是lighttpd的主要配|文Ӟ需要将文g做如下两步修改:
1Q?增加"mod_fastcgi", "mod_cgi"两项
修改前:
server.modules = ( "mod_access",
修改后:
"mod_alias",
"mod_accesslog",
"mod_compress",
)
server.modules = (
"mod_access",
"mod_fastcgi",
"mod_cgi",
"mod_alias",
"mod_accesslog",
"mod_compress",
)
2Q在文g֢加:
fastcgi.server = ( ".php" =>
( "localhost" =>
(
"socket" => "/tmp/php.socket",
"bin-path" => "/usr/bin/php5-cgi"
)
)
)
4、重启lighttpd服务器:
a***@a***:/usr/bin$ sudo /etc/init.d/lighttpd restart
[sudo] password for a***:
Syntax OK
* Stopping web server lighttpd [ OK ]
Syntax OK
* Starting web server lighttpd [ OK ]
q下在var/www/下新增一个php文g可以读出来了?br />
参考文:
http://blog.chinaunix.net/uid-20761674-id-276003.html
http://blog.csdn.net/l0605020112/article/details/10104233
http://www.linuxidc.com/Linux/2011-12/48808.htm
http://zhidao.baidu.com/link?url=Wy8_Mx_bduKs3F7_kBKYiQ7m0s_-zCPSQFvglZL3xJMsva9oVX8XKm7yWjoHGyLVl2lrMgKhpX-ukmiKG4hT5K
]]>
<FORM>标记的NAME属?br />
基本语法
01 <Form name="FormQname">
02 ……
03 </Form>
语法解释
通过单命名可以控制表单与后台E序之间的关pR?/p>
文g范例Q?1-1.htm
在页面中插入表单?br />
01 <!-- ------------------------------ -->
02 <!-- 文g范例Q?1-1.htm -->
03 <!-- 文g说明Q插入表?-->
04 <!-- ------------------------------ -->
05 <html>
06 <head>
07 <title>插入表单</title>
08 </head>
09 <body>
10 <h1>用户调查</h1>
11 <Form name=invest>
12 </Form>
13 </body>
14 </html>
文g说明
W?1行是表单标记Q表单的名称?invest"?
文g范例Q?1-2.htm
讄表单的提交地址?br />
01 <!-- ------------------------------ -->
02 <!-- 文g范例Q?1-2.htm -->
03 <!-- 文g说明Q设|表单提交地址 -->
04 <!-- ------------------------------ -->
05 <html>
06 <head>
07 <title>讄表单提交地址</title>
08 </head>
09 <body>
10 <h1>用户调查</h1>
11 <Form name=invest action=mailto:tslxg@hotmail.com>
12 </Form>
13 </body>
14 </html>
文g说明
W?1行是表单标记Q表单的名称为investQ将表单内容以电子邮件的方式传送?/p>
如下代码Q就是以get方式提交?a href="mailto:tslxg@hotmail.com">tslxg@hotmail.com邮g地址的表单写法:
01 <Form name="guestbook" method="get" action="mailto:tslxg@hotmail.com">
02 ……
03 </Form>
文g范例Q?1-3.htm
讄表单的提交方式?br />
01 <!-- ------------------------------ -->
02 <!-- 文g范例Q?1-3.htm -->
03 <!-- 文g说明Q设|表单提交方?-->
04 <!-- ------------------------------ -->
05 <html>
06 <head>
07 <title>讄表单提交方式</title>
08 </head>
09 <body>
10 <h1>用户调查</h1>
11 <Form name=invest action=mailto:tslxg@hotmail.com method=get>
12 </Form>
13 </body>
14 </html>
文g说明
W?1行是表单标记Q表单的名称为investQ将表单的内容以电子邮g的方式传送,q用get传输方式?
属性?描述
Text/plin 以纯文本形式传送信?
Application/x-www-Form-urlencoded 默认的编码Ş?
Multipart/Form-data 使用mine~码
文g范例:11-4.htm
讄表单信息提交的编码方式?br />
01 <!-- ------------------------------ -->
02 <!-- 文g范例Q?1-4.htm -->
03 <!--文g说明Q设|信息提交的~码方式-->
04 <!-- ------------------------------ -->
05 <html>
06 <head>
07 <title>讄信息提交的编码方?lt;/title>
08 </head>
09 <body>
10 <h1>用户调查</h1>
11 <Form name=invest action=mailto:tslxg@hotmail.com method=get enctype=text/plain>
12 </Form>
13 </body>
14 </html>
文g说明
W?1行是表单标记Q表单的名称为investQ将表单内容以电子邮件的方式传送,q用get传输方式Q以U文本的形式传送消息?/p>
文g范例:11-5.htm
讄表单信息q回的窗口?br />
01 <!-- ------------------------------ -->
02 <!-- 文g范例Q?1-5.htm -->
03 <!-- 文g说明Q设|信息返回的H口 -->
04 <!-- ------------------------------ -->
05 <html>
06 <head>
07 <title>讄信息q回的窗?lt;/title>
08 </head>
09 <body>
10 <h1>用户调查</h1>
11 <Form name=invest mailto:tslxg@hotmail.com method=get enctype=text/plain target=_blank>
12 </Form>
13 </body>
14 </html>
文g说明
W?1行是表单标记Q表单的名称为investQ将表单内容以电子邮件的方式传送,q用get传输方式Q以U文本Ş式传送信息,如果有信息返回时Q将以新开览器窗口的形式昄信息?br />
?lt;Form>标记中,可以包含4个标讎ͼ如下表所C?br />
标记 描述
<input> 表单输入标记
<select> 菜单和列表标?
<option> 菜单和列表项目标?
<textarea> 文字域标?/p>
如下代码
01 <Form>
02 <input>……</input>
03 <textaarea>……</textarea>
04 <select>
05 <option>……</option>
06 </select>
07 </Form>
各种表单域基本可以满网站收集信息的要求。如果要求浏览者输入文字信息,如姓名、留a{,可以使用文本字段。如果要求浏览者在固定的范围内q行?
择,可以选择单选按U或者多选按U,在实际应用中性别、籍贯、爱好常帔R用这U方法。有时还会让览者提交文件的要求Q可以用文件域Q例如某游戏选拔?
Mh公原型,要求甌者提交照片等?/p>