您的位置 首页 五金配件

linux串口

linux串口 Linux为串口上网提供了丰¤富的支持,比如㎜PPP(Peer-to-Peer? Pro¥to…

linux串口

Linux串口上网提供了丰¤富的支持,比如㎜PPP(Peer-to-Peer? Pro¥tocol, 端对端+协·议)和SLIP(Serial Line Inter㎡fac?e Protocol, 非常老?的?串行线路接口协议)。

本文引用地址:http∷://www.eepw.com.cn/arti∶cle/150775.htm

这里所说的上网是℉指把串口?当?成一个∵网络?接口,通过封装网络数据包(如=IP?包)以达到∣无?网卡的终端可以?通过串口进行网络通信=。但?是使用这两种协议必须得到内核的支持。例如,如果在没有配置PPP的Linux?㏄环境中使用PPP,♂除了安装P?PP应用层软件外,还必须重新编译内核。SLIP是一个?比较老的简单的协议,现在的?Linux2内核缺省配置都支持,不需要重新编译内核∏,尽管如?此,其源代码看上去有点古怪而?复杂。在>嵌入式Li㎏nux系统使用过程中,如?果÷内核已经被烧入Flash中,而为了节省空间内核又没有提供?诸如P℅PP或者SLIP的?支持,当然就没有办法在不重新烧写Fl∑ash的≮情况下直接使用PPP或者SLIP了,事实㏑上用户必须动态加载PPP和SLIP的?内o核实现模块。对某些嵌入式应用来说移植或m者修改PPP源代码变成了乏味∞和繁锁×的工作。这里∴介≠绍一种非常经济?而且实用的实现串口上网的?简单方法

linux串口 ﹤L<i?n?u?x简?单串口上网原﹣理

简单串口?上网的实现原理如㈱图1所示。

图 ?1

⊕Linux Box A 和 Linux Box B 是两个安装有Linu?x操≯作系%统的终端(可∮以是PC,也可以是嵌入式设备),它们通过一条串口通信线(nu≈l㎞l modem c?able line)?连接$。1控制串口?通信的服务进程server读和写两个字符⊿设备:发送字∧符设备sending device和接收字符设备re?ceivin?g dev?ice。

在内核空间,伪?网络设备驱动程序pseudo ne∩twork driver可以直㏕接读写?发送字符设备和接收字符设?备,事实上在内核空间它们之间的通信?只是?对共享缓存区的?读写而已。伪网络设备驱动程序具有大℡部分普通网卡驱动程序提供服?务功 ?能?,只是没有硬件部分代码的实现而已。?当用户空间的进程要发送数据的时候,其首先让数据∝经过Linux操⊙作系*统的TCP/IP处理层进行数据打包,然后把打?包-后的数据直接写入sending de〒vic?e,≌等待server进⌒程读取,最后通过№串口发?送到另一?个Linux ?Box的se?rver进程≒;而当serv⊥er进㎎程发现有数据从串口传送过来时就把数据写入receiving device,?伪网络驱动程序发现?rec?eiving‖ de﹥vice?设备有新数据的√时候,就又把数据传?递到TCP¬/IP层处理,最终≧网络应?用程序收到对方发来的数据。本文设计的3源程序主要有三个,ed_device?.c、ed_devi?ce.h、s?erver≤.c。其中在ed_device.c是串口上网的内核部分?的主程序,包含字符设备和伪网络接≦口设备程序,server.c负责串口通信×。主文件ed_device.c中?包括的头文件在源程序中,这里就不?一一列?举了。

‰ Li±nux串口上网设备加载和注销形式

?

Linux串口上网程序的整?个内核部分是3以LKM(Loadable@ Kernel Modu?le)形式实现的。LKM加载的时候完成伪网络设备、发送字符设备?、接收字符设备?的?初始化和注ml册。注册的目的是让操作系统可以识别用户进程所要操作/的m设备,并完成在其上的操作(比如read,writ?e等系统调用)。Linux加载?模″∠块,实际上就是模块㎝链表的插入′;?删除模?块象是模块?链表成﹣员的删除。

初始化内核模块入口函数init_module()中包括对字符设备的初∥始化入口 函数eddev_module_init()和伪网络设备初始化入口函数ednet_module_init()。

在内核需?要卸载的时候,必?须进¥行资?源释放以及设备注销﹢,? cl?eanup_module()完成这个任务。函数cleanup_module()中用eddev_module_?cleanup()来释放字符设备占用的资源(比如分配?的缓存区等);有ednet_module_cleanup()来释放伪网※络设备?占用的资源。mol本文的内核部分模块程序编译后就?是ed_device.o,加载后使用lsmod命令查?看,模块名就是ed_device。模∟块ed_d?eviμce的加载和注销函数如图2?所∽示??。

图? 2

?

当我们需要加载模块的时候,我们只需要使用insmod命令,如果?需要∨卸∷载模块,我们使用rmmod命令。比如加载ed_dev?ice模块,§并且配置伪网络接%口IP地址为192.﹢168≡.5.?1

[root@localhost ?test]insm*od ed_device.o,

?[root@loca?lhost ?test]ifconfig ed0 192.168.5.1 up

这时可以在/proc?/net/dev 文件£中看㏒到有e≥d0伪网络设备了。如果需要卸♀载◎e?d_device模块,应先停止其?网络?数据发送和接收工℃作,然后卸载模块:

[root@localho∪st test∫]ifconf?ig ed0 do?wn

[root@?l°ocalhost test]rmmod∈ ed_d?evic?e

关于更多linux串口内容,可以收藏本网页。2013欧冠决赛时间 Linux串口上网的程序实现方法

linux串口linux串口
本文来自网络,不代表天津五金网立场,转载请注明出处:http://www.mgnqyz.com/mgnqyz/1200.html

作者: mgnqyz

联系我们

联系我们

0898-88881688

在线咨询: QQ交谈

邮箱: email@wangzhan.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部