林彥廷,師文慶
(廣東海洋大學(xué) 電子與信息工程學(xué)院,湛江 524088)
汽車,是人們?nèi)粘I钪械某S么焦ぞ咧?,也將是我國一個新的家庭消費(fèi)熱點(diǎn),汽車的潛在市場、經(jīng)濟(jì)利益巨大[1]。隨著國內(nèi)汽車使用量增加,汽車電子在未來汽車產(chǎn)業(yè)中的地位越來越重要,近年來最為突出的是智能車載系統(tǒng),隨著人工智能進(jìn)入人類視野,人們對于無人駕駛車載系統(tǒng)越發(fā)感興趣,對智能車載系統(tǒng)的各種需求也會大大增加,就像當(dāng)年智能手機(jī)一樣,逐漸融入人們的生活。對于人們的生活來說,汽車早已不再滿足于一種單一的交通工具,汽車的數(shù)字化、多媒體化、多功能化、智能化將是未來汽車電子產(chǎn)品的必然趨勢,汽車導(dǎo)航、多媒體功能以及網(wǎng)絡(luò)通信系統(tǒng)成為未來汽車的必備[2]。隨著物聯(lián)網(wǎng)等互聯(lián)技術(shù)在汽車領(lǐng)域的發(fā)展及應(yīng)用,智能汽車及智能車載系統(tǒng)已經(jīng)是一個重要的研究方向[3]。為此,文中提出了基于嵌入式的智能車載多媒體控制終端設(shè)計,基于安全、實(shí)用、娛樂理念設(shè)計了4項功能:①可視化倒車?yán)走_(dá)報警;②天氣預(yù)報;③音樂播放器;④系統(tǒng)硬件控制。
目前,電子信息技術(shù)飛速發(fā)展,出現(xiàn)一些處理能力強(qiáng)、外設(shè)接口豐富的處理器芯片,比如ARM架構(gòu)系列處理器,為開發(fā)多功能的車載終端提供了硬件技術(shù)基礎(chǔ)[4]。此外,由于Linux操作系統(tǒng)的開源性,每年開發(fā)人員的大量投入,平臺日漸成熟穩(wěn)定,且所支持的外設(shè)驅(qū)動豐富,被高端消費(fèi)電子產(chǎn)品廣泛應(yīng)用,也為該終端的設(shè)計開發(fā)提供了強(qiáng)大的軟件系統(tǒng)支撐。
按照所設(shè)計的車載多媒體控制終端的需求分析以及現(xiàn)有材料,采用S5P681處理器為核心板,應(yīng)用軟件運(yùn)行以嵌入式Linux為平臺為主,基于Cortex-A53和Linux嵌入式技術(shù),通過LCD觸摸屏實(shí)現(xiàn)音頻播放終端控制、可視倒車、倒車距離實(shí)時報警、實(shí)時天氣預(yù)報等,使用方便,交互界面清晰簡潔。
在智能車載多媒體控制終端的設(shè)計方案中,智能多媒體車載控制終端的硬件平臺主要以ARM處理器為主,由S5P6818處理器核心板、超聲波模塊、攝像頭模塊和LCD觸摸屏人機(jī)交互模塊等部分組成,系統(tǒng)硬件結(jié)構(gòu)如圖1所示。各模塊與Linux系統(tǒng)構(gòu)成了完整的智能多媒體控制終端。模塊完成功能,Linux系統(tǒng)進(jìn)行調(diào)度。
圖1 智能多媒體車載控制終端的系統(tǒng)結(jié)構(gòu)Fig.1 System structure of intelligent multimedia on-board control terminal
不同嵌入式系統(tǒng)的開發(fā)有自身不同的的開發(fā)特點(diǎn),從而構(gòu)成嵌入式系統(tǒng)的多樣性和復(fù)雜性。嵌入式系統(tǒng)是面向特定應(yīng)用的系統(tǒng),一般先進(jìn)行硬件功能的開發(fā),再根據(jù)設(shè)計需求分析移植對應(yīng)操作系統(tǒng),最后對底層的硬件驅(qū)動程序進(jìn)行設(shè)計。設(shè)計中首先構(gòu)建嵌入式操作系統(tǒng),在64位Cortex-A53平臺上構(gòu)建起完整的嵌入式開發(fā)系統(tǒng),在此基礎(chǔ)上進(jìn)行音頻、攝像頭等各個模塊的開發(fā)設(shè)計,通過交叉編譯,生成可應(yīng)用軟件,然后應(yīng)用在ARM平臺上,通過Linux系統(tǒng)進(jìn)行調(diào)度[5]。
嵌入式操作系統(tǒng)的嵌入式開發(fā)的高效率,不僅僅體現(xiàn)在減少了系統(tǒng)的開發(fā)工作量,還體現(xiàn)在系統(tǒng)合理地調(diào)度多任務(wù),合理利用系統(tǒng)資源、系統(tǒng)函數(shù)以及接口,提高嵌入式軟件的可移植性。嵌入式Linux系統(tǒng)是一個完全內(nèi)存保護(hù)、多任務(wù)、多線程的操作系統(tǒng),是完成開源的,可以減少大量開發(fā)費(fèi)用[6],同時也促進(jìn)了促進(jìn)了嵌入式的發(fā)展。
嵌入式Linux系統(tǒng)從軟件的角度一般分為以下四方面:
1)Bootloader Bootloader啟動引動程序,是系統(tǒng)啟動加載的第一段匯編代碼,主要負(fù)責(zé)系統(tǒng)硬件的初始化,引導(dǎo)并加載Linux內(nèi)核參數(shù),最后根據(jù)參數(shù)啟動Linux內(nèi)核。
2)Linux內(nèi)核 Linux內(nèi)核面向不同的場景,在不同嵌入式系統(tǒng)設(shè)計中會對內(nèi)核進(jìn)行裁剪、定制和移植,制作適合用戶需要的嵌入式內(nèi)核,包括內(nèi)存管理、進(jìn)程管理、虛擬文件系統(tǒng)等。
8.請附作者簡介,包括姓名(使用筆名者請附真實(shí)姓名),出生年月,性別,民族(漢族可省略),籍貫,職稱,學(xué)位,簡歷及論著情況(任選),工作單位,通訊地址,聯(lián)系電話,郵政編碼。
3)根文件系統(tǒng) Linux系統(tǒng)的宗旨是“一切皆文件”,根文件系統(tǒng)就是Linux掛載在虛擬文件系統(tǒng)的第1個文件系統(tǒng),根文件系統(tǒng)和Linux內(nèi)核配合使用,建立在動態(tài)隨機(jī)存儲器上的根文件系統(tǒng)和建立在Flash設(shè)備上的文件系統(tǒng),通常用動態(tài)隨機(jī)存儲器上的文件系統(tǒng)為根文件系統(tǒng)[7]。
4)用戶應(yīng)用程序 應(yīng)用程序、Linux系統(tǒng)和硬件平臺之間的關(guān)系如圖2所示。Linux驅(qū)動的設(shè)計大大降低了應(yīng)用層和硬件平臺之間的耦合度,應(yīng)用軟件只需調(diào)用系統(tǒng)提供的接口即可控制硬件,無需關(guān)心硬件如何工作,大大提高了應(yīng)用程序的可移植性以及開發(fā)人員的開發(fā)效率。
圖2 系統(tǒng)關(guān)系邏輯Fig.2 Logical diagram of system
應(yīng)用軟件設(shè)計的基本過程如圖3所示。由車載系統(tǒng)智能終端的需求分析以及設(shè)計總體框架開始,到系統(tǒng)移植、各模塊的集成,再到功能模塊測試階段,最后完成設(shè)計。
圖3 應(yīng)用軟件設(shè)計的基本過程Fig.3 Brief process of APP design
雖然Linux系統(tǒng)自帶Media Player播放器,但由于系統(tǒng)自帶的播放軟件所支持的多媒體格式非常有限,所以在程序設(shè)計時,移植了第三方多媒體播放軟件Mplayer[8]。音頻播放器設(shè)計原理如圖4所示。Mplayer一大特點(diǎn)是支持廣泛的輸出設(shè)備。設(shè)計中最重要的是MPlayer還支持通過硬件MPEG解碼卡顯示。
圖4 音視頻軟件模塊工作流程Fig.4 Flow chart of audiovisual software modules
該軟件模塊的工作流程如圖5所示。這一模塊主要分為攝像頭采集一幀一幀的圖片數(shù)據(jù)和超聲波的測量距離顯示到LCD屏上,提醒用戶。用戶空間要控制這2個硬件模塊需要對其設(shè)計相應(yīng)的驅(qū)動程序,如超聲波驅(qū)動、蜂鳴器驅(qū)動和攝像頭驅(qū)動等。當(dāng)超聲波測出的距離小于設(shè)定的距離,LCD屏上開始顯示距離,同時蜂鳴器報警。
圖5 可視化倒車工作流程Fig.5 Flow chart of visualized backing off
設(shè)計中集成了LED驅(qū)動模塊、蜂鳴器驅(qū)動模塊、超聲波驅(qū)動模塊。在此,以超聲波模塊的設(shè)計為例,給出其驅(qū)動程序的設(shè)計流程?;谇度胧较到y(tǒng)的應(yīng)用程序開發(fā),如圖2所示,應(yīng)用程序不能直接訪問硬件,故設(shè)計了驅(qū)動程序,以此作為中間橋梁,給應(yīng)用層提供訪問硬件的接口,通過驅(qū)動程序來對系統(tǒng)內(nèi)核訪問硬件寄存器從而達(dá)到控制硬件的效果。
超聲波模塊驅(qū)動程序的編寫以及設(shè)計使用混在設(shè)備驅(qū)動模型,大致流程如下:
1)定義文件操作集file_operations和混雜設(shè)備miscdevice,將文件操作集放到混雜設(shè)備中。
3)編寫文件操作集file_operations里面各個函數(shù)指針?biāo)傅木唧w函數(shù)如 read,write,ioctl,等,即為系統(tǒng)調(diào)用接口函數(shù)。
同樣地,由于Linux系統(tǒng)集成了攝像頭的驅(qū)動,應(yīng)用程序只要通過系統(tǒng)調(diào)用函數(shù)打開攝像頭設(shè)備,即可訪問攝像頭采集的圖像數(shù)據(jù)。Linux內(nèi)核中采用V4L2的機(jī)制來管理攝像頭圖像信息。V4L2的運(yùn)行原理如圖6所示,通過完成1個隊列來存儲攝像頭采集到的視頻數(shù)據(jù),申請3個或者3個以上內(nèi)核數(shù)據(jù)緩存,并將它們依次插入到隊列中,然后將緩存區(qū)通過系統(tǒng)調(diào)用函數(shù)mmap將緩存映射到用戶空間,這樣就可以采集圖像數(shù)據(jù)并進(jìn)行操作或顯示,攝像頭每采集1幀數(shù)據(jù)就做1個出隊操作,讀取數(shù)據(jù)后再入隊,如此循環(huán)往復(fù)[10]。
圖6 攝像頭的V4L2的運(yùn)行原理Fig.6 Operation principle of V4L2 of camera
天氣查詢Api是一個HTTP接口的簡單應(yīng)用,根據(jù)請求輸入的報文頭信息,查詢當(dāng)前/未來的天氣狀況,服務(wù)器會返回Json數(shù)據(jù),在程序中對其進(jìn)行解析出天氣數(shù)據(jù),從而應(yīng)用自己編寫的程序中,獲得的實(shí)際效果如圖7所示。天氣預(yù)報模塊的工作流程如圖8所示。
1)購買天氣預(yù)報查詢接口Api,在此為阿里云全國天氣預(yù)報查詢(免費(fèi)版)Api;
2)應(yīng)用Qt中的QNetwork類實(shí)現(xiàn)http獲取實(shí)時天氣預(yù)報;
3)發(fā)送請求,請求方式為GET;
netrequest->setUrl (QUrl("http://jisutqybmf.market.alicloudapi.com/weather/query?city="+city));
netrequest->setHeader (QNetworkRequest::UserAgentHeader,"RT-Thread ART");
httpManager->get(*netrequest);
4)返回類型為Json數(shù)據(jù),并對Json數(shù)據(jù)進(jìn)行解析。
圖7 天氣預(yù)報的實(shí)際效果Fig.7 Visual effect of weather forecast program
圖8 網(wǎng)絡(luò)實(shí)時獲取天氣預(yù)報工作流程Fig.8 Flow chart of obtaining weather forecasts in real-time from the web
所設(shè)計的基于嵌入式Linux系統(tǒng)的車載終端控制系統(tǒng),自動掃描U盤中MP3文件進(jìn)行音頻播放,可控制LED燈和蜂鳴器,可通過http協(xié)議訪問實(shí)時天氣預(yù)報,利用攝像頭和超聲波模塊實(shí)現(xiàn)可視倒車及倒車距離報警等功能,實(shí)現(xiàn)了集娛樂、安全、網(wǎng)絡(luò)為一體的智能車載多媒體終端控制系統(tǒng)。