首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>网络管理>网络管理>正文

Linux串口上网的简单实现

http://www.oklinux.cn  2006-11-27  来源: IBM DW中国   会员收藏  游客收藏  【 】 
    本文主要说明某些简易 Linux 环境或者嵌入式 Linux 中实现串口上网的简单实现,这在工业控制中有着广泛的应用。希望对实现无网卡设备上网的方法有抛砖引玉的作用。

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

Linux简单串口上网原理

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


图 1

    Linux Box A 和 Linux Box B 是两个安装有Linux操作系统的终端(可以是PC,也可以是嵌入式设备),它们通过一条串口通信线(null modem cable line)连接。控制串口通信的服务进程server读和写两个字符设备:发送字符设备sending device和接收字符设备receiving device。在内核空间,伪网络设备驱动程序pseudo network driver可以直接读写发送字符设备和接收字符设备,事实上在内核空间它们之间的通信只是对共享缓存区的读写而已。伪网络设备驱动程序具有大部分普通网卡驱动程序提供服务功能,只是没有硬件部分代码的实现而已。当用户空间的进程要发送数据的时候,其首先让数据经过Linux操作系统的TCP/IP处理层进行数据打包,然后把打包后的数据直接写入sending device,等待server进程读取,最后通过串口发送到另一个Linux Box的server进程;而当server进程发现有数据从串口传送过来时就把数据写入receiving device,伪网络驱动程序发现receiving device设备有新数据的时候,就又把数据传递到TCP/IP层处理,最终网络应用程序收到对方发来的数据。本文设计的源程序主要有三个, ed_device.c、ed_device.h、server.c。其中在ed_device.c是串口上网的内核部分的主程序,包含字符设备和伪网络接口设备程序,server.c负责串口通信。主文件ed_device.c中包括的头文件在源程序中,这里就不一一列举了。

Linux串口上网设备加载和注销形式

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

    初始化内核模块入口函数init_module()中包括对字符设备的初始化入口 函数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所示。


图 2

    当我们需要加载模块的时候,我们只需要使用insmod命令,如果需要卸载模块,我们使用rmmod命令。比如加载ed_device模块,并且配置伪网络接口IP地址为192.168.5.1


[root@localhost test]insmod ed_device.o,
[root@localhost test]ifconfig ed0 192.168.5.1 up

    这时可以在/proc/net/dev 文件中看到有ed0伪网络设备了。如果需要卸载ed_device模块,应先停止其网络数据发送和接收工作,然后卸载模块:


[root@localhost test]ifconfig ed0 down
[root@localhost test]rmmod ed_device

    如果我们设置另一台Linux box的伪网接口地址是192.168.5.2那么,我们可以用串口线直接连接两台终端并使用网络应用程序了,在两台终端上运行server守护程序,然后执行telnet:


[root@localhost test]# telnet 192.168.5.2
Trying 192.168.5.2...
Connected to 192.168.5.2 (192.168.5.2).
Escape character is '^]'.
Red Hat Linux release 9 (Shrike)
Kernel 2.4.20-8 on an i686
login:

 

共8页: 上一页 1 [2] [3] [4] [5] [6] [7] [8] 下一页

上一篇:Linux操作系统下的离线浏览器介绍   下一篇:走进Linux世界,纯正的网络操作系统


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·走进Linux世界,纯正的网络操作系统
·用 DCOP 连接 KDE 应用程序
·Linux操作系统下的离线浏览器介绍
·RedHat9.0下的DNS和虚拟主机的配置
·运行在网络处理器上的嵌入式Linux系统
·嵌入式Linux在工业控制领域中的应用
·嵌入式Linux平台的多协议路由器的设计
·如何用cdma 1x手机连接Linux电脑上网
·网络管理-安装CVS Server和Web CVS
·实现Windows与Unix、Linux间数据交换
·为两个网段安装DHCP服务器
·使用Linux脚本对无线网络进行管理
·Linux下的网络HOOK实现以及使用方法
·Zebra使用手册
·网络OS 认识Linux远程桌面控制
·Linux系统如何让双网卡合“一”而用
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·RedHat Enterprise Linux基本网络配置
·在Linux系统下一个网卡设置多个IP的方
·Linux操作系统下安装配置jython编程环
·Linux下更改网卡的物理地址Mac Address
·详细讲解Linux系统下有关网络设置的问
·Linux操作系统下DHCP简单设置
·Linux操作系统下安装ProFTPD
·建立Linux操作系统两用户之间的信任关
·Linux系统下实现网卡冗余
·Windows系统下用Xmanager远程登陆Linux
·Linux系统下基本网络参数DNS的设置
·Linux系统下DHCP的安装方法详细介绍
  阅读排行
·用 DCOP 连接 KDE 应用程序
·Linux下的网络HOOK实现以及使用方法
·使用Linux脚本对无线网络进行管理
·RedHat9.0下的DNS和虚拟主机的配置
·实现Windows与Unix、Linux间数据交换
·Linux系统如何让双网卡合“一”而用
·网络OS 认识Linux远程桌面控制
·嵌入式Linux在工业控制领域中的应用
·运行在网络处理器上的嵌入式Linux系统
·手把手教你建WAMP动态wiki网站(图)
·Linux安全攻略 全面了解系统备份
·Linux下超级终端Minicom的使用方法
·Linux 网络栈剖析
·探查Linux系统DNS服务器运行状况的方法
·介绍一些关于RAID与SCSI的基本概念
网摘收藏: