版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第1章嵌入式Linux系統(tǒng)概述第1章嵌入式Linux系統(tǒng)概述
1.1嵌入式系統(tǒng)概述嵌入式系統(tǒng)概述隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展和嵌入式微處理器的出現(xiàn),計(jì)算機(jī)應(yīng)用出現(xiàn)了歷史性的變化,并逐漸形成了計(jì)算機(jī)系統(tǒng)的兩大分支:通用計(jì)算機(jī)系統(tǒng)和嵌入式計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)早期曾被稱為嵌入式計(jì)算機(jī)系統(tǒng)或隱藏式計(jì)算機(jī),隨著半導(dǎo)體技術(shù)及微電子技術(shù)的快速發(fā)展,嵌入式系統(tǒng)得以風(fēng)靡式發(fā)展,性能不斷提高,以致出現(xiàn)一種觀點(diǎn),即嵌入式系統(tǒng)通常是基于32位微處理器設(shè)計(jì)的,往往帶操作系統(tǒng),本質(zhì)上是瞄準(zhǔn)高端領(lǐng)域和應(yīng)用的。然而隨著嵌入式系統(tǒng)應(yīng)用的普及,這種高端應(yīng)用系統(tǒng)和之前廣泛存在的單片機(jī)系統(tǒng)間的本質(zhì)聯(lián)系,使嵌入式系統(tǒng)與單片機(jī)毫無疑問地聯(lián)系在了一起。1.1.1嵌入式系統(tǒng)概述嵌入式系統(tǒng)概述嵌入式系統(tǒng)是先進(jìn)的計(jì)算機(jī)技術(shù)、半導(dǎo)體技術(shù)和電子技術(shù)與各個(gè)行業(yè)的具體應(yīng)用相結(jié)合的產(chǎn)物,這決定了它是技術(shù)密集、資金密集、知識高度分散、不斷創(chuàng)新的集成系統(tǒng)。同時(shí),嵌入式系統(tǒng)又是針對特定的應(yīng)用需求而設(shè)計(jì)的專用計(jì)算機(jī)系統(tǒng),這也決定了它必然有自己的特點(diǎn)。不同嵌入式系統(tǒng)的具有一定差異,一般來說,嵌入式系統(tǒng)有以下特點(diǎn):(1)軟/硬件資源有限。過去只在個(gè)人計(jì)算機(jī)PC中安裝的軟件現(xiàn)在也出現(xiàn)在復(fù)雜的嵌入式系統(tǒng)中。(2)集成度高、可靠性高、功耗低。(3)有較長的生命周期。嵌入式系統(tǒng)通常與所嵌入的宿主設(shè)備具有相同的使用壽命。(4)軟件程序存儲(固化)在存儲芯片上,開發(fā)者通常無法改變。(5)嵌入式系統(tǒng)是計(jì)算機(jī)技術(shù)、半導(dǎo)體技術(shù)、電子技術(shù)和各個(gè)行業(yè)的應(yīng)用相結(jié)合的產(chǎn)物。(6)一般來說,嵌入式系統(tǒng)并非總是獨(dú)立的設(shè)備,而是作為某個(gè)更大型計(jì)算機(jī)系統(tǒng)的輔助系統(tǒng)。(7)嵌入式系統(tǒng)通常都與真實(shí)物理環(huán)境相連,并且是激勵系統(tǒng)。激勵系統(tǒng)處在某一狀態(tài),并且等待著輸入或激發(fā)信號,從而完成計(jì)算并輸出更新的狀態(tài)。1.1.1嵌入式系統(tǒng)概述
嵌入式系統(tǒng)的特點(diǎn)嵌入式系統(tǒng)概述嵌入式系統(tǒng)一般由硬件系統(tǒng)和軟件系統(tǒng)兩大部分組成。其中,硬件系統(tǒng)包括嵌入式微處理器、外設(shè)和必要的外圍電路;軟件系統(tǒng)包括嵌入式操作系統(tǒng)和應(yīng)用軟件。常見嵌入式系統(tǒng)的組成如圖所示。1.1.1嵌入式系統(tǒng)概述
嵌入式系統(tǒng)的組成嵌入式系統(tǒng)概述硬件系統(tǒng)(1)嵌入式微處理器。嵌入式微處理器是嵌入式系統(tǒng)硬件系統(tǒng)的核心,早期嵌入式系統(tǒng)的嵌入式微處理器由(甚至包含幾個(gè)芯片的)微處理器來擔(dān)任,而如今的嵌入式微處理器一般采用IC(集成電路)芯片形式,可以是ASIC(專用集成電路)或者SoC中的一個(gè)核。核是VLSI(超大規(guī)模集成電路)上功能電路的一部分。嵌入式微處理器芯片有如下幾種:微處理器、微控制器、數(shù)字信號微處理器(DSP)、片上系統(tǒng)和多微處理器和多核微處理器。(2)外設(shè)。外設(shè)包括存儲器、I/O接口等輔助設(shè)備。盡管MCU已經(jīng)包含了大量外設(shè),但對于需要更多I/O端口和更大存儲能力的大型系統(tǒng)來說,還需要連接額外的I/O端口和存儲器,用于擴(kuò)展其他功能和提高性能。1.1.1嵌入式系統(tǒng)概述
嵌入式系統(tǒng)的組成嵌入式系統(tǒng)概述軟件系統(tǒng)嵌入式軟件系統(tǒng)可以分成有操作系統(tǒng)和無操作系統(tǒng)兩大類,嵌入式的高級應(yīng)用,多任務(wù)成為基本需求,因此操作系統(tǒng)也是嵌入式系統(tǒng)中的必要組成部分,用于協(xié)調(diào)多任務(wù)。此外,嵌入式軟件中用到的高級語言有:C語言、C++和Java等編程語言。嵌入式軟件系統(tǒng)由應(yīng)用程序、API、嵌入式操作系統(tǒng)等軟件組成,解決一些在大型計(jì)算機(jī)軟件中不存在的問題:因經(jīng)常同時(shí)完成若干任務(wù),必須能及時(shí)響應(yīng)外部事件,能在無人干預(yù)的條件下處理所有異常和突發(fā)情況。1.1.1嵌入式系統(tǒng)概述
嵌入式系統(tǒng)的組成第1章嵌入式Linux系統(tǒng)概述
1.2嵌入式Linux技術(shù)嵌入式系統(tǒng)概述Linux是一種類Unix操作系統(tǒng),是一個(gè)基于POSIX和Unix的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng),支持32位和64位硬件,Linux繼承了Unix以網(wǎng)絡(luò)為核心的設(shè)計(jì)思想,是一種性能穩(wěn)定的多用戶網(wǎng)絡(luò)操作系統(tǒng)。特點(diǎn)如下:1.2.1Linux簡介(1)Linux由眾多微內(nèi)核組成,其源代碼完全開源;(2)Linux繼承了Unix的特性,具有非常強(qiáng)大的網(wǎng)絡(luò)功能,其支持所有的因特網(wǎng)協(xié)議,包括TCP/IPv4、TCP/IPv6和鏈路層拓?fù)涑绦虻?,且可以利用Unix的網(wǎng)絡(luò)特性開發(fā)出新的協(xié)議棧;(3)Linux系統(tǒng)工具鏈完整,簡單操作就可以配置出合適的開發(fā)環(huán)境,可以簡化開發(fā)過程,減少開發(fā)中仿真工具的障礙,使系統(tǒng)具有較強(qiáng)的移植性;嵌入式系統(tǒng)概述在Linux內(nèi)核的發(fā)展過程中,各種Linux發(fā)行版本推動了Linux的應(yīng)用,從而讓更多的人開始關(guān)注Linux。Linux的各個(gè)發(fā)行版本使用的是同一個(gè)Linux內(nèi)核,因此在內(nèi)核層不存在什么兼容性問題,每個(gè)版本有不一樣的感覺,只在發(fā)行版本的最外層才有所體現(xiàn)。幾款常用的Linux發(fā)行版本介紹如下:1.2.2Linux發(fā)行版(1)RedHatLinuxRedHat公司的產(chǎn)品主要包括RHEL(RedHatEnterpriseLinux)和CentOS(RHEL的社區(qū)克隆版本)、FedoraCore(由RedHat桌面版發(fā)展而來)。(2)UbuntuLinuxUbuntu基于DebianLinux發(fā)展而來,界面友好,容易上手,對硬件的支持非常全面,適合做桌面系統(tǒng)。(3)SuSELinuxSuSELinux以SlackwareLinux為基礎(chǔ),1994年發(fā)行了第一版,2004年被Novell公司收購后,成立了OpenSUSE社區(qū),推出了社區(qū)版本OpenSUSE。SuSELinux可以與Windows的交互,擁有界面友好的安裝過程、圖形管理工具。(4)GentooLinuxGentoo最初由DanielRobbins創(chuàng)建,首個(gè)穩(wěn)定版本發(fā)布于2002年。嵌入式系統(tǒng)概述利用Linux其自身的許多特點(diǎn),把它應(yīng)用到嵌入式系統(tǒng)里,這是Linux做嵌入式的優(yōu)勢。(1)Linux開放源代碼,眾多Linux愛好者又是Linux開發(fā)者的強(qiáng)大技術(shù)支持;(2)Linux的內(nèi)核小、效率高,內(nèi)核的更新速度很快,linux是可以定制的,其系統(tǒng)內(nèi)核最小只有約134KB。(3)Linux免費(fèi)開源,在價(jià)格上極具競爭力。Linux還有著嵌入式操作系統(tǒng)所需要的很多特色,Linux適應(yīng)于多種CPU和多種硬件平臺,是一個(gè)跨平臺的系統(tǒng),且性能穩(wěn)定,裁剪性很好,開發(fā)和使用都很容易。Linux對最常用的TCP/IP協(xié)議有最完備的支持。1.2.3嵌入式Linux技術(shù)嵌入式系統(tǒng)概述自從20世紀(jì)70年代微處理器誕生后,將計(jì)算機(jī)技術(shù)、半導(dǎo)體技術(shù)和微電子技術(shù)等融合在一起的專用計(jì)算機(jī)系統(tǒng),即嵌入式系統(tǒng),已廣泛地應(yīng)用于家用電器、航空航天、工業(yè)、醫(yī)療、汽車、通信、信息技術(shù)等領(lǐng)域。各種各樣的嵌入式系統(tǒng)和產(chǎn)品在應(yīng)用數(shù)量上已遠(yuǎn)遠(yuǎn)超過通用計(jì)算機(jī),從日常生活、生產(chǎn)到社會的各個(gè)角落,可以說嵌入式系統(tǒng)無處不在。與人們生活緊密相關(guān)的幾個(gè)應(yīng)用領(lǐng)域列舉如下。1.2.4嵌入式技術(shù)的應(yīng)用(1)消費(fèi)類電子產(chǎn)品應(yīng)用。嵌入式系統(tǒng)在消費(fèi)類電子產(chǎn)品應(yīng)用領(lǐng)域的發(fā)展最為迅速,而且在這個(gè)領(lǐng)域中的嵌入式微處理器的需求量也是最大的。由嵌入式系統(tǒng)構(gòu)成的消費(fèi)類電子產(chǎn)品已經(jīng)成為生活中必不可少的一部分,如智能冰箱、流媒體電視等信息家電產(chǎn)品,以及智能手機(jī)、PDA、數(shù)碼相機(jī)、MP3、MP4等。(2)智能儀器儀表類應(yīng)用。這類產(chǎn)品可能離日常生活有點(diǎn)距離,但是對于開發(fā)人員來說,卻是實(shí)驗(yàn)室里的必備工具,如網(wǎng)絡(luò)分析儀、數(shù)字示波器、熱成像儀等。通常這些嵌入式設(shè)備中都有一個(gè)應(yīng)用微處理器和一個(gè)運(yùn)算微處理器,可以完成數(shù)據(jù)采集、分析、存儲、打印、顯示等功能。(3)通信信息類產(chǎn)品應(yīng)用。這些產(chǎn)品多數(shù)應(yīng)用于通信機(jī)柜設(shè)備中,如路由器、交換機(jī)、家庭媒體網(wǎng)關(guān)等,在民用市場使用較多的莫過于路由器和交換機(jī)了?;诰W(wǎng)絡(luò)應(yīng)用的嵌入式系統(tǒng)也非常多,目前市場發(fā)展較快的是遠(yuǎn)程監(jiān)控系統(tǒng)等在監(jiān)控領(lǐng)域中應(yīng)用的系統(tǒng)。嵌入式系統(tǒng)概述1.2.4嵌入式技術(shù)的應(yīng)用(4)過程控制類應(yīng)用。過程控制類應(yīng)用主要是指在工業(yè)控制領(lǐng)域中的應(yīng)用,包括對生產(chǎn)過程中各種動作流程的控制,如流水線檢測、金屬加工控制、汽車電子等。汽車工業(yè)在中國已取得了飛速的發(fā)展,汽車電子也在這個(gè)大發(fā)展的背景下迅速成長?,F(xiàn)在,一輛汽車中往往包含有上百個(gè)嵌入式系統(tǒng),它們通過總線相連,實(shí)現(xiàn)對汽車各部分的智能控制;車載多媒體系統(tǒng)、車載GPS導(dǎo)航系統(tǒng)等,也都是典型的嵌入式系統(tǒng)應(yīng)用。(5)航空航天類應(yīng)用。不僅在低端的民用產(chǎn)品中,在像航空航天這樣的高端應(yīng)用的中同樣需要大量的嵌入式系統(tǒng),如火星探測器、火箭發(fā)射主控系統(tǒng)、衛(wèi)星信號測控系統(tǒng)、飛機(jī)的控制系統(tǒng)、探月機(jī)器人等。我國的探月工程中“嫦娥三號”的探月工程車就是最好的證明。(6)生物微電子類應(yīng)用。在指紋識別、生物傳感器數(shù)據(jù)采集等應(yīng)用中也廣泛采用了嵌入式系統(tǒng)。環(huán)境監(jiān)測已經(jīng)成為人類必須面對的問題,隨著技術(shù)的發(fā)展,將來的空氣中、河流中可以用大量的微生物傳感器實(shí)時(shí)地監(jiān)測環(huán)境狀況,而且還可以把這些數(shù)據(jù)實(shí)時(shí)地傳送到環(huán)境監(jiān)測中心,以監(jiān)測整個(gè)生活環(huán)境,避免發(fā)生更深層次的環(huán)境污染。這也許就是將來圍繞在人們生存環(huán)境周圍的一個(gè)無線環(huán)境監(jiān)測傳感器網(wǎng)絡(luò)。嵌入式系統(tǒng)概述1.2.4嵌入式技術(shù)的應(yīng)用(7)嵌入式人工智能技術(shù)。深度學(xué)習(xí)功能已經(jīng)在許多嵌入式視覺應(yīng)用中得到應(yīng)用。所有這些應(yīng)用程序的共同點(diǎn)是它們通常會生成大量數(shù)據(jù),并且經(jīng)常涉及非工業(yè)場景,例如自動駕駛。相關(guān)車輛已經(jīng)配備了許多傳感器和攝像頭,可以從當(dāng)前的交通狀況中收集數(shù)字?jǐn)?shù)據(jù)。集成視覺軟件借助深度學(xué)習(xí)算法實(shí)時(shí)分析數(shù)據(jù)流?;谏疃葘W(xué)習(xí)的嵌入式視覺技術(shù)也用于智能城市環(huán)境中。在城市某些基礎(chǔ)設(shè)施過程,如街道交通,照明和電力供應(yīng),以數(shù)字網(wǎng)絡(luò)化,以便為居民提供特殊服務(wù)。最后用于智能家居應(yīng)用,例如,數(shù)字語音助手和機(jī)器人真空吸塵器。第2章音頻分析系統(tǒng)Linux開發(fā)案例音頻分析系統(tǒng)Linux開發(fā)案例本章分析Linux技術(shù)在音頻分析系統(tǒng)中的應(yīng)用,共分2個(gè)模塊:1.系統(tǒng)總體設(shè)計(jì)與Linux驅(qū)動開發(fā):先進(jìn)行系統(tǒng)總體設(shè)計(jì)分析,分析點(diǎn)陣屏和OLED的Linux驅(qū)動開發(fā),并實(shí)現(xiàn)顯示模塊驅(qū)動開發(fā)與測試。2.
音頻分析系統(tǒng)開發(fā):分析音頻頻譜分析和功能開發(fā),音頻處理功能開發(fā)和上位機(jī)控制應(yīng)用開發(fā),并實(shí)現(xiàn)音頻分析顯示。第2章音頻分析系統(tǒng)Linux開發(fā)案例
2.1總體設(shè)計(jì)與Linux驅(qū)動開發(fā)音頻分析系統(tǒng)Linux開發(fā)案例聲音頻譜分析是考慮人耳對不同頻率成分的聲音的感受的不同,進(jìn)而通過傅里葉變換等獲得其準(zhǔn)確頻譜特性的技術(shù)。聲壓頻譜分析是后續(xù)聲學(xué)分析的基礎(chǔ),同時(shí)在聲學(xué)測量,噪聲污染,健康醫(yī)療,降噪減噪,故障診斷,國防建設(shè)等中都具有重要的應(yīng)用。本項(xiàng)目從理論分析到硬件及算法設(shè)計(jì),分別介紹了基于嵌入式系統(tǒng)的音頻分析系統(tǒng)的實(shí)現(xiàn)過程。提出了一套精度較高,運(yùn)算量較小,實(shí)時(shí)性較好,可操作性較強(qiáng)的聲學(xué)頻譜分析方案。本系統(tǒng)對基于嵌入式系統(tǒng)的聲壓頻率計(jì)權(quán)、頻譜分析進(jìn)行了簡單的分析,首先介紹了基于卷積的頻率計(jì)權(quán)實(shí)現(xiàn)及基于傅里葉變換、快速傅里葉變換的聲音頻譜分析方法。2.1.1系統(tǒng)總體設(shè)計(jì)分析
系統(tǒng)需求分析功能功能說明音頻采集功能通過邊緣計(jì)算網(wǎng)關(guān)上的麥可風(fēng)實(shí)時(shí)采集音頻數(shù)據(jù)音頻頻譜分析功能對采集音頻數(shù)據(jù)進(jìn)行頻譜分析頻譜實(shí)時(shí)動態(tài)顯示功能通過擴(kuò)展板的點(diǎn)陣屏與OLED屏動態(tài)顯示頻率變化Android應(yīng)用控制功能通過Android應(yīng)用程序?qū)ο到y(tǒng)功能進(jìn)行切換與硬件測試音頻分析系統(tǒng)Linux開發(fā)案例音頻分析顯示系統(tǒng),其硬件主要由邊緣計(jì)算網(wǎng)關(guān)和Arm擴(kuò)展模塊構(gòu)成,通過邊緣計(jì)算網(wǎng)關(guān)上的麥可風(fēng)實(shí)時(shí)采集音頻數(shù)據(jù),采集的數(shù)據(jù)分析處理后由Arm擴(kuò)展模塊顯示頻譜變化,Android手機(jī)可以對設(shè)備進(jìn)行相關(guān)的功能切換與控制,硬件結(jié)構(gòu)框圖如圖所示。2.1.1系統(tǒng)總體設(shè)計(jì)分析
系統(tǒng)總體設(shè)計(jì)音頻分析系統(tǒng)Linux開發(fā)案例音頻分析顯示系統(tǒng),軟件結(jié)構(gòu)框圖如圖所示。2.1.1系統(tǒng)總體設(shè)計(jì)分析
系統(tǒng)總體設(shè)計(jì)音頻分析系統(tǒng)Linux開發(fā)案例邊緣計(jì)算網(wǎng)關(guān)采用工業(yè)級鋁合金一體屏設(shè)計(jì),AI嵌入式邊緣計(jì)算處理器RK3399,4G+16G內(nèi)存配置,10寸高清電容屏,運(yùn)行ubuntu、android多操作系統(tǒng)系統(tǒng),如圖所示。2.1.2開發(fā)平臺音頻分析系統(tǒng)Linux開發(fā)案例邊緣計(jì)算網(wǎng)關(guān)提供豐富的外設(shè)接口,易于功能擴(kuò)展,方便開發(fā)調(diào)試,如圖所示。2.1.2開發(fā)平臺智能邊緣計(jì)算網(wǎng)關(guān)系統(tǒng)啟動進(jìn)入U(xiǎn)buntu操作系統(tǒng)界面,如圖所示。音頻分析系統(tǒng)Linux開發(fā)案例本項(xiàng)目開發(fā)時(shí)需要連接ARM擴(kuò)展模塊,首先從ARM擴(kuò)展模塊上拆下STM32核心板,然后將ARM擴(kuò)展模塊與網(wǎng)關(guān)的EXT接口連接。連接完成的示意如圖所示。2.1.2開發(fā)平臺音頻分析系統(tǒng)Linux開發(fā)案例擴(kuò)展板上的點(diǎn)陣屏需要HT16K33驅(qū)動芯片進(jìn)行控制驅(qū)動。HT16K33是一款存儲器映射和多功能LED控制驅(qū)動芯片。該芯片支持最大128點(diǎn)的顯示模式(16SEGs×8COMs)以及最大13×3的按鍵矩陣掃描電路。HT16K33的軟件配置特性使其適用于多種LED應(yīng)用,包括LED模塊和顯示子系統(tǒng)。HT16K33通過雙向I2C接口可與大多數(shù)微控制器進(jìn)行通信。2.1.3點(diǎn)陣屏Linux驅(qū)動開發(fā)
點(diǎn)陣屏硬件原理音頻分析系統(tǒng)Linux開發(fā)案例顯示存儲器–RAM結(jié)構(gòu)●16×8位靜態(tài)RAM用于存儲LED顯示數(shù)據(jù)。對RAM中的某一個(gè)位寫“1”則相對應(yīng)的LEDROW點(diǎn)亮,寫“0”則相對應(yīng)的LEDROW熄滅?!馬AM地址與行輸出一一對應(yīng),一個(gè)RAM字中的每個(gè)位與縱列輸出一一對應(yīng)。RAM與LED的映射關(guān)系如表2.2所示。2.1.3點(diǎn)陣屏Linux驅(qū)動開發(fā)
點(diǎn)陣屏硬件原理COMROW0~ROW7ROW8~ROW15COM000H01HCOM102H03HCOM204H05HCOM306H07HCOM408H09HCOM50AH0BHCOM60CH0DHCOM70EH0FHi2c數(shù)據(jù)字節(jié)D7D6D5D4D3D2D1D0ROW7654321015141312111098音頻分析系統(tǒng)Linux開發(fā)案例linux內(nèi)核和芯片提供商為I2C設(shè)備的驅(qū)動程序提供了I2C驅(qū)動的框架,以及框架底層與硬件相關(guān)的代碼的實(shí)現(xiàn)(完整流程圖請查看文檔)。剩下的就是針對掛載在I2C兩線上的I2C設(shè)備了device,而編寫的即具體設(shè)備驅(qū)動了,這里的設(shè)備就是硬件接口外掛載的設(shè)備,而非硬件接口本身(soc硬件接口本身的驅(qū)動可以理解為總線驅(qū)動)2.1.3點(diǎn)陣屏Linux驅(qū)動開發(fā)
點(diǎn)陣屏Linux驅(qū)動程序音頻分析系統(tǒng)Linux開發(fā)案例從i2c驅(qū)動架構(gòu)圖中可以看出,linux內(nèi)核對i2c架構(gòu)抽象了一個(gè)叫核心層core的中間件,它分離了設(shè)備驅(qū)動devicedriver和硬件控制的實(shí)現(xiàn)細(xì)節(jié),core層不但為上面的設(shè)備驅(qū)動提供封裝后的內(nèi)核注冊函數(shù),而且還為小面的硬件事件提供注冊接口,core層起到了承上啟下的作用。開發(fā)I2C驅(qū)動時(shí),有4個(gè)步驟,前2個(gè)步驟屬于I2C總線驅(qū)動,后面2個(gè)步驟屬于I2C設(shè)備驅(qū)動。過程如下:2.1.3點(diǎn)陣屏Linux驅(qū)動開發(fā)
點(diǎn)陣屏Linux驅(qū)動程序(1)提供I2C適配器的硬件驅(qū)動,探測,初始化I2C適配器,驅(qū)動CPU控制的I2C適配器從硬件上產(chǎn)生。(2)提供I2C控制的algorithm,用具體適配器的xxx_xfer()函數(shù)填充i2c_algorithm的master_xfer指針,并把i2c_algorithm指針賦給i2c_adapter的algo指針。(3)實(shí)現(xiàn)I2C設(shè)備驅(qū)動中的i2c_driver接口,用具體yyy的yyy_probe(),yyy_remove(),yyy_suspend(),yyy_resume()函數(shù)指針和i2c_device_id設(shè)備ID表賦給i2c_driver的probe,remove,suspend,resume和id_table指針。(4)實(shí)現(xiàn)I2C設(shè)備所對應(yīng)類型的具體驅(qū)動,i2c_driver只是實(shí)現(xiàn)設(shè)備與總線的掛接。音頻分析系統(tǒng)Linux開發(fā)案例i2c設(shè)備注冊主要定義一些結(jié)構(gòu)體和使用一些API函數(shù)。1)在Linux驅(qū)動中I2C系統(tǒng)中主要包含以下幾個(gè)成員:2.1.3點(diǎn)陣屏Linux驅(qū)動開發(fā)
點(diǎn)陣屏Linux驅(qū)動程序2)板級信息里應(yīng)該包含I2C的地址和設(shè)備名:示例:#defineDEVICE_NAME "ht16k33"#ifDEVICE_RS#defineDEV_I2C_BUS2#defineDEV_I2C_ADDRESS(0xE0>>1)structi2c_board_infoinfo;memset(&info,0,sizeof(structi2c_board_info));info.addr=DEV_I2C_ADDRESS;strcpy(info.type,DEVICE_NAME);音頻分析系統(tǒng)Linux開發(fā)案例i2c設(shè)備注冊主要定義一些結(jié)構(gòu)體和使用一些API函數(shù)。3)i2c_get_adapter函數(shù)說明:獲取adapter總線上的相應(yīng)的I2C設(shè)備,參數(shù)是設(shè)備號,舉例如下:2.1.3點(diǎn)陣屏Linux驅(qū)動開發(fā)
點(diǎn)陣屏Linux驅(qū)動程序#defineDEV_I2C_BUS2adapter=i2c_get_adapter(DEV_I2C_BUS);if(adapter==NULL){return-ENODEV;}i2c_get_adapt、r和i2c_new_device配合使用:adapter=i2c_get_adapter(DEV_I2C_BUS);if(adapter==NULL){return-ENODEV;}client=i2c_new_device(adapter,&info);i2c_put_adapter(adapter);if(client==NULL){return-ENODEV;}音頻分析系統(tǒng)Linux開發(fā)案例i2c讀寫接口1)設(shè)備讀寫的實(shí)現(xiàn)設(shè)備讀寫分為兩類,一類是寫命令,一類是寫數(shù)據(jù),都是通過i2c_master_send函數(shù)來實(shí)現(xiàn)。2)i2c_master_send函數(shù)的使用2.1.3點(diǎn)陣屏Linux驅(qū)動開發(fā)
點(diǎn)陣屏Linux驅(qū)動程序3)寫命令函數(shù):其實(shí)也是調(diào)用i2c_master_send函數(shù),比如下面的這個(gè):i2c_master_send(new_client,write_data,2);//向new_client發(fā)送write_data內(nèi)數(shù)據(jù)先發(fā)命令,后數(shù)據(jù),2表示發(fā)送的大小。staticintht16k33_write_command(charc){ returni2c_master_send(i2c_dev,&c,1);}
音頻分析系統(tǒng)Linux開發(fā)案例4)寫數(shù)據(jù)函數(shù):其實(shí)也是調(diào)用i2c_master_send函數(shù),比如下面的這個(gè):2.1.3點(diǎn)陣屏Linux驅(qū)動開發(fā)
點(diǎn)陣屏Linux驅(qū)動程序staticintht16k33_write_cmd_data(charc,chard){ charv[]={c,d}; returni2c_master_send(i2c_dev,v,2);}staticintht16k33_flush(void){ intr; charbuf[17]; buf[0]=0; memcpy(buf+1,led_buf,16); r=i2c_master_send(i2c_dev,buf,17); printk(KERN_ERR"wr%d\n",r); returnr;}
(點(diǎn)陣驅(qū)動代碼詳細(xì)請查看文檔)音頻分析系統(tǒng)Linux開發(fā)案例點(diǎn)陣屏驅(qū)動主要實(shí)現(xiàn)對硬件設(shè)備的基本控制,具體的功能要由上層應(yīng)用調(diào)用驅(qū)動提供的接口對設(shè)備進(jìn)行控制。點(diǎn)陣屏應(yīng)用功能函數(shù)說明如表所示。2.1.3點(diǎn)陣屏Linux驅(qū)動開發(fā)
點(diǎn)陣屏Linux應(yīng)用程序函數(shù)名稱參數(shù)說明函數(shù)功能voidled8x8Init(void)無點(diǎn)陣屏初始化staticvoiddumRam(void)無點(diǎn)陣屏顯示Ram數(shù)組內(nèi)容voidled8x8Brightness(intb)b:亮度值點(diǎn)陣屏亮度控制voidled8x8Point(intx,inty,intst)x:行坐標(biāo)y:列坐標(biāo)點(diǎn)陣屏設(shè)置指定坐標(biāo)數(shù)據(jù)voidled8x8Draw(char*buf)buf:顯示緩沖區(qū)點(diǎn)陣屏Ram數(shù)組從緩沖區(qū)取值voidled8x8Clear(void)無點(diǎn)陣屏清屏voidled8x8Flush(void)無點(diǎn)陣屏刷新顯示內(nèi)容(led8x8.c程序源碼詳細(xì)請查看文檔)音頻分析系統(tǒng)Linux開發(fā)案例點(diǎn)陣屏應(yīng)用功能,流程分析:1)led8x8Init()初始化點(diǎn)陣屏硬件;2)led8x8Face(i)設(shè)置要顯示的第i類笑臉坐標(biāo)數(shù)據(jù)3)led8x8Flush()點(diǎn)陣屏刷新顯示4)sleep(2)休眠2秒鐘5)i值在faces數(shù)組有效范圍內(nèi)加16)返回到2)步驟循環(huán)執(zhí)行2.1.3點(diǎn)陣屏Linux驅(qū)動開發(fā)
點(diǎn)陣屏Linux應(yīng)用程序(Led8x8Test.c源碼詳細(xì)請查看文檔)音頻分析系統(tǒng)Linux開發(fā)案例1、基本結(jié)構(gòu)
OLED器件由基板、陰極、陽極、空穴注入層(HIL)、電子注入層(EIL)、空穴傳輸層(HTL)、電子傳輸層(ETL)、電子阻擋層(EBL)、空穴阻擋層(EBL)、發(fā)光層(EML)等部分構(gòu)成?;迨钦麄€(gè)器件的基礎(chǔ),所有功能層都需要蒸鍍到器件的基板上;通常采用玻璃作為器件的基板。陽極與器件外加驅(qū)動電壓的正極相連,陽極中的空穴在外加驅(qū)動電壓的驅(qū)動下向器件中的發(fā)光層移動,陽極需要在器件工作時(shí)具有一定的透光性,使得器件內(nèi)部發(fā)出的光能夠被外界觀察到,陽極最常使用的材料是氧化銦錫ITO??昭ㄗ⑷雽涌梢允箒碜躁枠O的空穴順利地注入空穴傳輸層;空穴傳輸層負(fù)責(zé)將空穴傳輸?shù)桨l(fā)光層;電子阻擋層會把來自陰極的電子阻擋在器件的發(fā)光層界面處,從而增大器件發(fā)光層界面處電子的濃度。2.1.4OLEDLinux驅(qū)動開發(fā)OLED的基本結(jié)構(gòu)和發(fā)光原理音頻分析系統(tǒng)Linux開發(fā)案例1、基本結(jié)構(gòu)OLED器件的結(jié)構(gòu)可分為單層結(jié)構(gòu)、雙層結(jié)構(gòu)、三層結(jié)構(gòu)和多層結(jié)構(gòu)。單層結(jié)構(gòu)只包含基板、陽極、陰極和發(fā)光層的結(jié)構(gòu),由于OLED器件中的材料對電子和空穴有不同的傳輸能力,該結(jié)構(gòu)會使得電子和空穴在發(fā)光層界面處的濃度差別很大,導(dǎo)致OLED器件的發(fā)光效率較低。雙層結(jié)構(gòu)是指發(fā)光層除了具有電子和空穴先通過再結(jié)合形成激子然后通過激子退激發(fā)光的作用,還具有傳輸電子或傳輸空穴的作用。
三層結(jié)構(gòu)是指器件結(jié)構(gòu)中一般包含有陰極、電子傳輸層、發(fā)光層、空穴傳輸層、陽極和基板的OLED器件;三層結(jié)構(gòu)的OLED器件具有更高的電子和空穴傳輸能力,發(fā)光效率也更高。多層結(jié)構(gòu)是指OLED器件除具了有三層結(jié)構(gòu)所具有的功能層,還具有電子注入層、空穴注入層、電子阻擋層和空穴阻擋層;由于更多功能層的加入,OLED器件的發(fā)光效率更高,但由于器件的厚度增加,需要更高的驅(qū)動電壓才能正常工作。2.1.4OLEDLinux驅(qū)動開發(fā)OLED的基本結(jié)構(gòu)和發(fā)光原理音頻分析系統(tǒng)Linux開發(fā)案例2.發(fā)光原理OLED是一種在外加驅(qū)動電壓下可主動發(fā)光的器件,無須背光源。OLED基本驅(qū)動原理:OLED器件中的電子和空穴在外加驅(qū)動電壓的驅(qū)動下,從器件的兩極向中間的發(fā)光層移動,到達(dá)發(fā)光層后,在庫侖力的作用下,電子和空穴進(jìn)行再結(jié)合形成激子,激子的產(chǎn)生會活化發(fā)光層的有機(jī)材料,進(jìn)而使得有機(jī)分子最外層的電子突破最高占有分子軌道(HOMO)能級和最低未占有分子軌道(LUMO)能級之間的能級勢壘,從穩(wěn)定的基態(tài)躍遷到極不穩(wěn)定的激發(fā)態(tài),處于激發(fā)態(tài)的電子的狀態(tài)極不穩(wěn)定,會通過內(nèi)轉(zhuǎn)換回到LUMO能級。2.1.4OLEDLinux驅(qū)動開發(fā)OLED的基本結(jié)構(gòu)和發(fā)光原理音頻分析系統(tǒng)Linux開發(fā)案例
OLED器件的驅(qū)動方式分為主動式驅(qū)動(有源驅(qū)動)和被動式驅(qū)動(無源驅(qū)動)。1.無源驅(qū)動無源驅(qū)動分為靜態(tài)驅(qū)動和動態(tài)驅(qū)動。(1)靜態(tài)驅(qū)動:在靜態(tài)驅(qū)動的OLED器件上,一般采用共陰極連接方式,有機(jī)電致發(fā)光像素的陰極是連在一起引出,陽極是分立引出。若要驅(qū)動器件發(fā)光,只要讓恒流源的電壓與陰極的電壓之差大于驅(qū)動電壓,正向?qū)ê髮l(fā)光;若要器件不發(fā)光,將陽極接在一個(gè)負(fù)電壓上,反向截止后不能發(fā)光。如果圖像變化比較多時(shí),會出現(xiàn)交叉效應(yīng),為了避免這種現(xiàn)象,需要采用交流的形式。靜態(tài)驅(qū)動一般用于段式顯示屏的驅(qū)動。(2)動態(tài)驅(qū)動:在動態(tài)驅(qū)動時(shí),器件的兩個(gè)電極做成了矩陣結(jié)構(gòu),水平一組顯示像素的相同性質(zhì)的電極共用,縱向一組顯示像素的相同性質(zhì)的電極共用。如果器件可分為N行和M列,行和列分別對應(yīng)發(fā)光像素的陰極和陽極。在實(shí)際驅(qū)動時(shí),要逐行點(diǎn)亮或者要逐列點(diǎn)亮像素,一般采用逐行掃描的方式。2.1.4OLEDLinux驅(qū)動開發(fā)OLED器件的驅(qū)動方式音頻分析系統(tǒng)Linux開發(fā)案例2.有源驅(qū)動有源驅(qū)動的每個(gè)像素都配備了具有開關(guān)功能的低溫多晶硅薄膜晶體管(TFT),而且每個(gè)像素都配備了一個(gè)電荷存儲電容,外圍驅(qū)動電路和顯示陣列集成在同一玻璃基板上。由于LCD采用電壓驅(qū)動,OLED卻依賴電流驅(qū)動,因此與LCD相同的TFT結(jié)構(gòu),無法用于OLED,需要能讓足夠電流通過導(dǎo)通阻抗較小的小型驅(qū)動TFT。有源驅(qū)動屬于靜態(tài)驅(qū)動,可進(jìn)行100%的負(fù)載驅(qū)動,且不受掃描電極數(shù)的限制,可以獨(dú)立地對每個(gè)像素進(jìn)行選擇性調(diào)節(jié)。有源驅(qū)動無占空比問題,易于實(shí)現(xiàn)高亮度和高分辨率,由于有源驅(qū)動可以對紅色像素和藍(lán)色像素獨(dú)立地進(jìn)行灰度調(diào)節(jié),更有利于OLED彩色化實(shí)現(xiàn)。2.1.4OLEDLinux驅(qū)動開發(fā)OLED器件的驅(qū)動方式音頻分析系統(tǒng)Linux開發(fā)案例
本項(xiàng)目采用了SSD1306OLED,是一個(gè)單片OLED/PLED驅(qū)動芯片,可以驅(qū)動有機(jī)/聚合發(fā)光二極管點(diǎn)陣圖形顯示系統(tǒng),由128列和64行組成,該芯片專為共陰極OLED面板設(shè)計(jì)。SSD1306中嵌入了對比度控制器、顯示RAM和晶振,從而減少了外部器件和功耗,有256級亮度控制。
數(shù)據(jù)/命令的發(fā)送有三種接口可選擇:6800/8000、I2C或SPI,本節(jié)采用I2C接口,驅(qū)動指令如表所示。2.1.4OLEDLinux驅(qū)動開發(fā)OLED硬件音頻分析系統(tǒng)Linux開發(fā)案例
2.1.4OLEDLinux驅(qū)動開發(fā)OLED硬件音頻分析系統(tǒng)Linux開發(fā)案例
2.1.4OLEDLinux驅(qū)動開發(fā)OLED硬件音頻分析系統(tǒng)Linux開發(fā)案例
2.1.4OLEDLinux驅(qū)動開發(fā)OLED硬件OLED顯示技術(shù)具有自發(fā)光的特性,采用非常薄的有機(jī)材料涂層和玻璃基板,當(dāng)有電流通過時(shí),這些有機(jī)材料就會發(fā)光,而且OLED顯示屏幕可視角度大,并且能夠節(jié)省電能,從2003年開始這種顯示設(shè)備在MP3播放器上得到了應(yīng)用。0.96寸OLED顯示屏接口定義如表所示。引
腳符
號引
腳符
號引
腳符
號1GND2C2P3C2N4C1P5C1N6VDDB7NC8VSS9VDD10BS011BS112BS213CS#14RES#15D/C#16R/W#17E/RD#18D019D120D221D322D423D524D625D726IREF27VCOMH28VCC29VLSS30GND音頻分析系統(tǒng)Linux開發(fā)案例
2.1.4OLEDLinux驅(qū)動開發(fā)OLED硬件OLED驅(qū)動方式:模塊的通信接口是通過BS0,BS1,BS2三個(gè)管腳來配置的。項(xiàng)目中使用i2c接口進(jìn)行開發(fā),如表所示。通信方式BS0BS1BS2i2c0103線SPI1004線SPI0008-bit68XX并口0018-bit80XX并口011音頻分析系統(tǒng)Linux開發(fā)案例
2.1.4OLEDLinux驅(qū)動開發(fā)OLED硬件OLED原理圖SCL,SDA對應(yīng)的是I2C總線2,OLED起始地址0x39。主要是通過SDA,SCL引腳進(jìn)行通信i2c通信,通過寫命令,寫數(shù)據(jù)對顯示器進(jìn)行控制,如圖所示。音頻分析系統(tǒng)Linux開發(fā)案例
2.1.4OLEDLinux驅(qū)動開發(fā)OLEDLinux驅(qū)動程序開發(fā)I2C驅(qū)動時(shí),有4個(gè)步驟,前2個(gè)步驟屬于I2C總線驅(qū)動,后面2個(gè)步驟屬于I2C設(shè)備驅(qū)動。過程如下(具體步驟與LCD類似,請查看源文檔):(1)提供I2C適配器的硬件驅(qū)動,探測,初始化I2C適配器,驅(qū)動CPU控制的I2C適配器從硬件上產(chǎn)生。(2)提供I2C控制的algorithm,
用具體適配器的xxx_xfer()函數(shù)填充i2c_algorithm的master_xfer指針,并把i2c_algorithm指針賦給i2c_adapter的algo指針。(3)實(shí)現(xiàn)I2C設(shè)備驅(qū)動中的i2c_driver接口,用具體yyy的yyy_probe(),yyy_remove(),yyy_suspend(),yyy_resume()函數(shù)指針和i2c_device_id設(shè)備ID表賦給i2c_driver的probe,remove,suspend,resume和id_table指針。(4)實(shí)現(xiàn)I2C設(shè)備所對應(yīng)類型的具體驅(qū)動,i2c_driver只是實(shí)現(xiàn)設(shè)備與總線的掛接。(OLED驅(qū)動源碼詳細(xì)請查看文檔)音頻分析系統(tǒng)Linux開發(fā)案例
2.1.4OLEDLinux驅(qū)動開發(fā)OLEDLinux應(yīng)用程序OLED屏驅(qū)動主要實(shí)現(xiàn)對硬件設(shè)備的基本控制,具體的功能要由上層應(yīng)用調(diào)用驅(qū)動提供的接口對設(shè)備進(jìn)行控制。OLED屏應(yīng)用功能函數(shù)說明如表所示。(oled源碼源碼詳細(xì)請查看文檔)函數(shù)名稱參數(shù)說明函數(shù)功能voidoledInit(void)無OLED屏初始化staticvoiddumRam(void)無OLED屏顯示Ram數(shù)組內(nèi)容voidoledPoint(intx,inty,intst)x:行坐標(biāo)y:列坐標(biāo)OLED屏設(shè)置指定坐標(biāo)數(shù)據(jù)voidoledDraw(char*buf)buf:顯示緩沖區(qū)OLED屏Ram數(shù)組從緩沖區(qū)取值voidoledClear(void)無OLED屏清屏voidoledFlush(void)無OLED屏刷新顯示內(nèi)容音頻分析系統(tǒng)Linux開發(fā)案例
2.1.4OLEDLinux驅(qū)動開發(fā)OLEDLinux應(yīng)用程序oled應(yīng)用功能,流程分析:1)oledInit()初始化點(diǎn)陣屏硬件;2)fontShow16(16,8,"Welcome!",oledPoint)設(shè)置要顯示的坐標(biāo)與字符數(shù)據(jù)3)oledFlush()刷新顯示(oled源碼源碼詳細(xì)請查看文檔)#include<unistd.h>#include<math.h>#include<stdlib.h>#include"oled.h"#include"utils.h"#include"font.h"intmain(intargc,char*argv[]){ oledInit(); fontShow16(16,8,"Welcome!",oledPoint); oledFlush(); return0;}音頻分析系統(tǒng)Linux開發(fā)案例
2.1.5開發(fā)實(shí)踐:顯示模塊驅(qū)動開發(fā)與測試1、ARM擴(kuò)展模塊硬件連接從ARM擴(kuò)展模塊上拆下STM32核心板,然后將ARM擴(kuò)展模塊與網(wǎng)關(guān)連接,如圖2.4所示,框線內(nèi)為網(wǎng)關(guān)的ARM擴(kuò)展模塊接口(EXT)。使用交叉網(wǎng)線連接邊緣計(jì)算網(wǎng)關(guān)(LAN口)和PC,使網(wǎng)關(guān)、PC、虛擬機(jī)處于統(tǒng)一網(wǎng)段。音頻分析系統(tǒng)Linux開發(fā)案例
2.1.5開發(fā)實(shí)踐:顯示模塊驅(qū)動開發(fā)與測試2、點(diǎn)陣屏驅(qū)動開發(fā)1)硬件原理圖音頻分析系統(tǒng)Linux開發(fā)案例
2.1.5開發(fā)實(shí)踐:顯示模塊驅(qū)動開發(fā)與測試2、點(diǎn)陣屏驅(qū)動開發(fā)2)硬件說明:點(diǎn)陣屏通過HTML6K33芯片進(jìn)行驅(qū)動,使用i2c接口。3)首先建立交叉編譯開發(fā)環(huán)境,內(nèi)核必須是被編譯過的,如果已經(jīng)建立好了,就不需要再建立了。然后將“FFTDriver”目錄下的ht16k33Driver文件夾拷貝到Linux開發(fā)主機(jī)中當(dāng)前用戶文件夾。4)打開終端,進(jìn)行驅(qū)動源碼目錄,輸入make命令,進(jìn)行編譯(Makefile文件中kernel源碼目錄要確認(rèn)無誤,否則會編譯報(bào)錯(cuò))。編譯完成后會生成ht16k33.ko文件。5)通過Moba軟件將成生的驅(qū)動程序ht16k33.ko文件復(fù)制到邊緣計(jì)算網(wǎng)關(guān)。通過sudoinsmodht16k33.ko加載驅(qū)動。test@rk3399:~$lsht16k33.koht16k33.kotest@rk3399:~$sudoinsmodht16k33.ko6)如果驅(qū)動加載成功,可以在/sys目錄查看驅(qū)動信息。test@rk3399:~$ls/sys/bus/i2c/devices/i2c-2/2-0070/brightnessbufferdrivermodaliasnamepowersubsystemueventtest@rk3399:~$cat/sys/bus/i2c/devices/i2c-2/2-0070/modaliasi2c:ht16k33音頻分析系統(tǒng)Linux開發(fā)案例
2.1.5開發(fā)實(shí)踐:顯示模塊驅(qū)動開發(fā)與測試3、點(diǎn)陣屏應(yīng)用開發(fā)與測試1)通過Moba軟件將“FFTDriver”目錄下的ht16k33App文件夾復(fù)制到邊緣計(jì)算網(wǎng)關(guān)。2)在應(yīng)用程序源碼目錄進(jìn)行編譯,編譯成功生成測試程序。test@rk3399:~/work/led8x8$lsled8x8.cled8x8.hled8x8Test.cutils.cutils.htest@rk3399:~/work/led8x8$gccled8x8.cutils.cled8x8Test.c-oled8x8Testtest@rk3399:~/work/led8x8$sudo./led8x8Test音頻分析系統(tǒng)Linux開發(fā)案例
2.1.5開發(fā)實(shí)踐:顯示模塊驅(qū)動開發(fā)與測試3、點(diǎn)陣屏應(yīng)用開發(fā)與測試1)通過Moba軟件將“FFTDriver”目錄下的ht16k33App文件夾復(fù)制到邊緣計(jì)算網(wǎng)關(guān)。2)在應(yīng)用程序源碼目錄進(jìn)行編譯,編譯成功生成測試程序。(運(yùn)行效果如下圖)test@rk3399:~/work/led8x8$lsled8x8.cled8x8.hled8x8Test.cutils.cutils.htest@rk3399:~/work/led8x8$gccled8x8.cutils.cled8x8Test.c-oled8x8Testtest@rk3399:~/work/led8x8$sudo./led8x8Test音頻分析系統(tǒng)Linux開發(fā)案例
2.1.5開發(fā)實(shí)踐:顯示模塊驅(qū)動開發(fā)與測試5、OLED應(yīng)用開發(fā)與測試1)通過Moba軟件將“FFTDriver”目錄下的ssd1316App文件夾復(fù)制到邊緣計(jì)算網(wǎng)關(guān)。2)在應(yīng)用程序源碼目錄通過gccfont.cutils.coled.coledTest.c-ooledTest命令進(jìn)行編譯,編譯成功會生成led8x8Test測試程序。輸入命令sudo./oledTest運(yùn)行測試。(運(yùn)行效果如下圖)test@rk3399:~/work/oled-test$lsfont.cfont.holed.coled.holedTest.cutils.cutils.htest@rk3399:~/work/oled-test$gccfont.cutils.coled.coledTest.c-ooledTesttest@rk3399:~/work/oled-test$sudo./oledTest音頻分析系統(tǒng)Linux開發(fā)案例
2.1.6小結(jié)本節(jié)學(xué)習(xí)了音頻分析顯示系統(tǒng)的總體硬件架構(gòu)與軟件架構(gòu)。學(xué)習(xí)了項(xiàng)目使用的智能邊緣計(jì)算網(wǎng)關(guān),擴(kuò)展硬件模塊。學(xué)習(xí)了項(xiàng)目中點(diǎn)陣屏與OLED屏的硬件原理、驅(qū)動程序開發(fā)、應(yīng)用程序開發(fā)與測試。音頻分析系統(tǒng)Linux開發(fā)案例
2.1.7思考與拓展1、點(diǎn)陣屏如何使用HT16K33芯片進(jìn)行驅(qū)動?2、嘗試使用OLED屏實(shí)現(xiàn)右進(jìn)左出滾動顯示字符串功能?第2章音頻分析系統(tǒng)Linux開發(fā)案例
2.2 音頻分析系統(tǒng)開發(fā)音頻分析系統(tǒng)Linux開發(fā)案例時(shí)域描述數(shù)學(xué)函數(shù)或物理信號對時(shí)間的關(guān)系,例如一個(gè)信號的時(shí)域波形可以表達(dá)信號隨著時(shí)間的變化,是真實(shí)世界,是惟一實(shí)際存在的域。頻域是描述信號在頻率方面特性時(shí)用到的一種坐標(biāo)系。波從時(shí)域到頻域的轉(zhuǎn)換可以通過傅里葉變換實(shí)現(xiàn)。傅里葉級數(shù)的本質(zhì)是將一個(gè)周期的信號分解成無限多分開的(離散的)正弦波,這種變換是通過一組特殊的正交基來實(shí)現(xiàn)。一段波形圖可以分解成不同頻率的波形圖,也就是由時(shí)域到頻域的轉(zhuǎn)換,轉(zhuǎn)換原理如圖所示。2.2.1頻譜分析顯示功能開發(fā)
音頻頻譜分析原理音頻分析系統(tǒng)Linux開發(fā)案例音頻分析顯示系統(tǒng)的主程序的功能是通過多線程實(shí)現(xiàn),這樣每個(gè)線程可以獨(dú)立的處理自己功能,如圖所示。2.2.1頻譜分析顯示功能開發(fā)
軟件功能設(shè)計(jì)(程序源碼詳細(xì)請查看文檔)音頻分析系統(tǒng)Linux開發(fā)案例ALSA是AdvancedLinuxSoundArchitecture,高級Linux聲音架構(gòu)的簡稱,它在Linux操作系統(tǒng)上提供了音頻和MIDI(MusicalInstrumentDigitalInterface,音樂設(shè)備數(shù)字化接口)的支持。ALSA的主要特性包括:高效地支持從消費(fèi)類入門級聲卡到專業(yè)級音頻設(shè)備所有類型的音頻接口,完全模塊化的設(shè)計(jì),支持對稱多處理(SMP)和線程安全,對OSS的向后兼容,以及提供了用戶空間的alsa-lib庫來簡化應(yīng)用程序的開發(fā)。ALSA是kernel中的一個(gè)聲音驅(qū)動程序,它包括ALSA核心和其他聲卡的驅(qū)動。alsa-utils是ALSA的一個(gè)工具包,里面包含有聲卡測試和音頻編輯的工具。arecord,aplay是命令行的ALSA聲卡驅(qū)動的錄音和播放工具。arecord是命令行ALSA聲卡驅(qū)動的錄音程序,支持多種文件格式和多個(gè)聲卡。aplay是命令行播放工具,支持多種文件格式。2.2.2音頻處理功能開發(fā)Linux聲卡驅(qū)動與調(diào)試方法arecord[flags][filename]aplay[flags][filename[filename]]...音頻分析系統(tǒng)Linux開發(fā)案例通過運(yùn)行arecord命令錄音時(shí),錄音數(shù)據(jù)可以輸出到文件,本項(xiàng)目主要功能是對錄制的音頻數(shù)據(jù)進(jìn)行分析,如果數(shù)據(jù)保存文件再從文件讀取效率很低,這樣采用直接通過本機(jī)回環(huán)網(wǎng)絡(luò)通信的機(jī)制高效讀取數(shù)據(jù),通過udpfw程序進(jìn)行網(wǎng)絡(luò)輸出udpfw.c程序錄音線程程序源碼:2.2.2音頻處理功能開發(fā)
音頻數(shù)據(jù)處理功能分析//arecord命令錄音,通過udpfw程序進(jìn)行網(wǎng)絡(luò)輸出void*threadRecoder(void*arg){ intpid; charcmd[64]; snprintf(cmd,64,"arecord-r%d-fU8-traw|./udpfw&",SAMPLE); system(cmd);}(完整源碼詳細(xì)請查看文檔)
音頻數(shù)據(jù)轉(zhuǎn)發(fā)程序分析音頻分析系統(tǒng)Linux開發(fā)案例根據(jù)系統(tǒng)要實(shí)現(xiàn)的功能,通信協(xié)議設(shè)計(jì)如表所示。2.2.3上位機(jī)控制應(yīng)用開發(fā)
通信協(xié)議設(shè)計(jì)0x5A命令cmd參數(shù)param0xA51個(gè)字節(jié)1個(gè)字節(jié)0-n個(gè)字節(jié)1個(gè)字節(jié)收發(fā)方向命令參數(shù)說明上位機(jī)
設(shè)備1無設(shè)備發(fā)現(xiàn)命令2kv按鍵模擬指令,kv取值1,23x切換到相應(yīng)的功能,x取值0,1,24yled8x8涂鴉功能y對應(yīng)led8x8緩存設(shè)備
上位機(jī)0x81v1,v2設(shè)備發(fā)現(xiàn)命令響應(yīng),v1設(shè)備硬件版本版本,v2設(shè)備軟件版本音頻分析系統(tǒng)Linux開發(fā)案例網(wǎng)絡(luò)通信處理線程主要實(shí)現(xiàn)的功能是同Android應(yīng)用程序進(jìn)行通信,收發(fā)處理通信命令,程序源碼如下:2.2.3上位機(jī)控制應(yīng)用開發(fā)
網(wǎng)關(guān)網(wǎng)絡(luò)程序開發(fā)staticvoid*threadUdp(void*arg){ int*parg=arg; structsockaddr_inserver_addr; structsockaddr_inclient_addr; intclient_len; charrcv_buff[1024]; charsend_buff[1024]; intrcv_num; intsock_fd;
if((sock_fd=socket(AF_INET,SOCK_DGRAM,0))<0){perror("socketcreateerror\n");exit(1);}memset(&server_addr,0,sizeof(structsockaddr_in));
server_addr.sin_family=AF_INET;server_addr.sin_port=htons(27351);server_addr.sin_addr.s_addr=htonl(INADDR_ANY);client_len=sizeof(structsockaddr_in);if(bind(sock_fd,(structsockaddr*)&server_addr,sizeof(structsockaddr_in))<0){perror("binderror.\n");exit(1);}
(完整源碼詳細(xì)請查看文檔)音頻分析系統(tǒng)Linux開發(fā)案例Android應(yīng)用程序主要是提供一個(gè)操作界面,通過Android的網(wǎng)絡(luò)功能查找局域網(wǎng)中運(yùn)行音頻分析系統(tǒng)應(yīng)用的智能網(wǎng)關(guān)設(shè)備,搜索到設(shè)備后顯示IP地址,用戶點(diǎn)擊IP址址進(jìn)入音頻分析設(shè)備控制界面。AndroidStudio開發(fā)環(huán)境中看到的本項(xiàng)目的工程目錄如圖所示。2.2.3上位機(jī)控制應(yīng)用開發(fā)Android應(yīng)用開發(fā)(完整源碼詳細(xì)請查看文檔)音頻分析系統(tǒng)Linux開發(fā)案例音頻分析設(shè)備控制界面主要有兩大功能,一個(gè)是頻譜分析顯示,一個(gè)是設(shè)備測試功能。點(diǎn)擊界面上的“功能”按鈕可以在頻譜與測試功能間切換。1)在頻譜功能下,點(diǎn)擊“樣式”可以切換線條、雪花、塊狀不同的顯示樣式。2)進(jìn)入測試功能時(shí),OLED屏幕會顯示當(dāng)前軟件版本號,單擊軟件界面上的8x8模擬點(diǎn)陣屏中的某個(gè)小點(diǎn),擴(kuò)展板點(diǎn)陣屏可以同步操作。2.2.3上位機(jī)控制應(yīng)用開發(fā)Android應(yīng)用開發(fā)(完整源碼詳細(xì)請查看文檔)包名(類名)說明com.zonesion.udp.demo應(yīng)用包DeviceActivity.java主界面類MainActivity.java創(chuàng)建Socket,向服務(wù)端發(fā)送請求音頻分析系統(tǒng)Linux開發(fā)案例1、ARM擴(kuò)展模塊硬件連接2.2.4開發(fā)實(shí)踐:音頻分析顯示2、聲卡驅(qū)動與測試網(wǎng)關(guān)驅(qū)動程序開發(fā)與測試需要ARM擴(kuò)展模塊,參考“1.1.5開發(fā)實(shí)踐:顯示模塊驅(qū)動開發(fā)與測試”。通過Moba應(yīng)用程序的SSH功能登錄邊緣計(jì)算網(wǎng)關(guān),輸入錄音命令:arecord-r22000-fU8-trawtest.raw-r22000設(shè)置采樣率,-fU8設(shè)置格式,-traw文件類型,test.raw錄音文件名稱。打開邊緣計(jì)算網(wǎng)關(guān)的聲音設(shè)置,如果錄音程序啟動成功,在錄音選項(xiàng)可以看到錄音設(shè)備,對著邊緣網(wǎng)關(guān)大聲說話,可以看到采集的音量大小變化,如圖所示。音頻分析系統(tǒng)Linux開發(fā)案例3、音頻分析應(yīng)用程序測試2.2.4開發(fā)實(shí)踐:音頻分析顯示1)通過Moba軟件將“FFTDriver”目錄下的fft-test文件夾復(fù)制到邊緣計(jì)算網(wǎng)關(guān)。fft-test文件夾中是音頻分析應(yīng)用程序的全部源碼與編譯規(guī)則文件,如圖2.24所示。音頻分析系統(tǒng)Linux開發(fā)案例3、音頻分析應(yīng)用程序測試2.2.4開發(fā)實(shí)踐:音頻分析顯示2)在應(yīng)用程序源碼目錄通過make命令進(jìn)行編譯,make命令會使用當(dāng)前目錄下的Makefile文件中編譯規(guī)則對程序進(jìn)行編譯。test@rk3399:~/work/fft-test$makegcc-c-outils.outils.cgcc-c-ofont.ofont.cgcc-c-offt.offt.cgcc-c-oled8x8.oled8x8.cgcc-c-ooled.ooled.cgcc-c-oaudioTest.oaudioTest.cgccutils.ofont.offt.oled8x8.ooled.oaudioTest.o-lm-lpthread-offtAppgcc-c-oudpfw.oudpfw.cgcc-oudpfwudpfw.o音頻分析系統(tǒng)Linux開發(fā)案例3、音頻分析應(yīng)用程序測試2.2.4開發(fā)實(shí)踐:音頻分析顯示3)因?yàn)槌绦蛑幸{(diào)用錄音功能,在SSH遠(yuǎn)程登錄中運(yùn)行會有權(quán)限問題,需要直接在網(wǎng)關(guān)上運(yùn)行或通過Moba軟件的VNC遠(yuǎn)程桌面中去運(yùn)行。在遠(yuǎn)程桌面的終端中輸入命令sudo./fftApp運(yùn)行測試,如圖所示。音頻分析系統(tǒng)Linux開發(fā)案例3、音頻分析應(yīng)用程序測試2.2.4開發(fā)實(shí)踐:音頻分析顯示4)Android應(yīng)用測試。在Android終端(手機(jī)與平板)上安裝“FFTDriver”目錄下的demo.apk應(yīng)用程序。邊緣計(jì)算網(wǎng)關(guān)與Android終端接入同一個(gè)局域網(wǎng)中,打開Android終端中應(yīng)用程序,會搜索當(dāng)前網(wǎng)絡(luò)中的網(wǎng)關(guān)設(shè)備,顯示其IP地址與軟硬件版本號,點(diǎn)擊IP址進(jìn)入網(wǎng)關(guān)設(shè)備控制界面,如圖所示。音頻分析系統(tǒng)Linux開發(fā)案例3、音頻分析應(yīng)用程序測試2.2.4開發(fā)實(shí)踐:音頻分析顯示4)Android應(yīng)用測試。點(diǎn)擊“功能”按鈕可以在頻譜與測試功能間切換,進(jìn)入“測試”功能時(shí),OLED屏幕會顯示當(dāng)前軟件版本號,單擊軟件界面上的8x8模擬點(diǎn)陣屏中的某個(gè)小點(diǎn),擴(kuò)展板點(diǎn)陣屏可以同步操作,如圖所示。音頻分析系統(tǒng)Linux開發(fā)案例
2.2.5小結(jié)本節(jié)學(xué)習(xí)了項(xiàng)目中的核心功能音頻頻譜分析的原理,對智能網(wǎng)關(guān)運(yùn)行的主程序多線程的功能模塊分別進(jìn)行介紹與代碼分析。學(xué)習(xí)了對智能網(wǎng)關(guān)與Android設(shè)備間的通信協(xié)議設(shè)計(jì)進(jìn)行分析講解。分析了網(wǎng)關(guān)上網(wǎng)絡(luò)通信處理線程,介紹了Android應(yīng)用的程序功能與結(jié)果,通過開發(fā)實(shí)踐完成整個(gè)項(xiàng)目的運(yùn)行與測試。音頻分析系統(tǒng)Linux開發(fā)案例
2.2.6思考與拓展1、項(xiàng)目中通過arecord命令進(jìn)行音頻錄制后,為什么要把音頻數(shù)據(jù)通過網(wǎng)絡(luò)轉(zhuǎn)發(fā)?2、Android應(yīng)用程序是通過什么機(jī)制查找智能網(wǎng)關(guān)設(shè)備?第3章城市環(huán)境采集Linux開發(fā)案例城市環(huán)境采集Linux開發(fā)案例本章分析Linux技術(shù)在城市環(huán)境采集中的應(yīng)用,共分2個(gè)模塊:1.系統(tǒng)總體設(shè)計(jì)與Linux驅(qū)動開發(fā):先進(jìn)行系統(tǒng)總體設(shè)計(jì)分析,嵌入式Web服務(wù)器應(yīng)用、Boa服務(wù)器移植、CGI開發(fā)技術(shù),實(shí)現(xiàn)嵌入式Web服務(wù)器應(yīng)用開發(fā)。2.城市揚(yáng)塵監(jiān)測系統(tǒng)開發(fā):軟件界面框架分析、TVOCLinux驅(qū)動開發(fā)、LEDLinux驅(qū)動開發(fā)、PWMLinux驅(qū)動開發(fā)、揚(yáng)塵檢測功能設(shè)計(jì),實(shí)現(xiàn)揚(yáng)塵檢測系統(tǒng)。第3章城市環(huán)境采集Linux開發(fā)案例
3.1系統(tǒng)總體設(shè)計(jì)與Linux驅(qū)動開發(fā)城市環(huán)境采集Linux開發(fā)案例嵌入式Web服務(wù)器,是基于嵌入式系統(tǒng)而實(shí)現(xiàn)的Web服務(wù)器。很好理解,拆分成兩個(gè)部分,Web服務(wù)器+嵌入式。Web服務(wù)器,即通常所說的網(wǎng)頁服務(wù)器。用IE等瀏覽器訪問時(shí),網(wǎng)頁內(nèi)容儲存的地方就叫做Web服務(wù)器。大型的網(wǎng)站等,對服務(wù)器的硬件要求比較高,可以支持成千上萬個(gè)客戶端同時(shí)訪問,而且速度要快。嵌入式Web服務(wù)器,是Web服務(wù)器當(dāng)中的一種。在嵌入式系統(tǒng)上實(shí)現(xiàn)的一個(gè)Web服務(wù)器,可以通過瀏覽器等去訪問,對硬件要求稍微低一點(diǎn)。舉個(gè)簡單的例子,用的路由器,就是一個(gè)典型的嵌入式Web服務(wù)器,通過等可以直接訪問。本項(xiàng)目是嵌入式Linux中使用Web服務(wù)器的應(yīng)用示例,利用嵌入式Linux和網(wǎng)絡(luò)技術(shù)結(jié)合,實(shí)現(xiàn)采集遠(yuǎn)程的設(shè)備數(shù)據(jù),通過互聯(lián)網(wǎng)達(dá)到遠(yuǎn)程監(jiān)控設(shè)備的目的,功能需求分析如表所示。3.1.1系統(tǒng)總體設(shè)計(jì)分析
系統(tǒng)需求分析功能功能說明TVOC氣體傳感器采集功能通過Arm擴(kuò)展模塊的TVOC傳感器采集氣體數(shù)據(jù)揚(yáng)塵等級實(shí)時(shí)動態(tài)顯示功能通過擴(kuò)展板的點(diǎn)陣屏、OLED屏以及LED等動態(tài)顯示等級變化web應(yīng)用控制功能通過web應(yīng)用程序?qū)ο到y(tǒng)采集的氣體數(shù)據(jù)通過儀表盤、曲線圖以及地圖進(jìn)行顯示城市環(huán)境采集Linux開發(fā)案例城市環(huán)境采集系統(tǒng),其硬件主要邊緣計(jì)算網(wǎng)關(guān)、Arm擴(kuò)展模塊構(gòu)成。硬件結(jié)構(gòu)框圖如下:網(wǎng)關(guān)連接Arm擴(kuò)展模塊的TVOC傳感器實(shí)時(shí)采集氣體數(shù)據(jù),PC端的WEB管理界面可實(shí)時(shí)查看傳感數(shù)據(jù)以及歷史數(shù)據(jù),硬件結(jié)構(gòu)框圖如圖所示。3.1.1系統(tǒng)總體設(shè)計(jì)分析
系統(tǒng)總體設(shè)計(jì)城市環(huán)境采集Linux開發(fā)案例城市環(huán)境采集系統(tǒng),其軟件模塊主要由硬件驅(qū)動程序、Boa服務(wù)軟件、PC端Web管理軟件構(gòu)成,軟件總體結(jié)構(gòu)框圖如圖所示。3.1.1系統(tǒng)總體設(shè)計(jì)分析
系統(tǒng)總體設(shè)計(jì)城市環(huán)境采集Linux開發(fā)案例LighttpdLibHttpd是一個(gè)開源輕量級嵌入式Webserver,提供一個(gè)專門針對高性能網(wǎng)站,安全、快速、兼容性好并且靈活的webserver環(huán)境。lighttpd適合靜態(tài)資源類的服務(wù),比如圖片、資源文件,同時(shí)也適合簡單的CGI(CommonGatewayInterface)公共網(wǎng)關(guān)接口應(yīng)用的場合。ShttpdShttpd,持CGI,SSL,cookie,MD5認(rèn)證,由于shttpd可以輕松嵌入其他程序里,因此shttpd是較為理想的webserver開發(fā)素材,開發(fā)人員可以基于shttpd開發(fā)出自己的webserver。ThttpdThttpd是一種開源Web服務(wù)器,簡單、小巧、易移植、快速和安全的HTTP服務(wù)器。對于并發(fā)請求不使用fork()來派生子進(jìn)程處理,而是采用多路復(fù)用技術(shù)來實(shí)現(xiàn)。BoaBoa服務(wù)器是一個(gè)小巧高效的Web服務(wù)器,支持CGI的、適合于嵌入式系統(tǒng)的單任務(wù)的http服務(wù)器,源代碼開放、性能高。作為一種單任務(wù)Web服務(wù)器,Boa只能依次完成用戶的請求,而不會fork出新的進(jìn)程來處理并發(fā)連接請求。但Boa支持CGI,能夠?yàn)镃GI程序fork出一個(gè)進(jìn)程來執(zhí)行。3.1.2嵌入式Web服務(wù)器應(yīng)用
常見嵌入式Web服務(wù)器城市環(huán)境采集Linux開發(fā)案例Mini_httpdMini_httpd是一個(gè)小型的HTTP服務(wù)器,開源,適合于中小訪問量的站點(diǎn)。AppwebAppweb是一個(gè)快速、低內(nèi)存使用量、標(biāo)準(zhǔn)庫、方便的服務(wù)器,最大特點(diǎn)就是功能多和高度的安全保障。GoAheadGoAhead是跨平臺的服務(wù)器軟件,可以穩(wěn)定地運(yùn)行在Windows,Linux和MacOSX操作系統(tǒng)之上。3.1.2嵌入式Web服務(wù)器應(yīng)用
常見嵌入式Web服務(wù)器城市環(huán)境采集Linux開發(fā)案例Boa是一種單任務(wù)的Web服務(wù)器,當(dāng)有連接請求到來時(shí),它并不為每個(gè)連接單獨(dú)創(chuàng)建進(jìn)程,也不通過復(fù)制自身進(jìn)程來處理多連接,而是通過建立HTTP請求列表來處理多路HTTP連接請求,同時(shí)它只為CGI程序創(chuàng)建新進(jìn)程,因此,Boa具有很高的HTTP請求處理速度和效率。嵌入式Web服務(wù)器Boa和普通Web服務(wù)器一樣,能夠完成接收客戶端請求、分析請求、響應(yīng)請求、向客戶端返回請求結(jié)果等任務(wù),它的工作過程主要包括:3.1.2嵌入式Web服務(wù)器應(yīng)用Boa服務(wù)器(1)完成Web服務(wù)器的初始化工作,如創(chuàng)建環(huán)境變量、創(chuàng)建TCP套接字、綁定端口、開始偵聽、進(jìn)入循環(huán)結(jié)構(gòu),以及等待接收客戶瀏覽器的連接請求;(2)當(dāng)有客戶端連接請求時(shí),Web服務(wù)器負(fù)責(zé)接收客戶端請求,并保存相關(guān)請求信息;(3)在接收到客戶端的連接請求之后,分析客戶端請求,解析出請求的方法、URL目標(biāo)、可選的查詢信息及表單信息,同時(shí)根據(jù)請求做出相應(yīng)的處理;(4)Web服務(wù)器完成相應(yīng)處理后,向客戶端瀏覽器發(fā)送響應(yīng)信息,關(guān)閉與客戶機(jī)的TCP連接。城市環(huán)境采集Linux開發(fā)案例(1)移植Boa服務(wù)器過程
解壓文件,并進(jìn)入./boa/src目錄
執(zhí)行./configure配置編譯環(huán)境
make編譯源代碼,修改錯(cuò)誤
創(chuàng)建boa安裝目錄/boa
修改defines.h文件中的SERVER_ROOT,使其指向改動后的配置文件路徑
復(fù)制必要的文件到安裝目錄
修改boa配置文件
實(shí)現(xiàn)HTML頁面文件(2)移植到嵌入式開發(fā)板
在源代碼編譯的時(shí)候,指定交叉編譯工具鏈
編譯目標(biāo)文件并復(fù)制到安裝目錄
將整個(gè)/boa目錄復(fù)制到nfs共享根目錄下面3.1.3Boa服務(wù)器移植Boa服務(wù)器移植(方法與流程、配置)城市環(huán)境采集Linux開發(fā)案例HTML源文件3.1.3Boa服務(wù)器移植Boa服務(wù)器測試<html><head><title>CGITEST</title></head><body><h1>TestPage<h1><h2>CGIC<h2></body></html>2)HTML對應(yīng)的CGI源文件intmain(intargc,char**argv){printf("Content-type:text/html\n\n");printf("<html>\n<head><title>CGITEST</title></head>\n<body>\n");printf("<h1>TestPage<h1>\n");printf("<h2>CGIC<h2>\n");printf("</body>\n</html>\n");return0;}可以打開瀏覽器在地址欄中輸入ip/cgi-bin/hello.cgi出現(xiàn)如圖所示,說明cgi功能可以使用。城市環(huán)境采集Linux開發(fā)案例3.1.3Boa服務(wù)器移植Boa服務(wù)器測試3)實(shí)現(xiàn)嵌入式web遠(yuǎn)程控制功能點(diǎn)擊hello~之后服務(wù)器跳轉(zhuǎn),頁面顯示的內(nèi)容如圖所示。(詳細(xì)源碼詳細(xì)請查看文檔)城市環(huán)境采集Linux開發(fā)案例服務(wù)器端與客戶端進(jìn)行交互的常見方式多,CGI是其中之一。CGI是外部擴(kuò)展應(yīng)用程序與Web服務(wù)器交互的一個(gè)標(biāo)準(zhǔn)接口。根據(jù)CGI標(biāo)準(zhǔn),編寫外部擴(kuò)展應(yīng)用程序,可以對客戶端瀏覽器輸入的數(shù)據(jù)進(jìn)行處理,完成客戶端與服務(wù)器的交互操作。CGI規(guī)范定義了Web服務(wù)器如何向擴(kuò)展應(yīng)用程序發(fā)送消息,在收到擴(kuò)展應(yīng)用程序的信息后又如何進(jìn)行處理等內(nèi)容。對于許多靜態(tài)的HTML網(wǎng)頁無法實(shí)現(xiàn)的功能,通過CGI可以實(shí)現(xiàn)表單的處理、對數(shù)據(jù)庫的訪問、搜索引擎、基于Web的數(shù)據(jù)庫訪問等等。3.1.4CGI開發(fā)技術(shù)CGI簡介城市環(huán)境采集Linux開發(fā)案例1)CGI接口CGI程序可以用任何程序設(shè)計(jì)語言編寫,如Shell腳本語言、C語言等。CGI接口標(biāo)準(zhǔn)包括標(biāo)準(zhǔn)輸入、環(huán)境變量、標(biāo)準(zhǔn)輸出三部分。1.標(biāo)準(zhǔn)輸入CGI程序像其他可執(zhí)行程序一樣,可通過標(biāo)準(zhǔn)輸入從Web服務(wù)器得到輸入信息,如Form中的數(shù)據(jù),這是向CGI程序傳遞數(shù)據(jù)的POST方法。在操作系統(tǒng)命令行狀態(tài)可執(zhí)行CGI程序,對CGI程序進(jìn)行調(diào)試。2.環(huán)境變量Web服務(wù)器和CGI接口另外設(shè)置了一些環(huán)境變量,用來向CGI程序傳遞一些重要的參數(shù)。CGI的GET方法還通過環(huán)境變量QUERY-STRING向CGI程序傳遞Form中的數(shù)據(jù)。3.標(biāo)準(zhǔn)輸出CGI程序通過標(biāo)準(zhǔn)輸出將輸出信息傳送給Web服務(wù)器,傳送給Web服務(wù)器的信息可以用各種格式,以在命令行狀態(tài)調(diào)試CGI程序。3.1.4CGI開發(fā)技術(shù)CGI工作原理城市環(huán)境采集Linux開發(fā)案例2)CGI程序?qū)嵗?.1.4CGI開發(fā)技術(shù)CGI工作原理intmain(){intn,len=0;printf("Welcomebackhome/plain\n\n");if(getenv("Welcomebackhome"))n=atoi(getenv("CONTENT-LENGTH"));printf(“Welcomebackhome=%d\n”,n);for(n=0;n<len;n++)printf("CONTENT=%c",getchar());return0;}CGI程序的工作過程總結(jié)如下
1.求出環(huán)境變量長度;
2.循環(huán)使用getchar()或者其他文件讀函數(shù)得到所有的輸入;
3.將輸出信息的格式告訴Web服務(wù)器;
4.通過使用printf()或其他的文件寫函數(shù),將輸出傳送給Web服務(wù)器。
CGI程序從Web服務(wù)器得到輸入信息,進(jìn)行處理,然后將輸出結(jié)果再送回給Web服務(wù)器。城市環(huán)境采集Linux開發(fā)案例用戶通過網(wǎng)頁客戶端(瀏覽器)實(shí)現(xiàn)對服務(wù)器端(嵌入式系統(tǒng))的查詢訪問和下發(fā)數(shù)據(jù)命令,如圖所示。3.1.5開發(fā)實(shí)踐:嵌入式Web服務(wù)器應(yīng)用Boa開發(fā)框架與移植GW3399開發(fā)板CGIBOA服務(wù)器Web網(wǎng)頁客戶端數(shù)據(jù)顯示圖像顯示套接字虛擬文件SOCKET-likeGET方法POST方法每個(gè)網(wǎng)頁上的不同模塊對應(yīng)不同的CGI基于客戶機(jī)/服務(wù)器計(jì)算模型協(xié)議HTTP超文本傳輸協(xié)議傳輸單元:Web網(wǎng)頁城市環(huán)境采集Linux開發(fā)案例
Boa服務(wù)器的源代碼修改與編譯步驟如下:1)將boa文件通過共享文件夾拷貝到PC虛擬機(jī)的/home/目錄;2)然后在/home/boa目錄下面輸入命令進(jìn)行解壓;3)輸入命令配置boa生成Makefile;4)建立交叉編譯開發(fā)環(huán)境,設(shè)置環(huán)境變量5)返回開發(fā)目錄/home/boa/boa-0.94.13,修改CC和GCC對應(yīng)的選項(xiàng)6)修改文件boa/boa-0.94.13/src中compat.h、boa.c和log.c;7)修改完源代碼文件后輸入命令開始編譯源代碼8)通過編譯信息修改錯(cuò)誤;3.1.5開發(fā)實(shí)踐:嵌入式Web服務(wù)器應(yīng)用Boa開發(fā)框架與移植城
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度鋼材行業(yè)展覽展示服務(wù)合同范本3篇
- 2025年度煤礦安全生產(chǎn)應(yīng)急演練服務(wù)合同2025版4篇
- 專業(yè)技術(shù)支持服務(wù)外包合同2024版B版
- 2025年水路貨物運(yùn)輸合同編制與執(zhí)行規(guī)范解讀與應(yīng)用手冊3篇
- 2024石料運(yùn)輸及保險(xiǎn)服務(wù)合同范本3篇
- 2025版旅游包車服務(wù)合同范本4篇
- 2025年舞蹈教育機(jī)構(gòu)舞蹈教師與臨時(shí)工聘用合同3篇
- 二零二五年科技研發(fā)園區(qū)店面租賃及技術(shù)創(chuàng)新合同3篇
- 二零二五版數(shù)據(jù)中心UPS不間斷電源系統(tǒng)全生命周期管理合同3篇
- 二零二五年度酒店式酒店租賃合同示范文本2篇
- 餐飲行業(yè)智慧餐廳管理系統(tǒng)方案
- EGD殺生劑劑化學(xué)品安全技術(shù)說明(MSDS)zj
- GB/T 12229-2005通用閥門碳素鋼鑄件技術(shù)條件
- 超分子化學(xué)-第三章 陰離子的絡(luò)合主體
- 控制變量法教學(xué)課件
- 血壓計(jì)保養(yǎng)記錄表
- 食品的售后服務(wù)承諾書范本范文(通用3篇)
- 新外研版九年級上冊(初三)英語全冊教學(xué)課件PPT
- 初中中考英語總復(fù)習(xí)《代詞動詞連詞數(shù)詞》思維導(dǎo)圖
- 植物和五行關(guān)系解說
- 因式分解法提公因式法公式法
評論
0/150
提交評論