Linux串口上网的简单实现

Linux串口上网的简单实现

ID:40557740

大小:143.00 KB

页数:18页

时间:2019-08-04

Linux串口上网的简单实现_第1页
Linux串口上网的简单实现_第2页
Linux串口上网的简单实现_第3页
Linux串口上网的简单实现_第4页
Linux串口上网的简单实现_第5页
资源描述:

《Linux串口上网的简单实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux串口上网的简单实现(转)上2007-08-0911:07Linux为串口上网提供了丰富的支持,比如PPP(Peer-to-PeerProtocol,端对端协议)和SLIP(SerialLineInterfaceProtocol,非常老的串行线路接口协议),这里所说的"上网"是指把串口当成一个网络接口,通过封装网络数据包(如IP包)以达到无网卡的终端可以通过串口进行网络通信。但是使用这两种协议必须得到内核的支持。例如,如果在没有配置PPP的Linux环境中使用PPP,除了安装PPP应用层软件外,还必须重新编译内核。SLIP是一个比较老的简单的协议,现在的Linux内核

2、缺省配置都支持,不需要重新编译内核,尽管如此,其源代码看上去有点"古怪而复杂"。在嵌入式Linux系统使用过程中,如果内核已经被烧入Flash中,而为了节省空间内核又没有提供诸如PPP或者SLIP的支持,当然就没有办法在不重新烧写Flash的情况下直接使用PPP或者SLIP了,事实上用户必须动态加载PPP和SLIP的内核实现模块。对某些嵌入式应用来说移植或者修改PPP源代码变成了乏味和繁锁的工作。这里介绍一种非常经济而且实用的实现串口上网的简单方法。Linux简单串口上网原理简单串口上网的实现原理如图1所示。图1LinuxBoxA和LinuxBoxB是两个安装有Linux操作

3、系统的终端(可以是PC,也可以是嵌入式设备),它们通过一条串口通信线(nullmodemcableline)连接。控制串口通信的服务进程server读和写两个字符设备:发送字符设备sendingdevice和接收字符设备receivingdevice。在内核空间,伪网络设备驱动程序pseudonetworkdriver可以直接读写发送字符设备和接收字符设备,事实上在内核空间它们之间的通信只是对共享缓存区的读写而已。伪网络设备驱动程序具有大部分普通网卡驱动程序提供服务功能,只是没有硬件部分代码的实现而已。当用户空间的进程要发送数据的时候,其首先让数据经过Linux操作系统的TC

4、P/IP处理层进行数据打包,然后把打包后的数据直接写入sendingdevice,等待server进程读取,最后通过串口发送到另一个LinuxBox的server进程;而当server进程发现有数据从串口传送过来时就把数据写入receivingdevice,伪网络驱动程序发现receivingdevice设备有新数据的时候,就又把数据传递到TCP/IP层处理,最终网络应用程序收到对方发来的数据。本文设计的源程序主要有三个,ed_device.c、ed_device.h、server.c。其中在ed_device.c是串口上网的内核部分的主程序,包含字符设备和伪网络接口设备程序

5、,server.c负责串口通信。主文件ed_device.c中包括的头文件在源程序中,这里就不一一列举了。回页首Linux串口上网设备加载和注销形式Linux串口上网程序的整个内核部分是以LKM(LoadableKernelModule)形式实现的。LKM加载的时候完成伪网络设备、发送字符设备、接收字符设备的初始化和注册。注册的目的是让操作系统可以识别用户进程所要操作的设备,并完成在其上的操作(比如read,write等系统调用)。Linux加载模块,实际上就是模块链表的插入;删除模块象是模块链表成员的删除。初始化内核模块入口函数init_module()中包括对字符设备的初

6、始化入口函数eddev_module_init()和伪网络设备初始化入口函数ednet_module_init()。在内核需要卸载的时候,必须进行资源释放以及设备注销,cleanup_module()完成这个任务。函数cleanup_module()中用eddev_module_cleanup()来释放字符设备占用的资源(比如分配的缓存区等);有ednet_module_cleanup()来释放伪网络设备占用的资源。本文的内核部分模块程序编译后就是ed_device.o,加载后使用lsmod命令查看,模块名就是ed_device。模块ed_device的加载和注销函数如图2所

7、示。图2当我们需要加载模块的时候,我们只需要使用insmod命令,如果需要卸载模块,我们使用rmmod命令。比如加载ed_device模块,并且配置伪网络接口IP地址为192.168.5.1[root@localhosttest]insmoded_device.o,[root@localhosttest]ifconfiged0192.168.5.1up这时可以在/proc/net/dev文件中看到有ed0伪网络设备了。如果需要卸载ed_device模块,应先停止其网络数据发送和接收工作,然后卸载模块:[

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。