2016-10-26 16:43:31 shuilaner_ 阅读数 1653
  • 嵌入式Linux文件与串口编程

    本课程介绍Linux环境下shell编程,普通文件与设备文件的编程方法,串口介绍与应用编程。 学习条件: 1.C语言编程基础 2.嵌入式Linux开发基础

    7273 人正在学习 去看看 沈寒
  以ARM920T 为内核的S3C2440A 作为主控制器和以太网控制芯片DM9000AEP 设计硬件平台; 构建并移植适合嵌入式串口服务器系统的嵌入式Linux 操作系统,利用Linux 完善的TCP/IP 协议设计ARM 端的多线程网络服务器程序。设计实现RS-232C 串口与以太网口数据的双向传输,使现有的智能仪器设备成功接入以太网。

  随着计算机网络的发展和物联网的兴起,将智能仪器接入网络已成为一种趋势,以实现数据的共享与远程管理。但是目前大多智能仪器使用的是异步串行通信接口RS-232C /485 /422,因此迫切需要一种能将异步串行通信协议转换为以太网TCP /IP 协议的协议转换器,使现有的串行通信设备方便地接入以太网,而不需要改变原有仪器设备的硬件。为此,笔者研究设计了基于ARM9微处理器和Linux 操作系统的嵌入式多串口服务器

  1 系统总体思路

  采用以ARM920T 为内核的S3C2440A 微处理器运行Linux 操作系统,使用100MBase-T 网络在串行设备与远端主机之间有效地进行传输数据,这样通过串口服务器使串行设备快速接入以太网,利用以太网的TCP /IP 协议进行串口数据包的传输。嵌入式串口服务器作为以太网数据与串口数据之间交互的中间桥梁,负责数据的双向透明传送。服务器端的主要任务是在ARM 处理器中实现RS-232C /485 /422 转TCP /IP 协议网关,完成对各端口的监听和数据的双向传输,当端口有数据产生或客户端有数据请求时启动独立线程,保证实时而又不丢失地进行数据传输。基于上述要求系统必须具备: 一套对网络支持良好的嵌入式操作系统,并且可根据专用的硬件平台进行裁剪; 微处理器的运行速度与处理数据的能力优秀,外围芯片接口友好。

  笔者选用Linux 作为实时操作系统,并进行移植与配置使其可以运行在以ARM9 为核心的硬件平台上。S3C2440A 自带三路串行通信口,完全能够满足多串口服务器的设计要求,但考虑到网络数据传输与串口数据传输速率不匹配,需要在硬件板卡上扩展SDRAM 和NORFLASH,另外系统还需扩展以太网控制器芯片。系统的总体设计框架如图1 所示。

  2 硬件电路

  系统可同时独立地与两路串行端口通信,当数据由以太网传送给串口服务器时完成数据的存储与数据格式的转换与处理,为数据传向指定的串行口做准备。当系统解包处理完成后,根据TCP /IP 协议的数据帧的帧头信息就能获得该数据包的发送目标串口,这样就完成了从以太网到串行口数据的传输; 当数据由串口设备传送到串口服务器时完成数据的分析、处理与格式转换,为数据传向以太网口做准备,当数据打包结束后将其从以太网口发送出去,这样就完成了串行口到以太网数据的传输。

  2.1 S3C2440A 扩展以太网模块电路

  DM9000AEP 是一款高集成度且成本较低的单片快速以太网媒体介质访问层MAC 控制器,上有通用处理器接口,10M/100M 物理层和16KbyteSRAM,低功耗、高性能IO 管脚兼容3. 3 /5. 0V 电压。DM9000AEP 合成了以太网MAC、物理层PHY 和MMU,内置AUTOMDI2X 功能10 /100MPHY,芯片可以根据处理器提供8 /16 /32bit 3 种连接方式实现以太网MAC 层和PHY 层) 的功能。

  在如图2 所示的电路中, IOR#管脚接处理器的LnOE 读信号端, IOW#接处理器的LnWE 写信号端,CS#片选信号端接处理器的nGCS4 片选信号,SD0 ~ SD15 分别接处理器的数据总线,中断信号INT 接处理器的EINT18 管脚,RX +、RX -、TX + 和TX – 分别是两对差分收发信号线接带有隔离变压器的HR911105A 的RJ45 座连接,如图3 所示。访问网卡以总线形式实现,网卡的IO 基址为300H,片选信号接在了NGCS4 上,所以网卡IO 的基址为0x20000300H.由“DM9000 地址端口= 高位片选地址+ 300H + 0; DM9000 数据端口= 高位片选地址+ 300H + 4”可知,DM9000 端口的端口地址为0×20000300,DM9000 数据的端口地址为0×20000304.S3C2440 通过数据端口与地址端口并结合读/写信号线就可以对DM9000 进行读、写操作了。图2 中只用了一根地址线LADDR2,这是由DM9000AEP 的特性决定的,DM9000AEP 的地址信号和数据信号复用,使用CMD 引脚来区分它们( CMD 为低时数据总线上传输的是地址信号,CMD 为高电平时传输的是数据信号) .访问DM9000AEP 内部寄存器时,需要将CMD 置为低电平,发出地址信号; 然后将CMD置为高电平,读/写数据。另外,总数位宽16 位,两对差分接收与发送信号线,特别要注意的是:

  在PCB 布线时这两对线必须走差分线,否则接收和发送数据将不稳定,模拟地与数字地也要处理好。

图2 网卡接口电路



  2.2 S3C2440 串口模块电路

  S3C2440 本身自带三路独立的UART 接口,在设计嵌入式串口服务器系统时,应用了S3C2440 串口模块的两路UART 接口,另外一路UART 接口做开发时的打印控制台用。这两路串行口用三线通信,采用MAX3232 作为电平转换芯片,分别配置处理器的GPH2、CPH3、CPH4 和CPG5,4 个GPIO 口为TXD0、RXD0、TXD1 和RXD1 串口收发信号线。RS-232C 接口电路如图4 所示。

  3 系统软件

  系统软件的设计目标: 嵌入式串口服务器能够接收来自以太网的数据流,将以太网数据流转换为串行口数据流发送给指定串口; 实现串口数据流到以太网数据流的逆过程。软件平台采用拥有完备TCP /IP 协议栈和丰富源码资源的Linux作为串口服务器的操作系统,在ARM9 上移植并裁剪Linux 系统,同时移植完善根文件系统,为应用层软件开发提供平台。应用程序软件的主要任务如图5 所示,通过Linux 系统调用接口、调用串口函数读取数据,并将数据通过socket 接口发往以太网口; 接收socket 端数据、调用串口设备函数,将数据发往指定串口。

  3.1 在Linux 系统中对串口的操作

  UART 的操作主要有: 数据发送、数据接收、产生中断、设置波特率、loopback 模式、红外模式和硬/软流控模式7 部分。在Linux 中,所有设备文件一般都位于“/dev”下,其中串口对应的设备为“/dev /ttySx”,在Linux 下对设备的操作方法与对文件的操作方法一样。下面就是设计中串口应用的开发步骤。

  串口设置主要设置struct termios 结构体成员,具体的串口操作函数此处略去,串口操作流程如图6 所示。

  3.2 Linux 网络套接字编程步骤

  在Linux 中的网络编程通过socket 接口进行。socket 是一种特殊的IO 接口,也是一种文件描述符,它是一种常用的进程之间的通信机制,通过它不仅能实现本地机器上进程间的通信,而且通过网络能够在不同机器上的进程间进行通信。

  嵌入式串口服务器系统网络套接字编程步骤如图7 所示。

  系统上电后,嵌入式服务器进入Linux 系统并自动运行装载在其内的server 程序。作为服务器, server 程序在开始运行时就为每一个打开的串口创建recvpcwritearm和readarmsendpc 线程,并在网络连接正常以及客户端没有执行关闭串口的操作时,每一个已打开串口对应的两个线程将不会结束,这样在系统满负荷运行时,系统将同时开启4 个线程。嵌入式串口服务器主程序流程如图8 所示,主函数实现套接字的初始化工作,建立两路监听套接字,分别初始化线程recvpcwritearmsocket[3000 + com]套接字和readarmsendpc socket[4000 + com]套接字com 为串行端口号。一旦接收到客户端的连接请求,判断客户端请求的方式后,启用相应的进程函数进行数据处理。

  4 试验

  4.1 数据上行测试

  数据上行测试指串口设备发送信息到嵌入式串口服务器,通过嵌入式串口服务器将数据从以太网口传输出去。考虑实际使用过程中上行数据量较大,为了模拟工业现场接收大量的数据,以“1234567890abcdefghijklmnopqrstuvwsyz”构成的数据包进行模拟。

  测试方法为每秒钟连续不断地发送“1234567890abcdefghijklmnopqrstuvwsyz”,使之构成100KByte 的数据包,观察客户端程序能否正常收到这个数据包。试验测试结果如图9 所示,当从“终端串口设备”向上位机发送100KByte 数据时,在客户端一侧正常收到了这些数据,并且没有丢失现象。

  4.2 数据下行测试

  数据下行测试指通过工控机上的以太网口发送数据给串口服务器,串口服务器接收以太网数据帧并进行格式转换,同时判断发往指定的串口设备。在实际使用过程中,上位机发送到串行终端设备的数据量较小,这些数据一般都是由操作人员输入的数据,因此可以用单个数据流“1234567890abcDefghijklmnopqrstuvwxyz”进行测试。

  测试方法是利用运行在PC 机上的客户端程序每秒钟发送连续数据流,观察另一台PC 机上串口调试助手是否正常接收到数据。试验测试结果如图10 所示,当客户端程序发送数据时,在终端串口设备上得到同样的数据流。

  5 结束语

  笔者利用完全开源的Linux 操作系统,将其移植、裁剪后设计嵌入式串口服务器系统,选用非常适用于通信产品中的ARM9 内核的S3C2440A 微处理器和DM9000AEP 芯片扩展了100MByte 自适应以太网口,完成了硬件平台设计; 然后用多线程网络套接字编写串口服务器程序,完成多串口服务器的软件设计。最后用试验证实了多串口服务器能够很好地完成串口数据与以太网口数据的双向传输,成功地将现有的串行通信设备接入以太网,利用网络实现数据的远程传输与远程监控功能,实时监控设备的运行状态。降低了设备的维修费用,缩短了开发周期。该产品基于开放标准设计,易于升级与维护,具有广阔的应用前景。


转:http://www.eeworld.com.cn/mcu/article_2016102130702.html

2011-06-14 09:35:00 fm0517 阅读数 1995
  • 嵌入式Linux文件与串口编程

    本课程介绍Linux环境下shell编程,普通文件与设备文件的编程方法,串口介绍与应用编程。 学习条件: 1.C语言编程基础 2.嵌入式Linux开发基础

    7273 人正在学习 去看看 沈寒

1.在HP的Boot Menu里面将Boot Configuration->Console Configuration->VGA设为P(primary),其他的(例如Serial串口)设为S(Secondary),否则输出会打到串口,显示器上永远是“Umcompressing Linux ...done,Loading file initrd ...done”这两句话。

2.在“服务器方案”或“服务器基础方案”那一步会自动跳过,那里有三项候选项(物理机、虚拟机、Xen虚拟主机),估计选的是默认选项“物理机”。

3.在分区时,不能删除其原来的FAT分区,否则当提交分区方案时,会提示:“未在/boot/efi上装入FAT分区,可能导致引导错误”之类的警告。昨天为这个警告郁闷了好久,后来终于想到在保留原FAT分区的情况下建新的分区,这样就绕开了这个问题。(代价是146G*2的硬盘损失了大约3G的空间,反正我是无所谓啦~)

2011-03-24 18:33:00 warrenwyf 阅读数 5128
  • 嵌入式Linux文件与串口编程

    本课程介绍Linux环境下shell编程,普通文件与设备文件的编程方法,串口介绍与应用编程。 学习条件: 1.C语言编程基础 2.嵌入式Linux开发基础

    7273 人正在学习 去看看 沈寒

【本文环境】VirtualBox 4.0.4,CentOS 5.5 x64

Heartbeat[1]是Linux下最常用的HA方案之一,主要为了解决集群前置服务器的单点失效问题。Heartbeat顾名思义可以在两台电脑间通过心跳信号来互相探测对方是否正常工作,因此,这两台电脑间需要有相应的物理介质连接起来。在这里,我并没有使用额外的网线(CAT-5双绞线[2])和网卡来实现,而是采用了串口线来建立心跳连接。

这样,在VirtualBox虚拟环境中,虚拟机间还需要使用一个虚拟的串口互相连接,这还需要一个软件的配合:Named Pipe TCP Proxy。如图 1,在本机上通过Named Pipe TCP Proxy可以新建一个命名管道,这样运行于本机上的虚拟机就可以将虚拟机串口的I/O重定向到这个管道上,如果两个虚拟机都定向到这个管道的时候,就相当于两个虚拟机通过一根串口线连接到了一起。

clip_image002 clip_image004

1 在Named Pipe TCP Proxy中新建管道连接

这样,在创建Linux虚拟机的时候,两个虚拟机就都使用“//./pipe/vbox”作为虚拟串口,唯一的区别是首先启动的虚拟机需要勾选“创建通道”选项,如图 2。

clip_image006

2 Linux虚拟机的串口设置

分别启动两个Linux虚拟机,首先验证一下两台虚拟机是否虚拟地通过串口连接到了一起。为了便于区分,我这里用这两台虚拟机的机器名分别代表它们:wuyfcentos1(IP:192.168.2.101)和wuyfcentos2(IP:192.168.2.102)。我们可以分别在两台虚拟机上打开终端,在wuyfcentos1上执行命令:

[root@wuyfcentos1 ~]# cat < /dev/ttyS0

这样,输入到这个虚拟机COM1串口的数据都会在控制台中打印出来,如果我们在wuyfcentos2虚拟机上执行echo命令:

[root@wuyfcentos2 ~]# echo 'test serial connection' > /dev/ttyS0

在wuyfcentos1上可以看到这段文本:

[root@wuyfcentos1 ~]# cat < /dev/ttyS0

test serial connection

这样表明,从wuyfcentos1串口发送的数据可以被wuyfcentos2串口接收到,两台虚拟机相当于通过串口线连接在了一起。

下面,就要使用Linux Heartbeat,在CentOS上可以通过yum的安装:

[root@wuyfcentos1 ~]# yum install heartbeat

Linux Heartbeat通过配置文件配置,配置文件均位于/etc/ha.d/目录下,一个Heartbeat集群节点需要3个配置文件:“ha.cf”、”authkeys”、“haresources”,这都需要手动创建,让我们分别来看这3个配置文件的内容:

“ha.cf”:

serial /dev/ttyS0 #使用串口,串口为/dev/ttyS0

baud 19200 #通讯使用的波特率

auto_failback on

autojoin none

warntime 5

deadtime 15

initdead 60

keepalive 1

node wuyfcentos1.localdomain #节点1

node wuyfcentos2.localdomain #节点2

这个文件详细怎么配置可以参考:

http://www.linux-ha.org/doc/users-guide/_creating_an_initial_heartbeat_configuration.html#_the_literal_ha_cf_literal_file

http://www.linux-ha.org/ha.cf

“authkeys”:

auth 1

1 crc

注意,这个文件必须是600权限,所以新建文件后需要运行命令:

[root@wuyfcentos1 ~]# chmod 600 authkeys

这个文件详细怎么配置可以参考:

http://www.linux-ha.org/doc/users-guide/_the_literal_authkeys_literal_file.html

http://www.linux-ha.org/authkeys

“haresources”:

wuyfcentos1.localdomain 192.168.2.100 httpd

这是wuyfcentos1这个虚拟机的配置,表明Heartbeat使用的集群IP为“192.168.2.100”,并且,Heartbeat管理的服务是httpd,因为我们希望将两台服务器的Apache进行一个互备。

最后我们还需要把Heartbeat注册为系统服务:

[root@wuyfcentos1 ~]# chkconfig --list heartbeat
[root@wuyfcentos1 ~]# chkconfig heartbeat on

修改完Heartbeat的配置文件后,通过reload命令重新加载:

[root@wuyfcentos1 ~]# service heartbeat reload

我在wuyfcentos1和wuyfcentos2下的/var/www/html下放置了不同的index.html文件,如果我直接访问Heartbeat集群IP:http://192.168.2.100,看到的页面是wuyfcentos2上的页面:

clip_image008

这时,强行杀死wuyfcentos2虚拟机进程,刷新页面马上变成了wuyfcentos1上的页面:

clip_image010

再把wuyfcentos2虚拟机启动起来后,刷新页面也会再切回到wuyfcentos2的页面,因为wuyfcentos1将资源重新交还到wuyfcentos2手中,这个时候在后台日志中可以看到这样的信息:

Mar 24 11:23:46 wuyfcentos1 heartbeat: [19364]: info: Heartbeat restart on node wuyfcentos2.localdomain

Mar 24 11:23:46 wuyfcentos1 heartbeat: [19364]: info: Link wuyfcentos2.localdomain:/dev/ttyS0 up.

Mar 24 11:23:46 wuyfcentos1 heartbeat: [19364]: info: Status update for node wuyfcentos2.localdomain: status up

Mar 24 11:23:46 wuyfcentos1 harc[20082]: [20088]: info: Running /etc/ha.d/rc.d/status status

Mar 24 11:23:48 wuyfcentos1 heartbeat: [19364]: info: Status update for node wuyfcentos2.localdomain: status active

Mar 24 11:23:48 wuyfcentos1 harc[20094]: [20100]: info: Running /etc/ha.d/rc.d/status status

Mar 24 11:23:48 wuyfcentos1 heartbeat: [19364]: info: remote resource transition completed.

Mar 24 11:23:48 wuyfcentos1 heartbeat: [19364]: info: wuyfcentos1.localdomain wants to go standby [foreign]

Mar 24 11:23:49 wuyfcentos1 heartbeat: [19364]: info: standby: wuyfcentos2.localdomain can take ourforeign resources

Mar 24 11:23:49 wuyfcentos1 heartbeat: [20106]: info: give up foreign HA resources (standby).

Mar 24 11:23:49 wuyfcentos1 heartbeat: [20106]: info: foreign HA resource release completed (standby).

Mar 24 11:23:49 wuyfcentos1 heartbeat: [19364]: info: Local standby process completed [foreign].


[1] http://www.linux-ha.org/wiki/Heartbeat

[2] http://zh.wikipedia.org/zh/CAT-5

2009-03-31 09:34:00 lophyxp 阅读数 571
  • 嵌入式Linux文件与串口编程

    本课程介绍Linux环境下shell编程,普通文件与设备文件的编程方法,串口介绍与应用编程。 学习条件: 1.C语言编程基础 2.嵌入式Linux开发基础

    7273 人正在学习 去看看 沈寒

面对这路由器、交换机和高端的服务器(这条没有证实、只是猜测),登录console控制台往往是诸事不行时的最后手段。可惜我的N220没有串口,只能寻找USB转串口的方案。
最近,有幸觅到了一个转换器。profilic PL-2303芯片的。
windows下的驱动可以在这里获得:
http://www.prolific.com.tw/eng/downloads.asp?ID=31
linux下,kernel-2.6.5以前驱动是以patch的形式提供的,我使用的内核是2.6.28,pl2303的驱动已经包含在内核代码中了。只需要在编译的时候启用CONFIG_USB_SERIAL_PL2303即可。
linux下比较好的终端程序是minicom。
以上,为走向更专业的工程师而努力。

2014-07-28 16:41:57 rotman173 阅读数 1545
  • 嵌入式Linux文件与串口编程

    本课程介绍Linux环境下shell编程,普通文件与设备文件的编程方法,串口介绍与应用编程。 学习条件: 1.C语言编程基础 2.嵌入式Linux开发基础

    7273 人正在学习 去看看 沈寒


一. 问题描述:

1.        因测试需要,需要机顶盒N8606中portal文件拷贝出来。

二. 解决方案和效果:

1.        使用串口拷贝文件

1)       使用串口线连接上机顶盒串口。打开SecureCRT工具,选择串口连接,连接机顶盒。

2)       配置一个Linux服务器共享文件夹export,开启nfs服务。(配置信息见参考资料)

3)       在SecureCRT工具中,进入机顶盒命令行,输入mount -t nfs -o rw 机顶盒IP:/export /mnt/nfs。把export文件夹挂载到/mnt/nfs下面。

4)       进入到机顶盒/mnt/hd/HDD0/flash/下,把portal文件夹拷贝到/mnt/nfs下面

5)       再在机顶盒命令行中输入umount /mnt/nfs卸载掉export。

6)       进入linux服务器中的export文件夹下面,可以看到已拷贝进去的portal文件夹,再拷贝到本机及可

2.        使用U盘拷贝文件

1)       使用U盘插入机顶盒内,机顶盒会自动识别到U盘,使用fdisk命令查看U盘的盘符(假如为/dev/sda1)

2)       使用挂载命令mount –t vfat /dev/sda1 /mnt/nfs。把u盘挂载到/mnt/nfs文件夹下面

3)       进入到机顶盒/mnt/hd/HDD0/flash/下,把portal文件夹拷贝到/mnt/nfs下面

4)       再在机顶盒命令行中输入umount /mnt/nfs卸载掉u盘(一定要做这一步),然后拔出U盘拷贝到本机上

三. 经验总结和相关建议:

1.        以上串口导出只适用N8606

2.        在使用U盘时,需要先卸载掉U盘在拨出。

3.        使用以上功能时,只能在debug版本的机顶盒使用。

4.        N9101,一体机挂载命令见参考资料

四. 可否转化为checklist:

五. 参考资料

    

没有更多推荐了,返回首页