衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

多用戶安全型串口服務器的組成與設計方案

電子設計 ? 作者:電子設計 ? 2018-11-06 09:07 ? 次閱讀

物聯網的出現及迅猛發展為世界經濟帶來了新的增長點,將那些傳統的儀器設備采用統一的方式接入LAN/Internet 勢在必行。而眾多的設備采用各種串口方式進行通信,當前出現了稱為串口服務器的工具來將這些設備接入LAN/Internet,一般都采用微控制器實現,其功能比較簡單。同時由于互聯網在安全性方面存在眾多的問題,有許多儀器設備的數據關系到企業乃至國家的信息安全,因此設計與開發具備良好安全性的串口服務器極為重要,本文采用ARM9 微處理器Linux 操作系統,設計開發了具有多用戶訪問,使用SSL 協議的安全型串口服務器。

1 硬件電路組成

所采用的主控微處理器為AT91SAM9261[2],它擴展了 DSP 指令集和Janelle java 加速器,主時鐘頻率達到190MHz,為大量復雜的運算提供了強大了支持。

同時,其眾多的外部接口包括了從UARTUSB 的廣泛支持。其自身只帶有四個UART 接口,可以直接用來做為四串口服務器使用。另外,由軟件控制的功率管理器(PMC)可以有選擇地關閉和開啟處理器核心和各種外設或降低其工作頻率,能使得系統的功耗保持在最小。

使用 DM9000A 作為以太網控制芯片,其集成10/100M 物理層接口;內部帶有16K 字節SRAM 用作接收發送的FIFO 緩存;支持8/16bit 兩種主機工作模式;支持TCP/IP 加速減輕CPU 負擔,提高整機效能。

另外做為系統必需,還包括了電源模塊、32M 的SDRAM、2G 的NAND Flash 以及4M 的Data Flash(用于存放U-boot 和Linux 內核)。系統的硬件框圖如圖1所示。

多用戶安全型串口服務器的組成與設計方案

圖 1 硬件組成

2 軟件平臺構建

系統的軟件平臺基于嵌入式 Linux 操作系統,主要的工作包括引導程序的移植,嵌入式Linux 內核的編譯,及根文件系統的生成。在做這些工作之前,需要建立一個完整的交叉編譯環境,包含gcc、glibc 等等,用來在PC 機上產生ARM 處理器能執行的二進制代碼。

引導程序采用廣泛使用的U-boot,其功能強大,包含了對TFTP、NFS 以及NAND的支持。同時ATMEL發布了專門針對其產生的處理器的U-boot 修改版本,對快速的產品開發起到了很大的幫助。從其專門網站下載U-boot 源代碼,解壓生成uboot 源代碼目錄,在其中運行“make at91sam9261ek_config; make”即可生成uboot.bin 的二進制文件,通過使用ATMEL 的ISP工具將其寫入到DATA FLASH 的8000 位置,復位AT91SAM9261 之后即能看到“U-boot>”字樣的提示符,表示U-boot 運行成功。

第二步為編譯Linux 的內核,同樣有針對AT91SAM926X 型號處理器的專門修改版本,考慮系統的穩定性,采用Linux-2.6.24 的內核版本。下載之后解壓生成Linux-2.6.24 的目錄,運行“make ARCH=armCROSS_COMPILE=arm-linux-menuconfig”命令,表示使用Linux 的處理器架構為ARM,交叉編譯器的前端為“arm-linux-”,同時使用菜單的方式對Linux 進行配置,只需將其中的芯片選為AT91SAM9261 即可。此后即可用make 命令編譯生成二進制映像文件,為了讓U-boot 能向內核傳遞一些保正正確啟動的參數,二進制映像文件還需要使用U-boot 的mkImage 工具進行包裹之后才能被U-boot 使用。

下一步,還需要制作根文件系統[3],即以”/”為起點的文件系統,在PC 機上制作rootfs 目錄來模擬,在其下生成etc、bin、lib 等Linux 所需的目錄結構,使用busybox 工具在bin 目錄中生成基本命令工具集,同時將交叉編譯器所使用的glibc 的庫文件拷貝到lib目錄下,再經過對etc 目錄的配置之后,完整的嵌入式Linux 系統即構建完成。

最后,為了滿足應用軟件的需要,還需要編譯出openSSL、XML 等支持庫,將它們拷貝到根文件系統的/lib 或/usr/lib 目錄下,將來應用軟件運行時就會自動連接到這些庫調用所需要的功能。

3 軟件實現

3.1 總體架構

串口服務器的應用軟件采用C 語言進行線程化及模塊化設計,總體架構如圖2 所示。

多用戶安全型串口服務器的組成與設計方案

圖 2 軟件框架

在設計中借用了Unix/Linux 的設計思想,Unix/Linux 在系統層將所有的設備及接口都視為文件,采用統一的接口規范,使得應用程序只需使用read、write等操作即可與設備進行交互,極大地方便了程序的開發及維護,同時具有極高的可擴展性。在本設計中,將串行接口以及TCP 通信采用統一的接口框架,可以帶來擴展支持更多接口的好處,比如MODBUS 總線協議,CAN 總線等等,另外SSL 也就是在這個基礎上的擴展支持。定義結構體如下:

struct Interface{

int type;

int fd; //file descriptor

int init(int num);

int (*read)(int clientfd, BufPtr buf, int size);

int (*write)(int clientfd, BufPtr buf, int size);

int (*accept)(int sockfd);

int (*disconn)(int fd);

}

結構體中使用了Buf 緩沖塊結構體,用來存儲接收或者發送的數據。同時定義了接口的回調函數比如讀寫,連接等操作,這些函數根據不同的接口就有不同的實現。

接口模塊與處理模塊之間采用隊列的方式進行通信,為了充分利用Linux 系統的特性,采用信號量的方式來模擬出生產者-消費者模型,當隊列為空時使得接收線程進入睡眠狀態,降低系統資源消耗。數據包處理線程負責根據轉發策略來處理來自串口或者以太網的數據、用戶的登錄以及設備配置操作等等。

3.2 多用戶支持及工作模式

為了使得多個用戶同時在不同地點都能訪問到服務器,設計了用戶管理模塊,將用戶分為兩類:一類為管理員用戶,除了對串口的通信操作之外,還可以對串口服務器進行配置操作(以太網參數,串口參數等);另一類為普通用戶,它只能與串口進行數據的通信。進行這樣的劃分之后,可以避免掉許多普通訪問者對設備進行篡改,造成不必要的故障。

每個創建的用戶都被保存在user.xml 文件當中,采用的格式如下,其中的password 節點不以明文的方式來存取,而是使用MD5 算法對“用戶名+密碼”字符串生成16 字節的摘要字串進行保存,這樣可以方式被非法獲取到密碼。

test

16 字節MD5

normal

用戶對串口的操作應是互不影響的。用戶A 對串口1 進行操作的時候,意味得用戶B 此時不能對串口1 進行操作,但可能可以對串口2 進行操作,如果串口2 處在空閑的狀態下。因此,對串口操作定義兩種工作模式:

(1)響應模式,在此模式下,定義用戶對串口(也即串口所接設備)發送請求數據和串口對用戶的請求回應數據這一過程稱為一個響應過程,響應過程過程是互斥的。響應模式可以使得多個用戶能更充分地利用串口, 當多個用戶進行相同的數據請求時,可以合成為一個請求,從而較大地提高訪問效率。

(2)獨占模式,在此模式下,串口為某用戶獨自占有,一直到其明確地釋放了該串口。這一模式的好處是如果需要長時間與串口進行通信,可以避免其它用戶的干擾。

3.3 接口模塊

接口模塊是整個系統中最重要的部分,TCP 數據的接收及串口數據的接收都依賴于它的實現,前文提到了TCP 以及串口采用統一的接口進行抽象,串口服務器的TCP 連接同時采用了C/S 模式和S/C,也即串口服務器同時以服務器的形式供上位機連接,還能以客戶端的方式主動地去連接上位機,這在服務器地IP 地址為通過DHCP 自動獲取時非常有用,因為此時上位機無從知曉串口服務器的IP 地址而無法連接。

由于要同時服務于多個用戶,同時又要隨時地接收來自串口的數據,也就是說串口服務器應該具有良好的并發性,以不至于在多個用戶同時訪問時產生瓶頸。采用Select 模型來實現I/O 的操作,該模型首先使用FD_SET 將需要偵聽的客戶fd,TCP 偵聽fd 以及串口fd 加入到偵聽集當中,然后使用函數select()偵聽,當任何一個fd 上有數據到來時馬上返回,將數據接收完成后放入接收數據隊列后返回繼續進行偵聽,流程如圖3 所示。

多用戶安全型串口服務器的組成與設計方案

圖 3 select 模型流程

3.4 SSL 的擴展

針對 ARM9 的運算能力,只要求上位機對串口服務器的數字證書進行驗證,服務器證書名為server.pem,由CA 進行簽證。CA 可以是正規證書簽發機構,也可以是自已建立的非正式簽發機構。根據非對稱密碼學,CA 使用其私鑰簽名的數據證書只有其公鑰才能解密,將其公鑰及相關信息做為根證書,只要上位機保證從安全的途徑得到根證書,因為只需要一次獲取,從而不會出現中間人攻擊的情況。

因為SSL 通信是建立在TCP 協議基礎之上,可以在原socket 程序代碼之上實現SSL 程序,openSSL 很好地對SSL 進行了封裝,且在1.0 之后的版本中提供了對ARM處理器的支持,使用openSSL 對原有TCP通信代碼進行修改即可實現SSL 安全通信。修改分別針對于struct Interface 中的accept、write、read。對于SSL,它們分別指向SSLaccept、SSLdisconn、SSLwrite、SSLread,在SSLaccept 函數中,在原有TCP 連接建立之后再進行SSL 協議的握手過程,在此過程中進行服務器數字證書的驗證并交換臨時密鑰,代碼如下:

clientFd=accept(listenerFd,(struct

sockaddr *)(&tmpAddr),(socklen_t *)&len);

bio=BIO_new_socket(clientFd,BIO_NOCLOSE);

ssl=SSL_new(ctx);

SSL_set_bio(cli->ssl,cli->sbio,cli->sbio);

//SSL 握手

if(( ret=SSL_accept(cli->ssl)) <= 0 ) {

sslErr(ssl);

}

在SSLwrite 及SSLread 函數中可以簡單地將原socket 中的read 及write 函數替換為openSSL 庫中的SSL_write 和SSL_read 函數。不過對于SSLread,由于使用了select 并發模型,只要fd 上有數據出現select函數即馬上返回,而此時可能openSSL 正在進行數據解密操作,SSL_write 函數則返回錯誤的信息。對此必須對返回的錯誤進行處理,一直等到解密完成才能讀取返回:

do {

ret=SSL_read(ssl,buf, size);

switch(SSL_get_error(ssl,ret)){

case SSL_ERROR_NONE:

goto read_done; //真正讀完

case SSL_ERROR_ZERO_RETURN:

ret=SSL_shutdown(ssl);

goto end;

case SSL_ERROR_WANT_READ:

read_blocked=1;

break;

default:

DBG("SSL read problem\n");

}

} while (SSL_pending(ssl)&& !read_blocked);

3.5 SSL 的擴展

在ARM這種相對于PC 處理器運算能力弱很多的處理器上,必須選擇安全性高且速度有快的加密算法,RC4 是最理想的選擇,下表為采用SSL_RC4_MD5 加密方式的傳輸與普通TCP 傳輸的一組速率對比:

表 1 TCP 和SSL 傳輸速率測試(處理器:190MHz,以太網:100M)

從表中可以看到隨著傳輸數據量的增大,傳輸率逐步趨于穩定,可以推測出為最大的數據傳輸率,TCP約為5.2MB/S,SSL 約為2.34MB/S。在SSL 下,若以半雙工的方式傳輸,而根據串口固定的波特率,可以以“波特率*N<最大數據傳輸率”的公式求得在此波特率下可支持的串口數,在測試中,以四個串口為例,當四個串口波特率都設為460800bps 時,仍能正常通信。

4 總結

通過對設計目標的需求分析,結合ARM9 及Linux軟硬件平臺豐富資源的優勢整合,設計的串口服務器實現了多用戶多點訪問以及安全通信。為串口設備接入互聯網提供了更好的選擇。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5092

    文章

    19177

    瀏覽量

    307674
  • 物聯網
    +關注

    關注

    2913

    文章

    44925

    瀏覽量

    377022
  • Linux
    +關注

    關注

    87

    文章

    11345

    瀏覽量

    210395
  • 服務器
    +關注

    關注

    12

    文章

    9304

    瀏覽量

    86062
收藏 人收藏

    評論

    相關推薦

    【教程】NA111串口服務器可配置網關使用教程#串口服務器

    串口服務器
    電子學習
    發布于 :2023年02月08日 09:53:50

    【教程】NA111串口服務器存儲網關模式使用教程#串口服務器

    串口服務器
    電子學習
    發布于 :2023年02月08日 10:21:04

    嵌入式串口服務器設計方案深度探究

    項目背景及可行性分析 項目名稱、項目的主要內容及目前的進展情況 項目名稱:基于MicroBlaze的嵌入式串口服務器的實現 項目的主要內容:本作品將要實現一個串口服務器,它有2個串口,每個串口
    發表于 10-16 15:55 ?2次下載
    嵌入式<b class='flag-5'>串口服務器</b>的<b class='flag-5'>設計方案</b>深度探究

    moxa串口服務器通訊設置參數

    本文詳細介紹了串口服務器的定義,其次介紹了MOXA串口服務器的工作方式,最后詳細介紹了moxa串口服務器通訊設置參數。
    發表于 02-01 15:00 ?1.4w次閱讀

    串口服務器調試方法_口服務器怎么設置

    MOXA串口服務器有多種型號,其中最常用的要數5130、5232等基本型號。其功能強大性能穩定深的用戶喜愛。在此我們就5130這個型號看一看MOXA串口服務器的基本調試方法串口服務器
    發表于 02-01 17:25 ?2.8w次閱讀
    <b class='flag-5'>串口服務器</b>調試方法_<b class='flag-5'>口服務器</b>怎么設置

    什么是串口服務器,串口服務器的作用是什么

    的RS-232/422/485機器設備馬上連接網絡,運用經過TCP/IP的串口數據流分析傳輸的保持來操縱管理方法的機器設備硬件配置是致力于串口轉以太網接口設計方案聯接的公路橋梁。串口
    的頭像 發表于 10-18 07:57 ?2.3w次閱讀

    串口服務器485轉以太網

    串口服務器485轉以太網可以將485等串口設備連接到網絡中,讓這些設備采集的數據發往網絡,建立串口和網絡的透明傳輸通道,實現設備聯網。用戶可以使用組態軟件或者自己編寫網絡通信程序和設備
    發表于 04-02 09:18 ?4166次閱讀

    串口服務器是什么 有哪些分類及特點

    串口服務器相對單串口服務器來說,具備多個串行口,其要求主CPU的性能及功能的要求更多,這也是很多廠商只有單串口服務器,而沒有多串口服務器的原因。接下來我們就來為大家詳細介紹下什么是多
    的頭像 發表于 02-12 15:45 ?2673次閱讀

    串口服務器的常見問題及解決方法

    串口服務器因為其功能的原因,如今在工控領域有著非常廣泛的應用,在實際使用串口服務器的過程中也會遇到一些問題。下面為大家介紹幾個在使用串口服務器時經常會遇到的問題及解決方法。
    發表于 06-16 16:01 ?3109次閱讀

    串口服務器的類型及作用

    串口服務器是通過本地局域網網絡,甚至在互聯網上訪問串口設備非常有用的工具。一個串口轉以太網服務器,也可以稱為串口服務器
    發表于 06-16 16:03 ?1593次閱讀

    串口服務器連接MQTT服務器方法說明

    串口服務器連接MQTT服務器方法參考“串口服務器用戶手冊”,不再重復說明。
    發表于 03-30 09:58 ?4788次閱讀
    <b class='flag-5'>串口服務器</b>連接MQTT<b class='flag-5'>服務器</b>方法說明

    兩路串口同時獨立工作——澤耀科技A700雙串口服務器

    物聯網技術在逐漸發展,很多用戶表示單串口服務器已經無法滿足他們的需求,這時雙串口服務器的優勢便逐漸凸顯出來,它可以幫助設備更高效的運作。本期為大家介紹的澤耀科技推出的A700-SS(01),便為一款
    的頭像 發表于 12-16 17:52 ?807次閱讀
    兩路<b class='flag-5'>串口</b>同時獨立工作——澤耀科技A700雙<b class='flag-5'>串口服務器</b>

    多功能串口服務器設計方案

    設計方案思路的由來,是因為我們現在的開發板基本需要通過串口與WIFI模組或以太網模組連接以實現聯網功能,如果多個開發板就要配多個模組,所以做一個類似路由的功能,將多種串口協議集中連接
    的頭像 發表于 06-29 17:36 ?1216次閱讀
    多功能<b class='flag-5'>串口服務器</b><b class='flag-5'>設計方案</b>

    串口服務器作用與實際應用實例詳解

    ,設備可以像緊靠設備一樣工作,而無需任何中間設備。▍串口服務器的作用遠程監控和管理:通過串口服務器用戶可以遠程監控和管理串口設備,無需現場操作,節省人力和時間成本。
    的頭像 發表于 03-12 14:59 ?968次閱讀
    <b class='flag-5'>串口服務器</b>作用與實際應用實例詳解

    工業串口設備通訊神器:串口服務器CS64J

    在當今工業物聯網應用中,串口服務器的應用非常普遍。無論是RS485還是RS232串口通訊,串口服務器都能夠輕松實現虛擬串口串口以太網雙向數
    的頭像 發表于 03-21 17:09 ?566次閱讀
    工業<b class='flag-5'>串口</b>設備通訊神器:<b class='flag-5'>串口服務器</b>CS64J
    科技| 百家乐官网手机游戏下载| 百家乐官网的必赢术| 澳门百家乐官网骗人| 注册百家乐送彩金 | 百家乐电子路单破解| 大发888官方免费下载| 溧水县| 百家乐官网麻将牌| 百家乐波音独家注册送彩| 重庆市| 至尊百家乐官网20| 威尼斯人娱乐场官网h00| 百家乐官网最全打法| 太阳百家乐官网破解| 百家乐款| 网上百家乐官网优博| 真人百家乐官网赌法| 什么是百家乐的大路| 华容县| 网上百家乐骗人吗| 德州扑克在线游戏| 大世界百家乐官网娱乐场| 百家乐网上真钱娱乐| 玛多县| 折式百家乐赌台| 大发888游戏平台稳定大发888| 百家乐官网平台在线| 劳力士百家乐的玩法技巧和规则| 真人百家乐官网口诀| 玩百家乐澳门368娱乐城| 蒙特卡罗网上娱乐| 百家乐官网技巧平注常赢法| 疯狂百家乐游戏| 百家乐官网投注网址| 英皇百家乐的玩法技巧和规则| 百家乐官网赢钱海立方| 百家乐六合彩3535| 百家乐真钱斗地主| 百家乐官网庄家的胜率| 网上的百家乐是真是假|