国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

QNX操作系統(tǒng)的網(wǎng)絡交換機驅(qū)動設計

2018-08-08 07:31,,
關鍵詞:網(wǎng)絡接口網(wǎng)絡設備網(wǎng)絡通信

,,

(國電南京自動化股份有限公司,南京210032)

引 言

隨著電力系統(tǒng)智能化的不斷發(fā)展,對自動化裝置的通信技術要求也越來越高,除了要求通信穩(wěn)定可靠外,還要求通信接口冗余、網(wǎng)絡接口盡量多等,而傳統(tǒng)的通信模件一般是利用CPU自帶的MAC控制器外加獨立PHY的方式實現(xiàn)網(wǎng)絡通信,由于資源的限制通常一個CPU僅提供2個MAC控制器,限制了對通網(wǎng)絡信口的擴展,而通過采用網(wǎng)絡交換芯片88e6060可以很方便地設計出5網(wǎng)口甚至以上的通信模組,能最大化滿足電力系統(tǒng)通信需求。

1 QNX系統(tǒng)簡介

QNX是類UNIX操作系統(tǒng),由加拿大QSSL公司(QNX Software System Ltd)開發(fā)的分布式實時操作系統(tǒng)。它采用獨特的微內(nèi)核結構,由內(nèi)核實現(xiàn)進程通信、進程調(diào)度、中斷處理和底層網(wǎng)絡通信,因此內(nèi)核非常小,運行速度極快。將驅(qū)動程序、應用程序、網(wǎng)絡協(xié)議、文件系統(tǒng)存放的地址空間和內(nèi)核存放的地址空間分離,應用程序無法直接訪問內(nèi)核空間,這種封閉的微內(nèi)核結構使得任何外部模塊的故障都不會影響內(nèi)核的運行,系統(tǒng)穩(wěn)定性大大提高,同時QNX支持裁剪和擴展,能針對用戶需求定制不同的功能模塊,實現(xiàn)靈活的嵌入式開發(fā)。

2 原理設計

圖1 交換芯片與CPU的連接示意圖

通信模件采用AM3352為主控CPU,它是一款基于ARM Cortex-A8內(nèi)核的微處理器,主頻最高支持720 MHz,運算能力高達1600 DMIPS,具有豐富的外圍接口,能搭配DDR3,支持大容量的eMMC和NAND Flash。圖1給出了網(wǎng)絡交換芯片88e6060與CPU的連接示意圖,交換芯片作為10/100 BaseT網(wǎng)絡收發(fā)器,其端口P5設計成MII-PHY模式與CPU連接,P0、P1、P2、P3、P4用于與信息子站、DCS、錄波器等網(wǎng)絡通信。

3 網(wǎng)絡交換機驅(qū)動

3.1 QNX下網(wǎng)絡驅(qū)動層次結構

QNX網(wǎng)絡模塊采用層次化結構設計,如圖2所示,網(wǎng)絡設備驅(qū)動模塊處于最底層,接受io-pkt的調(diào)度和管理,負責向io-pkt報告數(shù)據(jù)收發(fā)情況,接收和傳遞數(shù)據(jù)。中間層是底層和頂層的數(shù)據(jù)橋梁,它提供統(tǒng)一接口給協(xié)議模塊。頂層resource manager提供了Socket API調(diào)用的open、write、read等函數(shù),通過read應用層接收來自io-pkt的數(shù)據(jù),通過write應用層發(fā)送數(shù)據(jù)到io-pkt,由io-pkt調(diào)用協(xié)議模塊實現(xiàn)IP、TCP、UDP等網(wǎng)絡傳輸協(xié)議。

圖2 網(wǎng)絡模塊層次結構圖

3.2 QNX下網(wǎng)絡交換機驅(qū)動原理和實現(xiàn)方法

網(wǎng)絡設備驅(qū)動程序按功能可劃分為初始化模塊、中斷處理模塊、接收數(shù)據(jù)模塊、發(fā)送數(shù)據(jù)模塊、網(wǎng)絡設備信息統(tǒng)計模塊。

3.2.1 初始化

初始化模塊對寄存器地址空間進行映射,完成對寄存器的配置,向系統(tǒng)注冊中斷處理函數(shù)、收包函數(shù)、發(fā)包函數(shù),讓系統(tǒng)知道網(wǎng)絡設備存在網(wǎng)絡通信的能力,并最終由io-pkt調(diào)用收包函數(shù)、發(fā)包函數(shù)實現(xiàn)數(shù)據(jù)的收發(fā)。程序首先清空RX_HDP和TX_HDP,將CPPI前4 KB空間分配給接收隊列描述字Rx_Descriptors,后4 KB空間分配給發(fā)送隊列描述字Tx_Descriptors。Rx_Descriptors是按下面結構體定義的數(shù)組,其成員Next指向下一個Rx_Descriptor,成員Buffer指向數(shù)據(jù)體存放的RAM空間, 成員off_len存放Buffer中有效數(shù)據(jù)的長度,成員flag_len存儲Buffer狀態(tài)信息和數(shù)據(jù)包的有效長度。

typedef struct{

uint32_t next; /*Pointer to next descriptor*/

uint32_t buffer; /*Pointer to data buffer*/

uint32_t off_len; /*Buffer offset and length*/

uint32_t flag_len; /*Packet flag and length*/

} cppi_desc_t;

建立Rx_Descriptors的單向鏈接表,使RX_HDP指向鏈表的首端。建立起的鏈表如圖3所示。

圖3 接收隊列鏈表圖

隊列描述表建立好后,驅(qū)動需要調(diào)用設備綁定函數(shù)dev_attach為每個端口分配一個網(wǎng)絡設備dev,dev封裝了網(wǎng)絡接口ifnet用于網(wǎng)絡設備的管理,ifnet定義了啟動分組的傳輸函數(shù)if_start、初始化接口函數(shù)if_init、控制命令函數(shù)if_ioctl。QNX下的網(wǎng)絡驅(qū)動不直接響應中斷處理,而是由io-pkt接管中斷間接調(diào)用驅(qū)動提供的process_interrupt函數(shù)處理中斷,為此需要對結構體iopkt_inter定義中斷處理函數(shù)process_interrupt和中斷使能函數(shù)enable_interrupt,最后調(diào)用interrupt_entry_init、if_attach、ether_ifattach將上述函數(shù)注冊進io-pkt。

為了保證網(wǎng)絡上網(wǎng)絡設備MAC地址的唯一性,采取了將IP地址映射到MAC地址的方法,由初始化程序讀配置文件獲取各網(wǎng)絡設備的IP地址,然后將MAC[3:0]設置成IP[3:0],從而實現(xiàn)了網(wǎng)絡設備MAC地址與IP地址的同步。

電力系統(tǒng)通信的主要特點是正常運行流量較小,突發(fā)流量較大[1]。不同特點的報文在網(wǎng)絡上傳輸會產(chǎn)生不同流量特征,如果網(wǎng)絡配置不當,將會產(chǎn)生不合理的報文傳輸,造成網(wǎng)絡風暴[2],使網(wǎng)絡通信系統(tǒng)癱瘓,因此要求通信裝置有抵御網(wǎng)絡風暴的能力。為此可以通過配置AM335X的RX_IMAX和INT_CONTROL寄存器,對每毫秒接收中斷次數(shù)加以限制,風暴來臨時能控制系統(tǒng)資源消耗,風暴消失后能快速恢復通信能力。

接下來需要配置DMA引擎,開放DMA接收使能和發(fā)送使能,使能DMA中斷。最后通過SMI對交換芯片進行配置,配置PHY為全雙工速率的自動協(xié)商工作模式。將P5口設置成egress trailer模式,出該端口的數(shù)據(jù)尾端都會被88e6060打上4字節(jié)的trailer標簽。同樣CPU發(fā)往該端口的數(shù)據(jù)由驅(qū)動程序在數(shù)據(jù)尾端打上4字節(jié)trailer標簽,通知88e6060數(shù)據(jù)要發(fā)到哪個端口。trailer標簽的格式如圖4所示,DPV[5:0]標識了數(shù)據(jù)要發(fā)往哪個端口。P0、P1、P2、P3、P4設置成普通模式,進出該端口的數(shù)據(jù)是不被修改的未標記幀。

圖4 Marvell trailer標簽格式

為了實現(xiàn)多網(wǎng)口的網(wǎng)絡通信,需要按表1配置交換機路由表。

表1 VLANTable設置

配置完成后形成圖5所示的連接關系,P0、P1、P2、P3、P4同P5保持雙向的連接,P0、P1、P2、P3、P4接收外部請求后通過P5接口把請求數(shù)據(jù)轉(zhuǎn)發(fā)給CPU,CPU處理完畢后,由P5接口把數(shù)據(jù)轉(zhuǎn)發(fā)給請求端口。

圖5 路由圖連接關系

由于P5接口收到的包可能來自P0~P4中的任意一個端口,所以需要在收包函數(shù)Receive里告訴io-pkt收到的數(shù)據(jù)來自哪一個端口,為此在網(wǎng)絡設備dev里定義了數(shù)組成員common_ecom[0~5]用于存儲各網(wǎng)絡設備和各網(wǎng)絡接口的對應關系,從而通過網(wǎng)絡設備可以快速找到網(wǎng)絡接口ifnet。

3.2.2 中斷處理

當網(wǎng)絡數(shù)據(jù)到來時,由DMA控制器將數(shù)據(jù)放到外部Buffer,CPU更新Rx_descriptor的Buffer 域、off_len域和flag_len域,同時中斷控制器產(chǎn)生中斷信號,io-pkt接管中斷,間接調(diào)用驅(qū)動提供的process_interrupt函數(shù),通過process_interrupt函數(shù)調(diào)用Receive函數(shù)接收數(shù)據(jù)。

3.2.3 接收數(shù)據(jù)

Receive函數(shù)從接收隊列描述字獲取有效數(shù)據(jù)長度,用這個長度更新接收數(shù)據(jù)鏈mbuf的m_pkthdr.len域和mlen域。由于通過RMMI收到的來自交換芯片P5接口的數(shù)據(jù)是尾部被打上4字節(jié)tailer標簽的標記幀,所以數(shù)據(jù)送到io-pkt前需要去掉tailer標簽,為此只需要對mbuf的m_pkthdr.len域和mlen域做減4操作,同時要告知io-pkt數(shù)據(jù)是來自哪一個網(wǎng)絡接口。標記幀的tailer標簽DPV[5:0]域指明了數(shù)據(jù)是來自哪一個端口,通過DPV[5:0]可以找到網(wǎng)絡設備dev對應的common_ecom[]數(shù)組成員,從而確定網(wǎng)絡接口ifnet,將ifnet作為參數(shù)傳入ip_input,這樣io-pkt就知道數(shù)據(jù)來自哪一個網(wǎng)絡接口以及應答數(shù)據(jù)要送往哪一個網(wǎng)絡接口。

3.2.4 發(fā)送數(shù)據(jù)

由io-pkt啟動分組傳輸函數(shù)if_start將應答數(shù)據(jù)發(fā)往對應的網(wǎng)絡接口。由于P5接口設置成了egress trailer模式,需要由驅(qū)動在應答數(shù)據(jù)末尾加上4字節(jié)的tailer標簽,為此,通過m_get函數(shù)從系統(tǒng)空間分配數(shù)據(jù)區(qū)m3用于存放tailer標簽。通過if_start函數(shù)的ifnet參數(shù)可以找到對應的網(wǎng)絡設備,網(wǎng)絡設備的device_index成員存儲了設備ID即數(shù)據(jù)要發(fā)往的端口號,把1左移device_index位后寫到m3的數(shù)據(jù)成員m_data[1],用于通知88e6060數(shù)據(jù)要發(fā)往哪個端口,然后將m3鏈接到m2的尾端形成如圖6所示的鏈表。因為增加了4字節(jié)的tailer標簽,m1成員m_pkthdr.len需要加4。最后更新發(fā)送隊列描述字,向TX_HDP寫入發(fā)送隊列描述字首地址啟動TX DMA發(fā)送數(shù)據(jù)。

驅(qū)動程序編寫好后需要配置腳本文件,通過腳本啟動網(wǎng)絡設備。腳本配置如下:

io-pkt-v4-hc-dam335x deviceindex=0

ifconfig dm0 172.20.6.220 up

ifconfig dm1 172.30.6.220 up

……

結 語

利用交換芯片88e6060可以很方便、容易地擴展網(wǎng)絡接口,能滿足電力系統(tǒng)自動化裝置對多通信口的需求。對利用88e6060設計出來的通信模件進行了實測,

其網(wǎng)絡通信可靠、穩(wěn)定,能抵御網(wǎng)絡風暴,將其應用于電力系統(tǒng)能大大提高電力系統(tǒng)的穩(wěn)定性。

圖6 添加tailer標簽示意圖

猜你喜歡
網(wǎng)絡接口網(wǎng)絡設備網(wǎng)絡通信
網(wǎng)絡設備的安裝與調(diào)試課程思政整體設計
一種基于C# 的網(wǎng)絡設備自動化登錄工具的研制
基于網(wǎng)絡通信的智能照明系統(tǒng)設計
網(wǎng)絡通信中信息隱藏技術的應用
基于網(wǎng)絡通信的校園智能音箱設計
談計算機網(wǎng)絡通信常見問題及技術發(fā)展
雙冗余網(wǎng)絡接口自動切換測試模塊的設計與實現(xiàn)
淺析CTC與GSM-R系統(tǒng)網(wǎng)絡接口及路由配置改進措施
網(wǎng)絡設置管理
京滬高鐵GSM-R網(wǎng)絡接口監(jiān)測網(wǎng)關子系統(tǒng)的設計與實現(xiàn)