于合龍,李 丹,馬 麗
(吉林農(nóng)業(yè)大學(xué) 信息技術(shù)學(xué)院,吉林 長春 130118)
車載信息安全系統(tǒng)中CAN中繼器的設(shè)計(jì)與實(shí)現(xiàn)
于合龍,李丹,馬麗
(吉林農(nóng)業(yè)大學(xué) 信息技術(shù)學(xué)院,吉林 長春130118)
針對汽車OBD接口存在的安全隱患,設(shè)計(jì)了以i.MX6系列處理器為核心,通過其串行外設(shè)接口,利用MCP2515CAN控制器接入CAN總線的車載信息安全中繼器。在分析 Linux設(shè)備驅(qū)動(dòng)程序工作原理的基礎(chǔ)上,闡述了CAN接口在Linux系統(tǒng)下的驅(qū)動(dòng)程序設(shè)計(jì)方法,實(shí)現(xiàn)了CAN接口在Linux系統(tǒng)下的驅(qū)動(dòng),解決了汽車CAN總線的中繼問題。通過在Linux系統(tǒng)中添加ISO15031協(xié)議過濾器,實(shí)現(xiàn)了非法指令過濾,為車載信息在CAN總線上的傳輸提供了一層保護(hù)屏障。
CAN;信息安全;驅(qū)動(dòng)程序;中繼器
CAN(Controller Area Network,控制器區(qū)域網(wǎng)絡(luò))總線廣泛地應(yīng)用于汽車上,主要用來實(shí)現(xiàn)車載網(wǎng)絡(luò)各個(gè)電控單元之間的信息交換,形成車載網(wǎng)絡(luò)系統(tǒng)。利用CAN總線、傳感器、控制器和執(zhí)行器通過串行數(shù)據(jù)線連接起來[1-2]。
OBD(On-Board Diagnostic)接口作為車載監(jiān)控系統(tǒng)的通信接口,通過CAN總線接入車載系統(tǒng)。OBD接口除了讀取故障碼以供修車外,首要的功能是提供車輛的各種工況數(shù)據(jù)。利用汽車OBD接口與汽車ECU通過CANBUS協(xié)議通信,就可以達(dá)到控制汽車某些部件的目的。為了消除此安全隱患,需要在OBD接口與CAN總線之間接入能夠保證信息安全的CAN中繼器,實(shí)現(xiàn)信息可靠傳輸與非法指令過濾。目前CAN中繼器的設(shè)計(jì)大多是MCU加控制器來實(shí)現(xiàn)的。例如文獻(xiàn)[3]中利用雙MCU實(shí)現(xiàn)CAN總線中繼器,文獻(xiàn)[4-5]中利用雙口RAM實(shí)現(xiàn)雙機(jī)系統(tǒng)的通信,文獻(xiàn)[6]中通過獨(dú)立雙CAN設(shè)計(jì)CAN中繼器等,在這些方案中,不僅電路冗余復(fù)雜,同時(shí)在MCU與CAN控制器交換數(shù)據(jù)時(shí)存在數(shù)據(jù)交換速度慢,準(zhǔn)確性低等問題,而且沒有相應(yīng)系統(tǒng)的支撐,僅憑借獨(dú)立的硬件設(shè)備,很難保證車載信息傳輸安全。
基于上述分析,本文提出車載信息安全系統(tǒng)中繼器的設(shè)計(jì)方案。此中繼器一端通過CAN接口與OBD相連接,另一端通過CAN接口與CAN總線相連接。當(dāng)中繼器接收到來自O(shè)BD接口發(fā)送的指令后,經(jīng)過指令判斷與過濾,確定指令是否可以轉(zhuǎn)發(fā)到CAN總線上。本文完成了此中繼器在嵌入式Linux系統(tǒng)下的驅(qū)動(dòng)和中繼,并加入ISO15031汽車指令集過濾器,通過嵌入式Linux系統(tǒng)自身的安全屬性以及指令過濾增強(qiáng)了整個(gè)CAN總線系統(tǒng)的安全性。
本文采用i.MX6Quad處理器,該處理器是基于Cortex-A9內(nèi)核的四核處理器,帶有1 MB L2緩存和64 b DDR3和2通道、支持32 b LPDDR2。
硬件結(jié)構(gòu)圖包含五個(gè)組成部分,如圖1所示。
圖1 硬件結(jié)構(gòu)圖
其中:系統(tǒng)控制部分由鎖相環(huán)、振蕩器、時(shí)鐘與復(fù)位電路、看門狗、定時(shí)器等組成;電源管理部分由電源模塊和濕度監(jiān)測儀組成;程序燒寫模塊采用NorFlash,便于進(jìn)行撥碼燒寫;兩個(gè)CAN接口的設(shè)計(jì)借助了參考文獻(xiàn)[7]中提到的問題和解決方法。具體設(shè)計(jì)如圖2所示。
圖2 CAN接口
為了保證中繼器工作可靠,采用隔離型的DC/DC變換器[7]。對于CAN終端電阻使用分裂終端的方式,利用兩個(gè)30 Ω電阻匹配屏蔽雙絞線的60 Ω特性阻抗[8]。CAN控制器選擇了基于SPI控制器的MCP2515。
指示燈部分共使用了7個(gè)LED燈,1個(gè)燈用于上電指示,4個(gè)燈用于兩路CAN接口的接收和發(fā)送指示燈,2個(gè)燈用于兩路CAN通信故障指示。
2.1CAN接口驅(qū)動(dòng)程序設(shè)計(jì)
CAN總線驅(qū)動(dòng)程序的設(shè)計(jì)以Linux系統(tǒng)為開發(fā)平臺,通過字符設(shè)備驅(qū)動(dòng)的方式實(shí)現(xiàn)驅(qū)動(dòng)程序的設(shè)計(jì)。
根據(jù)硬件設(shè)計(jì)圖,MCP2515通過SPI的形式接入內(nèi)核,通過向Linux內(nèi)核添加SPI驅(qū)動(dòng)對MCP2515進(jìn)行驅(qū)動(dòng)。在Linux 3.0.35的內(nèi)核中,SPI的驅(qū)動(dòng)架構(gòu)可以分為如下三個(gè)層次:SPI核心層、SPI控制器驅(qū)動(dòng)層和SPI設(shè)備驅(qū)動(dòng)層。具體驅(qū)動(dòng)的結(jié)構(gòu)圖如圖3所示。
Linux中SPI驅(qū)動(dòng)代碼位于drivers/spi/spi.c目錄。SPI核心層是Linux的SPI核心部分,提供了核心數(shù)據(jù)結(jié)構(gòu)的定義、SPI控制器驅(qū)動(dòng)和設(shè)備驅(qū)動(dòng)的注冊、注銷管理等API。SPI控制器驅(qū)動(dòng)層屬于平臺移植相關(guān)層。它的職責(zé)是為系統(tǒng)中每條SPI總線實(shí)現(xiàn)相應(yīng)的讀寫方法[9-10]。SPI設(shè)備驅(qū)動(dòng)層為用戶接口層,其為用戶提供了通過SPI總線訪問具體設(shè)備的接口。寫驅(qū)動(dòng)程序時(shí)首先要向Linux內(nèi)核注冊設(shè)備,注冊完成后,執(zhí)行make menuconfig配置內(nèi)核選項(xiàng),然后再編譯內(nèi)核,最后通過Mini USB接口將編譯好的內(nèi)核、文件系統(tǒng)一起燒寫到集成的模塊中。
圖3 SPI驅(qū)動(dòng)結(jié)構(gòu)圖
2.2CAN數(shù)據(jù)中繼原理及程序設(shè)計(jì)
CAN中繼的主要作用是對接收到的CAN報(bào)文進(jìn)行過濾轉(zhuǎn)發(fā)。中繼器的工作流程為:中繼器上電時(shí)通過讀取波特率設(shè)置電路和ID設(shè)置電路的狀態(tài),設(shè)置好波特率和ID值。初始化完成后,iMX6Q通過監(jiān)聽兩個(gè)CAN接口的中斷完成數(shù)據(jù)的存儲轉(zhuǎn)發(fā)。當(dāng)CAN接口A收到總線上的數(shù)據(jù)包時(shí)產(chǎn)生中斷,中斷處理程序根據(jù)標(biāo)準(zhǔn)標(biāo)識符和擴(kuò)展標(biāo)識符判斷該數(shù)據(jù)包是標(biāo)準(zhǔn)幀還是擴(kuò)展幀,同時(shí)將該ID值和ID過濾表中的值進(jìn)行對比,若符合過濾條件則不轉(zhuǎn)發(fā),否則將數(shù)據(jù)包通過CAN接口B轉(zhuǎn)發(fā)出去[11-12]。
根據(jù)本文需要,要求保證車載信息安全,需要結(jié)合ISO1503汽車故障診斷協(xié)議,實(shí)現(xiàn)協(xié)議過濾器功能。ISO1503協(xié)議內(nèi)容有9種模式[13],I協(xié)議過濾器根據(jù)這9種模式列出所有合法指令集,如果接收的指令匹配指令集,允許指令通過,否則丟棄。
根據(jù)上文完成兩個(gè)CAN接口的驅(qū)動(dòng),在此只需實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)發(fā)和過濾,由于此設(shè)備是用于汽車CAN總線上,防止黑客通過OBD接口使用非法指令對汽車進(jìn)行攻擊,因此結(jié)合汽車OBD指令集協(xié)議ISO15031完成指令集的過濾。具體數(shù)據(jù)中繼實(shí)現(xiàn)流程如圖4所示。
圖4 數(shù)據(jù)中繼程序設(shè)計(jì)流程圖
對于數(shù)據(jù)轉(zhuǎn)發(fā)的處理過程,通常采用環(huán)形緩沖區(qū)的方式來實(shí)現(xiàn)。在參考文獻(xiàn)[9]中提出關(guān)于環(huán)形緩沖器的問題:讀和寫在移動(dòng)尾指針時(shí)均需進(jìn)行“折行處理 ”(即當(dāng)指針指到緩沖區(qū)內(nèi)存的末尾時(shí),需重新將其定向到緩沖區(qū)的首地址),環(huán)形緩沖區(qū)的執(zhí)行效率并不高[14]。為此,本文根據(jù)i.MX6Quad處理器的特點(diǎn)(自帶32 KB的數(shù)據(jù)緩沖區(qū)域),對環(huán)形緩沖區(qū)做了改進(jìn),同時(shí)為了增強(qiáng)CAN總線的通信能力,提高通信效率。具體做法為:
(1)在緩沖區(qū)域開辟兩個(gè)4 KB的環(huán)形數(shù)據(jù)緩沖區(qū),采用雙FIFO的緩沖機(jī)制,在主監(jiān)控程序的監(jiān)控下對兩路緩沖區(qū)進(jìn)行監(jiān)控。
(2)當(dāng)主監(jiān)控程序檢測到CAN接口有信息傳輸時(shí),此CAN接口產(chǎn)生中斷,兩路CAN數(shù)據(jù)通過中斷的方式將接收到的報(bào)文通過標(biāo)識符的比較,放入各自對應(yīng)的環(huán)形緩沖區(qū)。
(3)轉(zhuǎn)發(fā)進(jìn)程通過判斷比較緩沖區(qū)的狀態(tài)標(biāo)識符決定轉(zhuǎn)發(fā)的端口[15],將接收到的指令與配置文件ISO15031協(xié)議中的指令集進(jìn)行匹配,決定數(shù)據(jù)轉(zhuǎn)發(fā)或過濾,保證車載指令的安全。
本文設(shè)計(jì)的測試板如圖5所示。
圖5 CAN中繼器測試板
采用千目電子公司的USB轉(zhuǎn)CAN接口卡對系統(tǒng)進(jìn)行測試驗(yàn)證。CAN總線的通信速率最高為1 Mb/s,本系統(tǒng)遵循CAN 2.0A技術(shù)規(guī)范,仲裁域采用11 b標(biāo)識符,再加上64 b的數(shù)據(jù)域、控制域、CRC域等,每幀數(shù)據(jù)幀的長度為110 b左右[16]。為了確定本實(shí)驗(yàn)調(diào)試的通信速率,首先找到汽車CAN總線接口,使用示波器測出CAN總線的波特率為125 Kb/s。
3.1中繼測試
CAN總線的傳輸距離與波特率有關(guān),傳輸距離與波特率成反比,波特率越高,傳輸距離越短。根據(jù)上述測出的CAN總線波特率為125 Kb/s,傳輸距離可在0~530 m之間。由于本實(shí)驗(yàn)設(shè)備直接與CAN總線相連,實(shí)驗(yàn)測試中將實(shí)驗(yàn)距離設(shè)為1.5 m。中繼測試實(shí)驗(yàn)中將兩個(gè)CAN子網(wǎng)波特率設(shè)置為125 Kb/s,通過手動(dòng)以及自動(dòng)定時(shí)兩種向中繼器一端發(fā)送數(shù)據(jù),觀察中繼器能否正常工作,且雙向通信是否均不丟幀。先由CAN1接口向CAN2接口發(fā)送標(biāo)準(zhǔn)幀07 DF 01 02 03,然后由CAN2接口向CAN1接口發(fā)送相同的標(biāo)準(zhǔn)幀。經(jīng)過反復(fù)測試,抽取其中一次CAN2接口實(shí)驗(yàn)結(jié)果,CAN2接口實(shí)驗(yàn)結(jié)果如圖6所示??梢钥闯?,CAN2接口既可以接收到數(shù)據(jù),也可以發(fā)送數(shù)據(jù),幀計(jì)數(shù)順序依次遞增,沒有出現(xiàn)丟幀現(xiàn)象。
圖6 CAN總線調(diào)試工具終端接收界面圖
3.2安全測試
在中繼測試的基礎(chǔ)上又進(jìn)一步做了多次安全測試,安全測試與上述中繼實(shí)驗(yàn)的不同之處在于將07 DF 01 02 03標(biāo)準(zhǔn)數(shù)據(jù)幀變?yōu)?2 00 aa aa aa數(shù)據(jù)幀(非法數(shù)據(jù)幀)以及其他多種非法數(shù)據(jù)幀,實(shí)驗(yàn)結(jié)果為:當(dāng)CAN1接口成功向CAN1接口發(fā)送數(shù)據(jù)幀時(shí),CAN2接口沒有接收到數(shù)據(jù);同樣當(dāng)CAN2接口向CAN1接口發(fā)送數(shù)據(jù)幀時(shí),CAN1接口也沒有收到數(shù)據(jù)。查看中繼器中的非法數(shù)據(jù)日志文件,里面記錄了發(fā)送的各種非法數(shù)據(jù)幀信息。實(shí)驗(yàn)結(jié)果表明CAN中繼器能夠過濾掉非法指令。
本文基于信息傳輸在OBD接口上存在的安全問題,采用i.MX6Quad處理器方案實(shí)現(xiàn)CAN中繼器。同時(shí)實(shí)現(xiàn)了在Linux系統(tǒng)下CAN的接口驅(qū)動(dòng),完成了車載CAN總線中繼,使其性能和效率得到了很大提高;通過將Linux系統(tǒng)移植到硬件平臺上,在Linux系統(tǒng)中植入ISO15031汽車指令集過濾器,使得系統(tǒng)的安全性能得到提升?;诒痉桨搁_發(fā)的CAN中繼器通過了車載系統(tǒng)的安全測試,達(dá)到了預(yù)期的效果。
[1]黎永健,趙祚喜.汽車CAN總線概述及其故障診斷檢測方法[J].應(yīng)用科學(xué),2010(2):119-120.
[2]REGT H D.車載網(wǎng)絡(luò)讓汽車駛上安全、舒適、環(huán)保的快車道[J].世界電子元器件,2007(12):27-29.
[3]邱鐵,劉曉艷,徐子川.雙MCU的CAN總線中繼器設(shè)計(jì)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2008(9):71-73.
[4]王剛.利用雙口RAM實(shí)現(xiàn)雙機(jī)系統(tǒng)的通信[J].計(jì)算機(jī)與數(shù)字工程,2008(1):123-124.
[5]史久根,張培仁,陳真勇.CAN現(xiàn)場總線系統(tǒng)設(shè)計(jì)技術(shù)[M].北京:國防工業(yè)出版社,2004.
[6]艾萱.基于獨(dú)立雙CAN控制器的中繼器設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2007,30(21):9-11.
[7]莫瓊?cè)A.基于STM32F105的CAN總線中繼器的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù),2011(3):25-26.
[8]王繼國,吉吟東,孫新亞.CAN總線控制器MCP2515的原理及應(yīng)用[J].電測與儀表,2004,41(1):52-56.
[9]戴敏,曹杰.基于ARM的單芯片CAN總線中繼器設(shè)計(jì)[J].測控技術(shù),2010(5):64-68.
[10]THOMPSON H A,BENITEZ-PEREZ H,LEE D,et al.ACANbus-based safety-critical distributed earoengine control systems architecture demonstrator[J].Microprocessors and microsystems,1999,23(6):345-355.
[11]曾祥文,宋樹祥,賓相邦.嵌入式Linux下波特率自適應(yīng)的CAN總線驅(qū)動(dòng)的實(shí)現(xiàn)[J].測控技術(shù),2015(8):104-107.
[12]朱振濤.基于ARM9的智能車載信息系統(tǒng)研究[D].秦皇島:燕山大學(xué),2007.
[13]劉仁峰.基于PCI總線的嵌入式設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)與研究[D].武漢:華中科技大學(xué),2004.
[14]楊峰,吉吟東,薛明.CAN通信卡的Linux設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2002(1):52-55.
[15]BAEK S H,JANG J W.Implementation of integrated OBD-II connector withexternal network[J].Informationsystems,2014,50:69-75.
[16]王宏亮,田帥帥.基于C8051F060單片機(jī)SPI接口的CAN中繼器設(shè)計(jì)[J].火炮發(fā)射與控制學(xué)報(bào),2011(2):74-77.
Design and implementation of CAN repeater in vehicle-mounted information security system
YU Helong,LI Dan,MA Li
(College of Information Technology,Jilin Agricultural University,Changchun 130118,China)
Aiming at the potential safety hazard of the car on-board diagnostic(OBD)interface,a vehicle-mounted information safety repeater was designed,which takes i.MX6 series processor as the core,and uses the MCP2515 CAN controller to access into CAN bus through its serial peripheral interface.On the basis of analyzing the working principle of the Linux device driver,the driver design method of CAN interface under Linux system is expounded.The drive of CAN interface under Linux system was implemented,and the relaying problem of vehicle-mounted CAN bus was solved.The iso15031 protocol filter is added into Linux system to filter the illegal instructions,and provide a protective screening for transmitting the vehicle-mounted information through CAN bus.
CAN;information safety;driver;repeater
TN92-34
A
1004-373X(2016)17-0120-04
10.16652/j.issn.1004-373x.2016.17.030
2015-11-27
于合龍(1974—),男,博士研究生,教授。研究方向?yàn)榍度胧较到y(tǒng)。李丹(1988—),女,在讀碩士。研究方向?yàn)榍度胧较到y(tǒng)。馬麗(1980—),女,在讀博士生,副教授。研究方向?yàn)橛?jì)算機(jī)網(wǎng)絡(luò)。