韓彥超,李 亮,王成群
(1.浙江理工大學(xué)信息科學(xué)與工程學(xué)院,浙江 杭州 310018;2.浙江海利普電子科技有限公司,浙江 海鹽 314300)
第五代移動通信[1](5G)作為新一代蜂窩移動通信技術(shù),在4G技術(shù)的基礎(chǔ)上集合了毫米波[2],大規(guī)模多輸入多輸出[3],以及波束賦形[4]等多種通信領(lǐng)域的前沿技術(shù),具有傳輸速率高、低延時、高速度、廣連接的特性[5]。2019 年,5G技術(shù)在全球范圍內(nèi)正式投入商用部署,極大地促進(jìn)了工業(yè)、醫(yī)療、娛樂、消費(fèi)、交通等各行業(yè)數(shù)字化、網(wǎng)絡(luò)化、智能化的發(fā)展。但是,5G網(wǎng)絡(luò)在農(nóng)場直播帶貨、礦山無線遠(yuǎn)程遙控和深井作業(yè)等應(yīng)用場景中會出現(xiàn)信號不穩(wěn)定[6-8]的問題,導(dǎo)致數(shù)據(jù)傳輸速率嚴(yán)重下降和時延增大。這是因?yàn)?G商用化需要通過三大運(yùn)營商建造的5G基站進(jìn)行數(shù)據(jù)傳輸,由于運(yùn)營商建設(shè)的基站分布不均勻,并且在農(nóng)村及偏遠(yuǎn)地區(qū)建設(shè)的5G基站較少,這使得5G的傳輸性能受到極大的影響。針對上述問題,本文使用MPTCP[9-11]技術(shù)設(shè)計(jì)了基于5G的多路徑數(shù)據(jù)傳輸系統(tǒng),目的是使用不同運(yùn)營商的SIM卡將多條5G鏈路帶寬聚合,提高5G在特殊應(yīng)用場景中的傳輸帶寬、連接魯棒性及網(wǎng)絡(luò)服務(wù)質(zhì)量,有效解決當(dāng)前5G應(yīng)用中所面臨的問題。
系統(tǒng)總體架構(gòu)(圖1)包括主控模塊、5G模組、數(shù)據(jù)交互和人機(jī)交互四個部分,其中主控模塊使用ARM Cortex-A7內(nèi)核[12]的I.MX6ULL芯片作為主控制器控制系統(tǒng)的運(yùn)行,完成數(shù)據(jù)的接收和發(fā)送;5G模組是實(shí)現(xiàn)遠(yuǎn)程數(shù)據(jù)傳輸?shù)闹饕O(shè)備,本文系統(tǒng)中搭載了兩個5G模塊構(gòu)成兩條5G通信鏈路;數(shù)據(jù)交互采用以太網(wǎng)和無線Wi-Fi的方式與外部設(shè)備構(gòu)成局域網(wǎng),實(shí)現(xiàn)數(shù)據(jù)的采集。人機(jī)交互使用通用接口或設(shè)備實(shí)現(xiàn)與系統(tǒng)的交流,并對系統(tǒng)進(jìn)行操作。
圖1 系統(tǒng)總體架構(gòu)圖Fig.1 Diagram of overall system architecture
系統(tǒng)硬件設(shè)計(jì)框圖如圖2所示,輸入DC12 V電壓,經(jīng)過BUCK轉(zhuǎn)換電路后為系統(tǒng)平臺的設(shè)備模塊供電;核心控制系統(tǒng)由NXP公司的I.MX6ULL處理器芯片搭載FLASH和DDR3組成,為系統(tǒng)提供存儲和運(yùn)行內(nèi)存空間;外圍電路包括5G移動通信、有線以太網(wǎng)、無線網(wǎng)Wi-Fi、外部存儲、USB串口、啟動模式選擇等設(shè)備,與核心控制系統(tǒng)連接完成系統(tǒng)硬件電路的搭建。
圖2 系統(tǒng)硬件設(shè)計(jì)框圖Fig.2 Block diagram of system hardware design
I.MX6ULL核心控制電路由內(nèi)存擴(kuò)展DDR3和存儲空間擴(kuò)展NAND FLASH接口電路組成。其中,將容量為512 MB的DDR3L芯片NT5CC256M16EP-EK用于系統(tǒng)內(nèi)存空間擴(kuò)展,為系統(tǒng)提供足夠的運(yùn)行空間;使用Micron公司512 MB的NAND FLASH芯片MT29F4G08作為存儲擴(kuò)展,用于存儲系統(tǒng)鏡像、設(shè)備樹和根文件系統(tǒng)及相應(yīng)的數(shù)據(jù)。
本文使用Quectel公司的RM500Q-GL模組搭建5G移動通信電路。該模組支持5G NR-SA/NSA等多種網(wǎng)絡(luò)制式;支持PCIe、USB3.0和USB2.0數(shù)據(jù)交互接口,是一款工業(yè)級5G通信模組。
5G移動通信硬件框圖如圖3所示,I.MX6ULL芯片內(nèi)部集成UTMI接口[13]連接控制器和USB PHY,其中TermSelect作為終端選擇信號,通過控制上拉或下拉電阻的變化產(chǎn)生HS/FS狀態(tài)下不同的線狀態(tài);LineSate用于反映DP、DM線狀態(tài),根據(jù)該信號判斷USB復(fù)位、掛起、恢復(fù)操作;TX/RX表示的信號為數(shù)據(jù)的收發(fā)信號;Data表示使用16 bit的數(shù)據(jù)接口。因此,模塊直接通過USB2.0接口與處理器連接完成與控制器的數(shù)據(jù)交互,其中USB_DP和USB_DM是傳輸?shù)牟罘謹(jǐn)?shù)據(jù)線;開關(guān)機(jī)和復(fù)位引腳連接處理器的GPIO輸出控制;模組提供SIM卡的接口。
圖3 5G移動通信硬件框圖Fig.3 Block diagram of 5G mobile communication hardware
有線和無線網(wǎng)通信的硬件基礎(chǔ)是網(wǎng)卡,網(wǎng)卡主要工作在數(shù)據(jù)鏈路層和物理層,其中數(shù)據(jù)鏈路層提供基于比特流的幀同步、數(shù)據(jù)流的流量控制、網(wǎng)絡(luò)的鏈路控制等功能;物理層提供通信雙方所需的物理信號。
以太網(wǎng)硬件框圖如圖4所示,以太網(wǎng)電路使用RMII接口連接處理器和PHY芯片LAN8720;處理器中數(shù)據(jù)發(fā)送和接收時鐘的頻率為50 MHz,它是通過專用Ethernet PLL倍頻系統(tǒng)時鐘生成的;TXP/TXN和RXP/RXN是兩組差分信號,用來傳輸物理層到數(shù)據(jù)鏈路層的電路信號;TXD和RXD是2 bit數(shù)據(jù)傳輸接口;MDIO總線用于訪問PHY芯片的任意寄存器。
圖4 以太網(wǎng)硬件框圖Fig.4 Block diagram of Ethernet hardware
無線網(wǎng)使用處理器I.MX6ULL內(nèi)部IP核USDHC提供的SDIO接口連接RTL8189模塊,該模塊是集成MAC(Media Access Control)、PHY(Physical)和RF(Radio Frequency)于一體的802.11n無線局域網(wǎng)控制器,時鐘頻率為40 MHz時,傳輸速率最高可達(dá)150 Mbps。
在完成系統(tǒng)硬件設(shè)計(jì)的基礎(chǔ)上,設(shè)計(jì)系統(tǒng)軟件,實(shí)現(xiàn)系統(tǒng)設(shè)計(jì)的目標(biāo)。系統(tǒng)軟件總體架構(gòu)如圖5所示。在系統(tǒng)平臺上移植Uboot引導(dǎo)程序和MPTCP_Linux0.95[14]版本的內(nèi)核,構(gòu)建ubuntu-base根文件系統(tǒng)組成系統(tǒng)的運(yùn)行環(huán)境。設(shè)備驅(qū)動文件的設(shè)計(jì)核心是根據(jù)板級硬件信息,使用Linux系統(tǒng)驅(qū)動框架實(shí)現(xiàn)硬件模塊在系統(tǒng)運(yùn)行環(huán)境中的全功能,為應(yīng)用層提供讀寫數(shù)據(jù)功能。應(yīng)用軟件在用戶空間使用系統(tǒng)API函數(shù)讀寫控制硬件設(shè)備。
圖5 系統(tǒng)軟件總體架構(gòu)圖Fig.5 Diagram of system software structure
嵌入式硬件平臺運(yùn)行Linux系統(tǒng)需要完成Uboot、MPTCP_Linux0.95和ubuntu-base的移植,三者之間的關(guān)系體現(xiàn)在Linux系統(tǒng)啟動的過程:首先硬件上電芯片復(fù)位后,Uboot初始化部分硬件,完成DDR3、外部存儲及以太網(wǎng)口等設(shè)備的初始化,然后加載引導(dǎo)存儲器中的內(nèi)核程序到DDR3中啟動運(yùn)行,Linux內(nèi)核加載過程中會從ubuntu-base根文件系統(tǒng)中加載初始化腳本和服務(wù)程序,最后將根文件系統(tǒng)掛載執(zhí)行相應(yīng)的應(yīng)用程序和系統(tǒng)進(jìn)程。
在系統(tǒng)運(yùn)行時,由于多個網(wǎng)卡接口上定義了不同的IP地址,如果沒有指明路由所屬的表,所有的路由默認(rèn)放在主路由表里,所有網(wǎng)卡都會使用主路由表對應(yīng)的網(wǎng)關(guān)進(jìn)行路由,這不符合MPTCP的實(shí)際應(yīng)用。因此,編寫腳本文件使用ip rule和ip route命令配置路由,為每個網(wǎng)卡接口配置一個路由表,每個路由表有一個數(shù)字標(biāo)識,系統(tǒng)會根據(jù)路由表編號由小到大進(jìn)行檢查,根據(jù)IP匹配對應(yīng)的路由表,使所有網(wǎng)卡符合MPTCP的實(shí)際應(yīng)用。
5G模組RM500Q-GL首先是一個USB設(shè)備,其次是網(wǎng)絡(luò)設(shè)備。USB驅(qū)動是一種分層的總線結(jié)構(gòu),如圖6所示,包括USB設(shè)備驅(qū)動和USB子系統(tǒng)驅(qū)動,其中USB設(shè)備驅(qū)動利用USB Core提供的API完成驅(qū)動的工作,通過管道(pipe)控制USB設(shè)備與主機(jī)控制器之間的通信;USB Core和USB主控制器驅(qū)動(HCD)構(gòu)成USB子系統(tǒng),隱藏了USB協(xié)議和硬件的復(fù)雜性;USB總線將設(shè)備和驅(qū)動關(guān)聯(lián)起來。
圖6 USB驅(qū)動結(jié)構(gòu)示意圖Fig.6 Diagram of USB drive structure
USB驅(qū)動的實(shí)現(xiàn)需要對Linux中USB子系統(tǒng)進(jìn)行修改,實(shí)現(xiàn)與RM500Q-GL的匹配。首先添加設(shè)備供應(yīng)商提供的VID=0X2C7C和PID=0X0800用于識別設(shè)備,加載相應(yīng)的驅(qū)動程序;然后在struct usb_device_id option_ids數(shù)組中添加USB設(shè)備RM500Q-GL;最后增加零包處理機(jī)制,當(dāng)端點(diǎn)傳輸?shù)臄?shù)據(jù)包大小是wMaxPacketSize的整數(shù)倍時,需要發(fā)送一個長度為0的數(shù)據(jù)包結(jié)束這次傳輸。
USB設(shè)備驅(qū)動首先需要注冊usb_driver,然后實(shí)現(xiàn)usb_device_id、probe、disconnect和name等成員變量,其中usb_device_id通過VID和PID匹配USB設(shè)備和驅(qū)動;probe函數(shù)完成設(shè)備的初始化,調(diào)用usbnet_probe函數(shù)將RM500Q-GL設(shè)置為USB網(wǎng)絡(luò)設(shè)備。該驅(qū)動通過usb_control_msg函數(shù)發(fā)送USB的控制信息。
5G模組的網(wǎng)絡(luò)驅(qū)動在usbnet_probe函數(shù)中綁定并初始化usb設(shè)備的網(wǎng)卡接口usbx(x=0,1),并向上層注冊網(wǎng)卡設(shè)備,完成usb網(wǎng)絡(luò)設(shè)備的配置,協(xié)議層就可以通過這個設(shè)備的tx、rx接口發(fā)送和接收數(shù)據(jù)。此外,實(shí)現(xiàn)5G模組撥號上網(wǎng)的功能,需要移植編譯Quectel官方提供的GobiNet驅(qū)動實(shí)現(xiàn)模組的網(wǎng)絡(luò)連接,在Linux系統(tǒng)下5G模組的USB接口被映射成ttyUSB 0-3這四個接口,接口的功能如表1所示。
表1 RM500Q-GL在系統(tǒng)中的接口Tab.1 Interface of RM500Q-GL in the system
DIAG端口用于對網(wǎng)絡(luò)參數(shù)的修改和平臺日志信息的輸出;GNSS是全球?qū)Ш蕉ㄎ幌到y(tǒng);ttyUSB2用于AT命令的交互;Modem端口用于撥號上網(wǎng)。因此,為防止5G模組RM500Q-GL的接口4被用作USB串口設(shè)備,需要在USB驅(qū)動文件中將接口4設(shè)置為USB網(wǎng)絡(luò)接口。
網(wǎng)絡(luò)設(shè)備是用戶數(shù)據(jù)包在網(wǎng)絡(luò)媒介上發(fā)送和接收的設(shè)備。網(wǎng)絡(luò)驅(qū)動架構(gòu)中net_device結(jié)構(gòu)體包含網(wǎng)絡(luò)設(shè)備的屬性描述和操作接口,以太網(wǎng)驅(qū)動的核心就是填充net_device中的具體成員并注冊到Linux內(nèi)核中。網(wǎng)絡(luò)設(shè)備在初始化時首先使用alloc_netdev函數(shù)分配一個net_device結(jié)構(gòu)體,然后配置相關(guān)的寄存器,設(shè)置net_device的結(jié)構(gòu)成員,最后使用register_netdev函數(shù)將net_device注冊到內(nèi)核中。
以太網(wǎng)驅(qū)動程序中發(fā)送流程圖如圖7(a)所示,上層應(yīng)用向驅(qū)動傳入sk_buff結(jié)構(gòu)體指針,接收來自上層傳遞的數(shù)據(jù),使用環(huán)形緩沖區(qū)隊(duì)列保存數(shù)據(jù),如果數(shù)據(jù)發(fā)送隊(duì)列剩余的描述符不足,需要暫停應(yīng)用層向網(wǎng)絡(luò)發(fā)送數(shù)據(jù),并通過硬件中斷將數(shù)據(jù)發(fā)送,直到隊(duì)列中網(wǎng)絡(luò)發(fā)送描述符與中斷處理描述符指向地址相同,則結(jié)束發(fā)送并釋放sk_buff空間給系統(tǒng);接收流程圖如圖7(b)所示,該設(shè)計(jì)中使用中斷和輪詢的方式(NAPI)接收數(shù)據(jù),首先創(chuàng)建sk_buff緩存接收數(shù)據(jù),讀取中斷寄存器的狀態(tài)判斷接收中斷的觸發(fā),通過napi_schedule_prep的返回值判斷NAPI是否可以進(jìn)行調(diào)度,然后啟動NAPI調(diào)度函數(shù),在輪詢調(diào)度函數(shù)中遍歷接收描述符,并將數(shù)據(jù)遞交到協(xié)議棧進(jìn)行處理,直到緩沖區(qū)狀態(tài)為空時停止接收數(shù)據(jù)。
圖7 以太網(wǎng)收發(fā)流程圖Fig.7 Ethernet transceiver flow chart
USB串口是常用的人機(jī)交互接口,串口驅(qū)動的設(shè)計(jì)使用platfrom總線結(jié)構(gòu),主要實(shí)現(xiàn)uart_port和uart_ops兩個結(jié)構(gòu)體中的函數(shù)。uart_port用于描述一個UART的I/O端口或I/O內(nèi)存地址、FIFO大小、端口類型等信息;uart_ops結(jié)構(gòu)體是串口的操作函數(shù)集,包括串口的起始、發(fā)送、接收等函數(shù),其中發(fā)送程序流程如圖8(a)所示,用戶進(jìn)程執(zhí)行寫操作時會觸發(fā)UART的發(fā)送中斷,在中斷處理函數(shù)中循環(huán)將上層驅(qū)動保存在xmit中的數(shù)據(jù)寫入硬件FIFO,直到xmit中數(shù)據(jù)為空,關(guān)閉TX-FIFO中斷;接收程序流程如圖8(b)所示,在驅(qū)動匹配成功后獲取設(shè)備樹的中斷信息,通過寄存器判斷中斷的觸發(fā)信息,接著循環(huán)讀取寄存器中的值,將接收的字符進(jìn)行奇偶校驗(yàn)后存入tty數(shù)據(jù)塊中,等待RX-FIFO中數(shù)據(jù)讀完后將數(shù)據(jù)發(fā)送給tty核心層進(jìn)行數(shù)據(jù)緩存。
圖8 UART收發(fā)流程圖Fig.8 UART transceiver flow chart
完成系統(tǒng)的軟硬件設(shè)計(jì)后,測試系統(tǒng)的可運(yùn)行性,系統(tǒng)實(shí)物連接圖如圖9所示,使用網(wǎng)線將系統(tǒng)平臺連接路由器與PC機(jī)組成局域網(wǎng);選擇中國移動和中國電信的SIM卡插入卡槽,5G模組射頻前端連接4 根天線;系統(tǒng)啟動模式設(shè)置為SD卡啟動,方便調(diào)試;連接USB串口到PC端實(shí)現(xiàn)對系統(tǒng)的控制。
圖9 系統(tǒng)實(shí)物連接圖Fig.9 Physical connection diagram of the system
通過“sysctl-w”命令對系統(tǒng)中MPTCP協(xié)議進(jìn)行配置。如圖10(a)所示,配置項(xiàng)包括:使用MPTCP協(xié)議,打開MPTCP的調(diào)試功能;配置MPTCP協(xié)議的路徑管理算法為全路徑(fullmash)[15],調(diào)度算法為輪詢調(diào)度(roundrobin)[16],擁塞控制算法為Cubic[17];支持重傳次數(shù)為3 次。運(yùn)行mptcp_route.sh腳本文件完成對系統(tǒng)路由表的配置,如圖10(b)所示。
圖10 系統(tǒng)多路徑功能配置Fig.10 System multipath function configuration
為驗(yàn)證本文設(shè)計(jì)的5G多路徑數(shù)據(jù)傳輸系統(tǒng)的性能,在PC端使用FTP協(xié)議將數(shù)據(jù)傳輸?shù)较到y(tǒng),系統(tǒng)接收到數(shù)據(jù)后分別使用一條和兩條5G鏈路將數(shù)據(jù)上傳到云端。測試結(jié)果如圖11所示,在某一運(yùn)營商信號不穩(wěn)定時,使用單條路徑傳輸數(shù)據(jù)的速率僅為1.1 MB/s;而使用兩條運(yùn)營商通信鏈路傳輸?shù)乃俾蕿?.3 MB/s。由此可見,使用兩個不同運(yùn)營商的5G鏈路進(jìn)行數(shù)據(jù)傳輸?shù)乃俾拭黠@高于單條路徑數(shù)據(jù)傳輸?shù)乃俾省?/p>
圖11 系統(tǒng)單路徑和多路徑數(shù)據(jù)傳輸Fig.11 System single path and multipath data transmission
為了進(jìn)一步驗(yàn)證5G多路徑數(shù)據(jù)傳輸系統(tǒng)可以有效實(shí)現(xiàn)帶寬聚合,使用單路徑和多路徑分別上傳10—150 MB的文件到云端,測試后的數(shù)據(jù)如圖12所示,在傳輸不同大小的文件時,使用雙路徑傳輸?shù)乃俾史€(wěn)定在2.3 MB/s左右,單路徑傳輸速率的速率穩(wěn)定在1.2 MB/s左右,相較于使用單條5G鏈路,5G多路徑數(shù)據(jù)傳輸系統(tǒng)實(shí)現(xiàn)了穩(wěn)定的帶寬聚合,驗(yàn)證了本文提出的MPTCP與5G技術(shù)相結(jié)合的多路徑傳輸方案能夠提高5G在特殊應(yīng)用場景中的傳輸帶寬、連接魯棒性及網(wǎng)絡(luò)服務(wù)質(zhì)量。
圖12 單路徑與多路徑數(shù)據(jù)傳輸對比圖Fig.12 Comparison between single path and multipath data transmission
本文提出使用MPTCP協(xié)議與5G技術(shù)相結(jié)合的方案,并完成了5G多路徑數(shù)據(jù)傳輸系統(tǒng)的設(shè)計(jì)。該系統(tǒng)實(shí)現(xiàn)將接收到的數(shù)據(jù)使用不同運(yùn)營商SIM卡的5G鏈路發(fā)送到云端,實(shí)現(xiàn)多條5G通信鏈路帶寬聚合。經(jīng)過測試驗(yàn)證,本文設(shè)計(jì)的5G多路徑數(shù)據(jù)傳輸系統(tǒng)在某一運(yùn)營商5G信號不穩(wěn)定情況下可以顯著提高5G在特殊應(yīng)用場景中的傳輸帶寬、連接魯棒性及網(wǎng)絡(luò)服務(wù)質(zhì)量。