Linux人工智能開發實例 課件 第1-4章 嵌入式Linux系統概述-網絡視頻監控Linux開發案例_第1頁
Linux人工智能開發實例 課件 第1-4章 嵌入式Linux系統概述-網絡視頻監控Linux開發案例_第2頁
Linux人工智能開發實例 課件 第1-4章 嵌入式Linux系統概述-網絡視頻監控Linux開發案例_第3頁
Linux人工智能開發實例 課件 第1-4章 嵌入式Linux系統概述-網絡視頻監控Linux開發案例_第4頁
Linux人工智能開發實例 課件 第1-4章 嵌入式Linux系統概述-網絡視頻監控Linux開發案例_第5頁
已閱讀5頁,還剩153頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第1章嵌入式Linux系統概述第1章嵌入式Linux系統概述

1.1嵌入式系統概述嵌入式系統概述隨著計算機技術的飛速發展和嵌入式微處理器的出現,計算機應用出現了歷史性的變化,并逐漸形成了計算機系統的兩大分支:通用計算機系統和嵌入式計算機系統。嵌入式系統早期曾被稱為嵌入式計算機系統或隱藏式計算機,隨著半導體技術及微電子技術的快速發展,嵌入式系統得以風靡式發展,性能不斷提高,以致出現一種觀點,即嵌入式系統通常是基于32位微處理器設計的,往往帶操作系統,本質上是瞄準高端領域和應用的。然而隨著嵌入式系統應用的普及,這種高端應用系統和之前廣泛存在的單片機系統間的本質聯系,使嵌入式系統與單片機毫無疑問地聯系在了一起。1.1.1嵌入式系統概述嵌入式系統概述嵌入式系統是先進的計算機技術、半導體技術和電子技術與各個行業的具體應用相結合的產物,這決定了它是技術密集、資金密集、知識高度分散、不斷創新的集成系統。同時,嵌入式系統又是針對特定的應用需求而設計的專用計算機系統,這也決定了它必然有自己的特點。不同嵌入式系統的具有一定差異,一般來說,嵌入式系統有以下特點:(1)軟/硬件資源有限。過去只在個人計算機PC中安裝的軟件現在也出現在復雜的嵌入式系統中。(2)集成度高、可靠性高、功耗低。(3)有較長的生命周期。嵌入式系統通常與所嵌入的宿主設備具有相同的使用壽命。(4)軟件程序存儲(固化)在存儲芯片上,開發者通常無法改變。(5)嵌入式系統是計算機技術、半導體技術、電子技術和各個行業的應用相結合的產物。(6)一般來說,嵌入式系統并非總是獨立的設備,而是作為某個更大型計算機系統的輔助系統。(7)嵌入式系統通常都與真實物理環境相連,并且是激勵系統。激勵系統處在某一狀態,并且等待著輸入或激發信號,從而完成計算并輸出更新的狀態。1.1.1嵌入式系統概述

嵌入式系統的特點嵌入式系統概述嵌入式系統一般由硬件系統和軟件系統兩大部分組成。其中,硬件系統包括嵌入式微處理器、外設和必要的外圍電路;軟件系統包括嵌入式操作系統和應用軟件。常見嵌入式系統的組成如圖所示。1.1.1嵌入式系統概述

嵌入式系統的組成嵌入式系統概述硬件系統(1)嵌入式微處理器。嵌入式微處理器是嵌入式系統硬件系統的核心,早期嵌入式系統的嵌入式微處理器由(甚至包含幾個芯片的)微處理器來擔任,而如今的嵌入式微處理器一般采用IC(集成電路)芯片形式,可以是ASIC(專用集成電路)或者SoC中的一個核。核是VLSI(超大規模集成電路)上功能電路的一部分。嵌入式微處理器芯片有如下幾種:微處理器、微控制器、數字信號微處理器(DSP)、片上系統和多微處理器和多核微處理器。(2)外設。外設包括存儲器、I/O接口等輔助設備。盡管MCU已經包含了大量外設,但對于需要更多I/O端口和更大存儲能力的大型系統來說,還需要連接額外的I/O端口和存儲器,用于擴展其他功能和提高性能。1.1.1嵌入式系統概述

嵌入式系統的組成嵌入式系統概述軟件系統嵌入式軟件系統可以分成有操作系統和無操作系統兩大類,嵌入式的高級應用,多任務成為基本需求,因此操作系統也是嵌入式系統中的必要組成部分,用于協調多任務。此外,嵌入式軟件中用到的高級語言有:C語言、C++和Java等編程語言。嵌入式軟件系統由應用程序、API、嵌入式操作系統等軟件組成,解決一些在大型計算機軟件中不存在的問題:因經常同時完成若干任務,必須能及時響應外部事件,能在無人干預的條件下處理所有異常和突發情況。1.1.1嵌入式系統概述

嵌入式系統的組成第1章嵌入式Linux系統概述

1.2嵌入式Linux技術嵌入式系統概述Linux是一種類Unix操作系統,是一個基于POSIX和Unix的多用戶、多任務、支持多線程和多CPU的操作系統,支持32位和64位硬件,Linux繼承了Unix以網絡為核心的設計思想,是一種性能穩定的多用戶網絡操作系統。特點如下:1.2.1Linux簡介(1)Linux由眾多微內核組成,其源代碼完全開源;(2)Linux繼承了Unix的特性,具有非常強大的網絡功能,其支持所有的因特網協議,包括TCP/IPv4、TCP/IPv6和鏈路層拓撲程序等,且可以利用Unix的網絡特性開發出新的協議棧;(3)Linux系統工具鏈完整,簡單操作就可以配置出合適的開發環境,可以簡化開發過程,減少開發中仿真工具的障礙,使系統具有較強的移植性;嵌入式系統概述在Linux內核的發展過程中,各種Linux發行版本推動了Linux的應用,從而讓更多的人開始關注Linux。Linux的各個發行版本使用的是同一個Linux內核,因此在內核層不存在什么兼容性問題,每個版本有不一樣的感覺,只在發行版本的最外層才有所體現。幾款常用的Linux發行版本介紹如下:1.2.2Linux發行版(1)RedHatLinuxRedHat公司的產品主要包括RHEL(RedHatEnterpriseLinux)和CentOS(RHEL的社區克隆版本)、FedoraCore(由RedHat桌面版發展而來)。(2)UbuntuLinuxUbuntu基于DebianLinux發展而來,界面友好,容易上手,對硬件的支持非常全面,適合做桌面系統。(3)SuSELinuxSuSELinux以SlackwareLinux為基礎,1994年發行了第一版,2004年被Novell公司收購后,成立了OpenSUSE社區,推出了社區版本OpenSUSE。SuSELinux可以與Windows的交互,擁有界面友好的安裝過程、圖形管理工具。(4)GentooLinuxGentoo最初由DanielRobbins創建,首個穩定版本發布于2002年。嵌入式系統概述利用Linux其自身的許多特點,把它應用到嵌入式系統里,這是Linux做嵌入式的優勢。(1)Linux開放源代碼,眾多Linux愛好者又是Linux開發者的強大技術支持;(2)Linux的內核小、效率高,內核的更新速度很快,linux是可以定制的,其系統內核最小只有約134KB。(3)Linux免費開源,在價格上極具競爭力。Linux還有著嵌入式操作系統所需要的很多特色,Linux適應于多種CPU和多種硬件平臺,是一個跨平臺的系統,且性能穩定,裁剪性很好,開發和使用都很容易。Linux對最常用的TCP/IP協議有最完備的支持。1.2.3嵌入式Linux技術嵌入式系統概述自從20世紀70年代微處理器誕生后,將計算機技術、半導體技術和微電子技術等融合在一起的專用計算機系統,即嵌入式系統,已廣泛地應用于家用電器、航空航天、工業、醫療、汽車、通信、信息技術等領域。各種各樣的嵌入式系統和產品在應用數量上已遠遠超過通用計算機,從日常生活、生產到社會的各個角落,可以說嵌入式系統無處不在。與人們生活緊密相關的幾個應用領域列舉如下。1.2.4嵌入式技術的應用(1)消費類電子產品應用。嵌入式系統在消費類電子產品應用領域的發展最為迅速,而且在這個領域中的嵌入式微處理器的需求量也是最大的。由嵌入式系統構成的消費類電子產品已經成為生活中必不可少的一部分,如智能冰箱、流媒體電視等信息家電產品,以及智能手機、PDA、數碼相機、MP3、MP4等。(2)智能儀器儀表類應用。這類產品可能離日常生活有點距離,但是對于開發人員來說,卻是實驗室里的必備工具,如網絡分析儀、數字示波器、熱成像儀等。通常這些嵌入式設備中都有一個應用微處理器和一個運算微處理器,可以完成數據采集、分析、存儲、打印、顯示等功能。(3)通信信息類產品應用。這些產品多數應用于通信機柜設備中,如路由器、交換機、家庭媒體網關等,在民用市場使用較多的莫過于路由器和交換機了。基于網絡應用的嵌入式系統也非常多,目前市場發展較快的是遠程監控系統等在監控領域中應用的系統。嵌入式系統概述1.2.4嵌入式技術的應用(4)過程控制類應用。過程控制類應用主要是指在工業控制領域中的應用,包括對生產過程中各種動作流程的控制,如流水線檢測、金屬加工控制、汽車電子等。汽車工業在中國已取得了飛速的發展,汽車電子也在這個大發展的背景下迅速成長?,F在,一輛汽車中往往包含有上百個嵌入式系統,它們通過總線相連,實現對汽車各部分的智能控制;車載多媒體系統、車載GPS導航系統等,也都是典型的嵌入式系統應用。(5)航空航天類應用。不僅在低端的民用產品中,在像航空航天這樣的高端應用的中同樣需要大量的嵌入式系統,如火星探測器、火箭發射主控系統、衛星信號測控系統、飛機的控制系統、探月機器人等。我國的探月工程中“嫦娥三號”的探月工程車就是最好的證明。(6)生物微電子類應用。在指紋識別、生物傳感器數據采集等應用中也廣泛采用了嵌入式系統。環境監測已經成為人類必須面對的問題,隨著技術的發展,將來的空氣中、河流中可以用大量的微生物傳感器實時地監測環境狀況,而且還可以把這些數據實時地傳送到環境監測中心,以監測整個生活環境,避免發生更深層次的環境污染。這也許就是將來圍繞在人們生存環境周圍的一個無線環境監測傳感器網絡。嵌入式系統概述1.2.4嵌入式技術的應用(7)嵌入式人工智能技術。深度學習功能已經在許多嵌入式視覺應用中得到應用。所有這些應用程序的共同點是它們通常會生成大量數據,并且經常涉及非工業場景,例如自動駕駛。相關車輛已經配備了許多傳感器和攝像頭,可以從當前的交通狀況中收集數字數據。集成視覺軟件借助深度學習算法實時分析數據流?;谏疃葘W習的嵌入式視覺技術也用于智能城市環境中。在城市某些基礎設施過程,如街道交通,照明和電力供應,以數字網絡化,以便為居民提供特殊服務。最后用于智能家居應用,例如,數字語音助手和機器人真空吸塵器。第2章音頻分析系統Linux開發案例音頻分析系統Linux開發案例本章分析Linux技術在音頻分析系統中的應用,共分2個模塊:1.系統總體設計與Linux驅動開發:先進行系統總體設計分析,分析點陣屏和OLED的Linux驅動開發,并實現顯示模塊驅動開發與測試。2.

音頻分析系統開發:分析音頻頻譜分析和功能開發,音頻處理功能開發和上位機控制應用開發,并實現音頻分析顯示。第2章音頻分析系統Linux開發案例

2.1總體設計與Linux驅動開發音頻分析系統Linux開發案例聲音頻譜分析是考慮人耳對不同頻率成分的聲音的感受的不同,進而通過傅里葉變換等獲得其準確頻譜特性的技術。聲壓頻譜分析是后續聲學分析的基礎,同時在聲學測量,噪聲污染,健康醫療,降噪減噪,故障診斷,國防建設等中都具有重要的應用。本項目從理論分析到硬件及算法設計,分別介紹了基于嵌入式系統的音頻分析系統的實現過程。提出了一套精度較高,運算量較小,實時性較好,可操作性較強的聲學頻譜分析方案。本系統對基于嵌入式系統的聲壓頻率計權、頻譜分析進行了簡單的分析,首先介紹了基于卷積的頻率計權實現及基于傅里葉變換、快速傅里葉變換的聲音頻譜分析方法。2.1.1系統總體設計分析

系統需求分析功能功能說明音頻采集功能通過邊緣計算網關上的麥可風實時采集音頻數據音頻頻譜分析功能對采集音頻數據進行頻譜分析頻譜實時動態顯示功能通過擴展板的點陣屏與OLED屏動態顯示頻率變化Android應用控制功能通過Android應用程序對系統功能進行切換與硬件測試音頻分析系統Linux開發案例音頻分析顯示系統,其硬件主要由邊緣計算網關和Arm擴展模塊構成,通過邊緣計算網關上的麥可風實時采集音頻數據,采集的數據分析處理后由Arm擴展模塊顯示頻譜變化,Android手機可以對設備進行相關的功能切換與控制,硬件結構框圖如圖所示。2.1.1系統總體設計分析

系統總體設計音頻分析系統Linux開發案例音頻分析顯示系統,軟件結構框圖如圖所示。2.1.1系統總體設計分析

系統總體設計音頻分析系統Linux開發案例邊緣計算網關采用工業級鋁合金一體屏設計,AI嵌入式邊緣計算處理器RK3399,4G+16G內存配置,10寸高清電容屏,運行ubuntu、android多操作系統系統,如圖所示。2.1.2開發平臺音頻分析系統Linux開發案例邊緣計算網關提供豐富的外設接口,易于功能擴展,方便開發調試,如圖所示。2.1.2開發平臺智能邊緣計算網關系統啟動進入Ubuntu操作系統界面,如圖所示。音頻分析系統Linux開發案例本項目開發時需要連接ARM擴展模塊,首先從ARM擴展模塊上拆下STM32核心板,然后將ARM擴展模塊與網關的EXT接口連接。連接完成的示意如圖所示。2.1.2開發平臺音頻分析系統Linux開發案例擴展板上的點陣屏需要HT16K33驅動芯片進行控制驅動。HT16K33是一款存儲器映射和多功能LED控制驅動芯片。該芯片支持最大128點的顯示模式(16SEGs×8COMs)以及最大13×3的按鍵矩陣掃描電路。HT16K33的軟件配置特性使其適用于多種LED應用,包括LED模塊和顯示子系統。HT16K33通過雙向I2C接口可與大多數微控制器進行通信。2.1.3點陣屏Linux驅動開發

點陣屏硬件原理音頻分析系統Linux開發案例顯示存儲器–RAM結構●16×8位靜態RAM用于存儲LED顯示數據。對RAM中的某一個位寫“1”則相對應的LEDROW點亮,寫“0”則相對應的LEDROW熄滅?!馬AM地址與行輸出一一對應,一個RAM字中的每個位與縱列輸出一一對應。RAM與LED的映射關系如表2.2所示。2.1.3點陣屏Linux驅動開發

點陣屏硬件原理COMROW0~ROW7ROW8~ROW15COM000H01HCOM102H03HCOM204H05HCOM306H07HCOM408H09HCOM50AH0BHCOM60CH0DHCOM70EH0FHi2c數據字節D7D6D5D4D3D2D1D0ROW7654321015141312111098音頻分析系統Linux開發案例linux內核和芯片提供商為I2C設備的驅動程序提供了I2C驅動的框架,以及框架底層與硬件相關的代碼的實現(完整流程圖請查看文檔)。剩下的就是針對掛載在I2C兩線上的I2C設備了device,而編寫的即具體設備驅動了,這里的設備就是硬件接口外掛載的設備,而非硬件接口本身(soc硬件接口本身的驅動可以理解為總線驅動)2.1.3點陣屏Linux驅動開發

點陣屏Linux驅動程序音頻分析系統Linux開發案例從i2c驅動架構圖中可以看出,linux內核對i2c架構抽象了一個叫核心層core的中間件,它分離了設備驅動devicedriver和硬件控制的實現細節,core層不但為上面的設備驅動提供封裝后的內核注冊函數,而且還為小面的硬件事件提供注冊接口,core層起到了承上啟下的作用。開發I2C驅動時,有4個步驟,前2個步驟屬于I2C總線驅動,后面2個步驟屬于I2C設備驅動。過程如下:2.1.3點陣屏Linux驅動開發

點陣屏Linux驅動程序(1)提供I2C適配器的硬件驅動,探測,初始化I2C適配器,驅動CPU控制的I2C適配器從硬件上產生。(2)提供I2C控制的algorithm,用具體適配器的xxx_xfer()函數填充i2c_algorithm的master_xfer指針,并把i2c_algorithm指針賦給i2c_adapter的algo指針。(3)實現I2C設備驅動中的i2c_driver接口,用具體yyy的yyy_probe(),yyy_remove(),yyy_suspend(),yyy_resume()函數指針和i2c_device_id設備ID表賦給i2c_driver的probe,remove,suspend,resume和id_table指針。(4)實現I2C設備所對應類型的具體驅動,i2c_driver只是實現設備與總線的掛接。音頻分析系統Linux開發案例i2c設備注冊主要定義一些結構體和使用一些API函數。1)在Linux驅動中I2C系統中主要包含以下幾個成員:2.1.3點陣屏Linux驅動開發

點陣屏Linux驅動程序2)板級信息里應該包含I2C的地址和設備名:示例:#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);音頻分析系統Linux開發案例i2c設備注冊主要定義一些結構體和使用一些API函數。3)i2c_get_adapter函數說明:獲取adapter總線上的相應的I2C設備,參數是設備號,舉例如下:2.1.3點陣屏Linux驅動開發

點陣屏Linux驅動程序#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;}音頻分析系統Linux開發案例i2c讀寫接口1)設備讀寫的實現設備讀寫分為兩類,一類是寫命令,一類是寫數據,都是通過i2c_master_send函數來實現。2)i2c_master_send函數的使用2.1.3點陣屏Linux驅動開發

點陣屏Linux驅動程序3)寫命令函數:其實也是調用i2c_master_send函數,比如下面的這個:i2c_master_send(new_client,write_data,2);//向new_client發送write_data內數據先發命令,后數據,2表示發送的大小。staticintht16k33_write_command(charc){ returni2c_master_send(i2c_dev,&c,1);}

音頻分析系統Linux開發案例4)寫數據函數:其實也是調用i2c_master_send函數,比如下面的這個:2.1.3點陣屏Linux驅動開發

點陣屏Linux驅動程序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;}

(點陣驅動代碼詳細請查看文檔)音頻分析系統Linux開發案例點陣屏驅動主要實現對硬件設備的基本控制,具體的功能要由上層應用調用驅動提供的接口對設備進行控制。點陣屏應用功能函數說明如表所示。2.1.3點陣屏Linux驅動開發

點陣屏Linux應用程序函數名稱參數說明函數功能voidled8x8Init(void)無點陣屏初始化staticvoiddumRam(void)無點陣屏顯示Ram數組內容voidled8x8Brightness(intb)b:亮度值點陣屏亮度控制voidled8x8Point(intx,inty,intst)x:行坐標y:列坐標點陣屏設置指定坐標數據voidled8x8Draw(char*buf)buf:顯示緩沖區點陣屏Ram數組從緩沖區取值voidled8x8Clear(void)無點陣屏清屏voidled8x8Flush(void)無點陣屏刷新顯示內容(led8x8.c程序源碼詳細請查看文檔)音頻分析系統Linux開發案例點陣屏應用功能,流程分析:1)led8x8Init()初始化點陣屏硬件;2)led8x8Face(i)設置要顯示的第i類笑臉坐標數據3)led8x8Flush()點陣屏刷新顯示4)sleep(2)休眠2秒鐘5)i值在faces數組有效范圍內加16)返回到2)步驟循環執行2.1.3點陣屏Linux驅動開發

點陣屏Linux應用程序(Led8x8Test.c源碼詳細請查看文檔)音頻分析系統Linux開發案例1、基本結構

OLED器件由基板、陰極、陽極、空穴注入層(HIL)、電子注入層(EIL)、空穴傳輸層(HTL)、電子傳輸層(ETL)、電子阻擋層(EBL)、空穴阻擋層(EBL)、發光層(EML)等部分構成?;迨钦麄€器件的基礎,所有功能層都需要蒸鍍到器件的基板上;通常采用玻璃作為器件的基板。陽極與器件外加驅動電壓的正極相連,陽極中的空穴在外加驅動電壓的驅動下向器件中的發光層移動,陽極需要在器件工作時具有一定的透光性,使得器件內部發出的光能夠被外界觀察到,陽極最常使用的材料是氧化銦錫ITO??昭ㄗ⑷雽涌梢允箒碜躁枠O的空穴順利地注入空穴傳輸層;空穴傳輸層負責將空穴傳輸到發光層;電子阻擋層會把來自陰極的電子阻擋在器件的發光層界面處,從而增大器件發光層界面處電子的濃度。2.1.4OLEDLinux驅動開發OLED的基本結構和發光原理音頻分析系統Linux開發案例1、基本結構OLED器件的結構可分為單層結構、雙層結構、三層結構和多層結構。單層結構只包含基板、陽極、陰極和發光層的結構,由于OLED器件中的材料對電子和空穴有不同的傳輸能力,該結構會使得電子和空穴在發光層界面處的濃度差別很大,導致OLED器件的發光效率較低。雙層結構是指發光層除了具有電子和空穴先通過再結合形成激子然后通過激子退激發光的作用,還具有傳輸電子或傳輸空穴的作用。

三層結構是指器件結構中一般包含有陰極、電子傳輸層、發光層、空穴傳輸層、陽極和基板的OLED器件;三層結構的OLED器件具有更高的電子和空穴傳輸能力,發光效率也更高。多層結構是指OLED器件除具了有三層結構所具有的功能層,還具有電子注入層、空穴注入層、電子阻擋層和空穴阻擋層;由于更多功能層的加入,OLED器件的發光效率更高,但由于器件的厚度增加,需要更高的驅動電壓才能正常工作。2.1.4OLEDLinux驅動開發OLED的基本結構和發光原理音頻分析系統Linux開發案例2.發光原理OLED是一種在外加驅動電壓下可主動發光的器件,無須背光源。OLED基本驅動原理:OLED器件中的電子和空穴在外加驅動電壓的驅動下,從器件的兩極向中間的發光層移動,到達發光層后,在庫侖力的作用下,電子和空穴進行再結合形成激子,激子的產生會活化發光層的有機材料,進而使得有機分子最外層的電子突破最高占有分子軌道(HOMO)能級和最低未占有分子軌道(LUMO)能級之間的能級勢壘,從穩定的基態躍遷到極不穩定的激發態,處于激發態的電子的狀態極不穩定,會通過內轉換回到LUMO能級。2.1.4OLEDLinux驅動開發OLED的基本結構和發光原理音頻分析系統Linux開發案例

OLED器件的驅動方式分為主動式驅動(有源驅動)和被動式驅動(無源驅動)。1.無源驅動無源驅動分為靜態驅動和動態驅動。(1)靜態驅動:在靜態驅動的OLED器件上,一般采用共陰極連接方式,有機電致發光像素的陰極是連在一起引出,陽極是分立引出。若要驅動器件發光,只要讓恒流源的電壓與陰極的電壓之差大于驅動電壓,正向導通后將發光;若要器件不發光,將陽極接在一個負電壓上,反向截止后不能發光。如果圖像變化比較多時,會出現交叉效應,為了避免這種現象,需要采用交流的形式。靜態驅動一般用于段式顯示屏的驅動。(2)動態驅動:在動態驅動時,器件的兩個電極做成了矩陣結構,水平一組顯示像素的相同性質的電極共用,縱向一組顯示像素的相同性質的電極共用。如果器件可分為N行和M列,行和列分別對應發光像素的陰極和陽極。在實際驅動時,要逐行點亮或者要逐列點亮像素,一般采用逐行掃描的方式。2.1.4OLEDLinux驅動開發OLED器件的驅動方式音頻分析系統Linux開發案例2.有源驅動有源驅動的每個像素都配備了具有開關功能的低溫多晶硅薄膜晶體管(TFT),而且每個像素都配備了一個電荷存儲電容,外圍驅動電路和顯示陣列集成在同一玻璃基板上。由于LCD采用電壓驅動,OLED卻依賴電流驅動,因此與LCD相同的TFT結構,無法用于OLED,需要能讓足夠電流通過導通阻抗較小的小型驅動TFT。有源驅動屬于靜態驅動,可進行100%的負載驅動,且不受掃描電極數的限制,可以獨立地對每個像素進行選擇性調節。有源驅動無占空比問題,易于實現高亮度和高分辨率,由于有源驅動可以對紅色像素和藍色像素獨立地進行灰度調節,更有利于OLED彩色化實現。2.1.4OLEDLinux驅動開發OLED器件的驅動方式音頻分析系統Linux開發案例

本項目采用了SSD1306OLED,是一個單片OLED/PLED驅動芯片,可以驅動有機/聚合發光二極管點陣圖形顯示系統,由128列和64行組成,該芯片專為共陰極OLED面板設計。SSD1306中嵌入了對比度控制器、顯示RAM和晶振,從而減少了外部器件和功耗,有256級亮度控制。

數據/命令的發送有三種接口可選擇:6800/8000、I2C或SPI,本節采用I2C接口,驅動指令如表所示。2.1.4OLEDLinux驅動開發OLED硬件音頻分析系統Linux開發案例

2.1.4OLEDLinux驅動開發OLED硬件音頻分析系統Linux開發案例

2.1.4OLEDLinux驅動開發OLED硬件音頻分析系統Linux開發案例

2.1.4OLEDLinux驅動開發OLED硬件OLED顯示技術具有自發光的特性,采用非常薄的有機材料涂層和玻璃基板,當有電流通過時,這些有機材料就會發光,而且OLED顯示屏幕可視角度大,并且能夠節省電能,從2003年開始這種顯示設備在MP3播放器上得到了應用。0.96寸OLED顯示屏接口定義如表所示。引

腳符

號引

腳符

號引

腳符

號1GND2C2P3C2N4C1P5C1N6VDDB7NC8VSS9VDD10BS011BS112BS213CS#14RES#15D/C#16R/W#17E/RD#18D019D120D221D322D423D524D625D726IREF27VCOMH28VCC29VLSS30GND音頻分析系統Linux開發案例

2.1.4OLEDLinux驅動開發OLED硬件OLED驅動方式:模塊的通信接口是通過BS0,BS1,BS2三個管腳來配置的。項目中使用i2c接口進行開發,如表所示。通信方式BS0BS1BS2i2c0103線SPI1004線SPI0008-bit68XX并口0018-bit80XX并口011音頻分析系統Linux開發案例

2.1.4OLEDLinux驅動開發OLED硬件OLED原理圖SCL,SDA對應的是I2C總線2,OLED起始地址0x39。主要是通過SDA,SCL引腳進行通信i2c通信,通過寫命令,寫數據對顯示器進行控制,如圖所示。音頻分析系統Linux開發案例

2.1.4OLEDLinux驅動開發OLEDLinux驅動程序開發I2C驅動時,有4個步驟,前2個步驟屬于I2C總線驅動,后面2個步驟屬于I2C設備驅動。過程如下(具體步驟與LCD類似,請查看源文檔):(1)提供I2C適配器的硬件驅動,探測,初始化I2C適配器,驅動CPU控制的I2C適配器從硬件上產生。(2)提供I2C控制的algorithm,

用具體適配器的xxx_xfer()函數填充i2c_algorithm的master_xfer指針,并把i2c_algorithm指針賦給i2c_adapter的algo指針。(3)實現I2C設備驅動中的i2c_driver接口,用具體yyy的yyy_probe(),yyy_remove(),yyy_suspend(),yyy_resume()函數指針和i2c_device_id設備ID表賦給i2c_driver的probe,remove,suspend,resume和id_table指針。(4)實現I2C設備所對應類型的具體驅動,i2c_driver只是實現設備與總線的掛接。(OLED驅動源碼詳細請查看文檔)音頻分析系統Linux開發案例

2.1.4OLEDLinux驅動開發OLEDLinux應用程序OLED屏驅動主要實現對硬件設備的基本控制,具體的功能要由上層應用調用驅動提供的接口對設備進行控制。OLED屏應用功能函數說明如表所示。(oled源碼源碼詳細請查看文檔)函數名稱參數說明函數功能voidoledInit(void)無OLED屏初始化staticvoiddumRam(void)無OLED屏顯示Ram數組內容voidoledPoint(intx,inty,intst)x:行坐標y:列坐標OLED屏設置指定坐標數據voidoledDraw(char*buf)buf:顯示緩沖區OLED屏Ram數組從緩沖區取值voidoledClear(void)無OLED屏清屏voidoledFlush(void)無OLED屏刷新顯示內容音頻分析系統Linux開發案例

2.1.4OLEDLinux驅動開發OLEDLinux應用程序oled應用功能,流程分析:1)oledInit()初始化點陣屏硬件;2)fontShow16(16,8,"Welcome!",oledPoint)設置要顯示的坐標與字符數據3)oledFlush()刷新顯示(oled源碼源碼詳細請查看文檔)#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;}音頻分析系統Linux開發案例

2.1.5開發實踐:顯示模塊驅動開發與測試1、ARM擴展模塊硬件連接從ARM擴展模塊上拆下STM32核心板,然后將ARM擴展模塊與網關連接,如圖2.4所示,框線內為網關的ARM擴展模塊接口(EXT)。使用交叉網線連接邊緣計算網關(LAN口)和PC,使網關、PC、虛擬機處于統一網段。音頻分析系統Linux開發案例

2.1.5開發實踐:顯示模塊驅動開發與測試2、點陣屏驅動開發1)硬件原理圖音頻分析系統Linux開發案例

2.1.5開發實踐:顯示模塊驅動開發與測試2、點陣屏驅動開發2)硬件說明:點陣屏通過HTML6K33芯片進行驅動,使用i2c接口。3)首先建立交叉編譯開發環境,內核必須是被編譯過的,如果已經建立好了,就不需要再建立了。然后將“FFTDriver”目錄下的ht16k33Driver文件夾拷貝到Linux開發主機中當前用戶文件夾。4)打開終端,進行驅動源碼目錄,輸入make命令,進行編譯(Makefile文件中kernel源碼目錄要確認無誤,否則會編譯報錯)。編譯完成后會生成ht16k33.ko文件。5)通過Moba軟件將成生的驅動程序ht16k33.ko文件復制到邊緣計算網關。通過sudoinsmodht16k33.ko加載驅動。test@rk3399:~$lsht16k33.koht16k33.kotest@rk3399:~$sudoinsmodht16k33.ko6)如果驅動加載成功,可以在/sys目錄查看驅動信息。test@rk3399:~$ls/sys/bus/i2c/devices/i2c-2/2-0070/brightnessbufferdrivermodaliasnamepowersubsystemueventtest@rk3399:~$cat/sys/bus/i2c/devices/i2c-2/2-0070/modaliasi2c:ht16k33音頻分析系統Linux開發案例

2.1.5開發實踐:顯示模塊驅動開發與測試3、點陣屏應用開發與測試1)通過Moba軟件將“FFTDriver”目錄下的ht16k33App文件夾復制到邊緣計算網關。2)在應用程序源碼目錄進行編譯,編譯成功生成測試程序。test@rk3399:~/work/led8x8$lsled8x8.cled8x8.hled8x8Test.cutils.cutils.htest@rk3399:~/work/led8x8$gccled8x8.cutils.cled8x8Test.c-oled8x8Testtest@rk3399:~/work/led8x8$sudo./led8x8Test音頻分析系統Linux開發案例

2.1.5開發實踐:顯示模塊驅動開發與測試3、點陣屏應用開發與測試1)通過Moba軟件將“FFTDriver”目錄下的ht16k33App文件夾復制到邊緣計算網關。2)在應用程序源碼目錄進行編譯,編譯成功生成測試程序。(運行效果如下圖)test@rk3399:~/work/led8x8$lsled8x8.cled8x8.hled8x8Test.cutils.cutils.htest@rk3399:~/work/led8x8$gccled8x8.cutils.cled8x8Test.c-oled8x8Testtest@rk3399:~/work/led8x8$sudo./led8x8Test音頻分析系統Linux開發案例

2.1.5開發實踐:顯示模塊驅動開發與測試5、OLED應用開發與測試1)通過Moba軟件將“FFTDriver”目錄下的ssd1316App文件夾復制到邊緣計算網關。2)在應用程序源碼目錄通過gccfont.cutils.coled.coledTest.c-ooledTest命令進行編譯,編譯成功會生成led8x8Test測試程序。輸入命令sudo./oledTest運行測試。(運行效果如下圖)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音頻分析系統Linux開發案例

2.1.6小結本節學習了音頻分析顯示系統的總體硬件架構與軟件架構。學習了項目使用的智能邊緣計算網關,擴展硬件模塊。學習了項目中點陣屏與OLED屏的硬件原理、驅動程序開發、應用程序開發與測試。音頻分析系統Linux開發案例

2.1.7思考與拓展1、點陣屏如何使用HT16K33芯片進行驅動?2、嘗試使用OLED屏實現右進左出滾動顯示字符串功能?第2章音頻分析系統Linux開發案例

2.2 音頻分析系統開發音頻分析系統Linux開發案例時域描述數學函數或物理信號對時間的關系,例如一個信號的時域波形可以表達信號隨著時間的變化,是真實世界,是惟一實際存在的域。頻域是描述信號在頻率方面特性時用到的一種坐標系。波從時域到頻域的轉換可以通過傅里葉變換實現。傅里葉級數的本質是將一個周期的信號分解成無限多分開的(離散的)正弦波,這種變換是通過一組特殊的正交基來實現。一段波形圖可以分解成不同頻率的波形圖,也就是由時域到頻域的轉換,轉換原理如圖所示。2.2.1頻譜分析顯示功能開發

音頻頻譜分析原理音頻分析系統Linux開發案例音頻分析顯示系統的主程序的功能是通過多線程實現,這樣每個線程可以獨立的處理自己功能,如圖所示。2.2.1頻譜分析顯示功能開發

軟件功能設計(程序源碼詳細請查看文檔)音頻分析系統Linux開發案例ALSA是AdvancedLinuxSoundArchitecture,高級Linux聲音架構的簡稱,它在Linux操作系統上提供了音頻和MIDI(MusicalInstrumentDigitalInterface,音樂設備數字化接口)的支持。ALSA的主要特性包括:高效地支持從消費類入門級聲卡到專業級音頻設備所有類型的音頻接口,完全模塊化的設計,支持對稱多處理(SMP)和線程安全,對OSS的向后兼容,以及提供了用戶空間的alsa-lib庫來簡化應用程序的開發。ALSA是kernel中的一個聲音驅動程序,它包括ALSA核心和其他聲卡的驅動。alsa-utils是ALSA的一個工具包,里面包含有聲卡測試和音頻編輯的工具。arecord,aplay是命令行的ALSA聲卡驅動的錄音和播放工具。arecord是命令行ALSA聲卡驅動的錄音程序,支持多種文件格式和多個聲卡。aplay是命令行播放工具,支持多種文件格式。2.2.2音頻處理功能開發Linux聲卡驅動與調試方法arecord[flags][filename]aplay[flags][filename[filename]]...音頻分析系統Linux開發案例通過運行arecord命令錄音時,錄音數據可以輸出到文件,本項目主要功能是對錄制的音頻數據進行分析,如果數據保存文件再從文件讀取效率很低,這樣采用直接通過本機回環網絡通信的機制高效讀取數據,通過udpfw程序進行網絡輸出udpfw.c程序錄音線程程序源碼:2.2.2音頻處理功能開發

音頻數據處理功能分析//arecord命令錄音,通過udpfw程序進行網絡輸出void*threadRecoder(void*arg){ intpid; charcmd[64]; snprintf(cmd,64,"arecord-r%d-fU8-traw|./udpfw&",SAMPLE); system(cmd);}(完整源碼詳細請查看文檔)

音頻數據轉發程序分析音頻分析系統Linux開發案例根據系統要實現的功能,通信協議設計如表所示。2.2.3上位機控制應用開發

通信協議設計0x5A命令cmd參數param0xA51個字節1個字節0-n個字節1個字節收發方向命令參數說明上位機

設備1無設備發現命令2kv按鍵模擬指令,kv取值1,23x切換到相應的功能,x取值0,1,24yled8x8涂鴉功能y對應led8x8緩存設備

上位機0x81v1,v2設備發現命令響應,v1設備硬件版本版本,v2設備軟件版本音頻分析系統Linux開發案例網絡通信處理線程主要實現的功能是同Android應用程序進行通信,收發處理通信命令,程序源碼如下:2.2.3上位機控制應用開發

網關網絡程序開發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);}

(完整源碼詳細請查看文檔)音頻分析系統Linux開發案例Android應用程序主要是提供一個操作界面,通過Android的網絡功能查找局域網中運行音頻分析系統應用的智能網關設備,搜索到設備后顯示IP地址,用戶點擊IP址址進入音頻分析設備控制界面。AndroidStudio開發環境中看到的本項目的工程目錄如圖所示。2.2.3上位機控制應用開發Android應用開發(完整源碼詳細請查看文檔)音頻分析系統Linux開發案例音頻分析設備控制界面主要有兩大功能,一個是頻譜分析顯示,一個是設備測試功能。點擊界面上的“功能”按鈕可以在頻譜與測試功能間切換。1)在頻譜功能下,點擊“樣式”可以切換線條、雪花、塊狀不同的顯示樣式。2)進入測試功能時,OLED屏幕會顯示當前軟件版本號,單擊軟件界面上的8x8模擬點陣屏中的某個小點,擴展板點陣屏可以同步操作。2.2.3上位機控制應用開發Android應用開發(完整源碼詳細請查看文檔)包名(類名)說明com.zonesion.udp.demo應用包DeviceActivity.java主界面類MainActivity.java創建Socket,向服務端發送請求音頻分析系統Linux開發案例1、ARM擴展模塊硬件連接2.2.4開發實踐:音頻分析顯示2、聲卡驅動與測試網關驅動程序開發與測試需要ARM擴展模塊,參考“1.1.5開發實踐:顯示模塊驅動開發與測試”。通過Moba應用程序的SSH功能登錄邊緣計算網關,輸入錄音命令:arecord-r22000-fU8-trawtest.raw-r22000設置采樣率,-fU8設置格式,-traw文件類型,test.raw錄音文件名稱。打開邊緣計算網關的聲音設置,如果錄音程序啟動成功,在錄音選項可以看到錄音設備,對著邊緣網關大聲說話,可以看到采集的音量大小變化,如圖所示。音頻分析系統Linux開發案例3、音頻分析應用程序測試2.2.4開發實踐:音頻分析顯示1)通過Moba軟件將“FFTDriver”目錄下的fft-test文件夾復制到邊緣計算網關。fft-test文件夾中是音頻分析應用程序的全部源碼與編譯規則文件,如圖2.24所示。音頻分析系統Linux開發案例3、音頻分析應用程序測試2.2.4開發實踐:音頻分析顯示2)在應用程序源碼目錄通過make命令進行編譯,make命令會使用當前目錄下的Makefile文件中編譯規則對程序進行編譯。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音頻分析系統Linux開發案例3、音頻分析應用程序測試2.2.4開發實踐:音頻分析顯示3)因為程序中要調用錄音功能,在SSH遠程登錄中運行會有權限問題,需要直接在網關上運行或通過Moba軟件的VNC遠程桌面中去運行。在遠程桌面的終端中輸入命令sudo./fftApp運行測試,如圖所示。音頻分析系統Linux開發案例3、音頻分析應用程序測試2.2.4開發實踐:音頻分析顯示4)Android應用測試。在Android終端(手機與平板)上安裝“FFTDriver”目錄下的demo.apk應用程序。邊緣計算網關與Android終端接入同一個局域網中,打開Android終端中應用程序,會搜索當前網絡中的網關設備,顯示其IP地址與軟硬件版本號,點擊IP址進入網關設備控制界面,如圖所示。音頻分析系統Linux開發案例3、音頻分析應用程序測試2.2.4開發實踐:音頻分析顯示4)Android應用測試。點擊“功能”按鈕可以在頻譜與測試功能間切換,進入“測試”功能時,OLED屏幕會顯示當前軟件版本號,單擊軟件界面上的8x8模擬點陣屏中的某個小點,擴展板點陣屏可以同步操作,如圖所示。音頻分析系統Linux開發案例

2.2.5小結本節學習了項目中的核心功能音頻頻譜分析的原理,對智能網關運行的主程序多線程的功能模塊分別進行介紹與代碼分析。學習了對智能網關與Android設備間的通信協議設計進行分析講解。分析了網關上網絡通信處理線程,介紹了Android應用的程序功能與結果,通過開發實踐完成整個項目的運行與測試。音頻分析系統Linux開發案例

2.2.6思考與拓展1、項目中通過arecord命令進行音頻錄制后,為什么要把音頻數據通過網絡轉發?2、Android應用程序是通過什么機制查找智能網關設備?第3章城市環境采集Linux開發案例城市環境采集Linux開發案例本章分析Linux技術在城市環境采集中的應用,共分2個模塊:1.系統總體設計與Linux驅動開發:先進行系統總體設計分析,嵌入式Web服務器應用、Boa服務器移植、CGI開發技術,實現嵌入式Web服務器應用開發。2.城市揚塵監測系統開發:軟件界面框架分析、TVOCLinux驅動開發、LEDLinux驅動開發、PWMLinux驅動開發、揚塵檢測功能設計,實現揚塵檢測系統。第3章城市環境采集Linux開發案例

3.1系統總體設計與Linux驅動開發城市環境采集Linux開發案例嵌入式Web服務器,是基于嵌入式系統而實現的Web服務器。很好理解,拆分成兩個部分,Web服務器+嵌入式。Web服務器,即通常所說的網頁服務器。用IE等瀏覽器訪問時,網頁內容儲存的地方就叫做Web服務器。大型的網站等,對服務器的硬件要求比較高,可以支持成千上萬個客戶端同時訪問,而且速度要快。嵌入式Web服務器,是Web服務器當中的一種。在嵌入式系統上實現的一個Web服務器,可以通過瀏覽器等去訪問,對硬件要求稍微低一點。舉個簡單的例子,用的路由器,就是一個典型的嵌入式Web服務器,通過等可以直接訪問。本項目是嵌入式Linux中使用Web服務器的應用示例,利用嵌入式Linux和網絡技術結合,實現采集遠程的設備數據,通過互聯網達到遠程監控設備的目的,功能需求分析如表所示。3.1.1系統總體設計分析

系統需求分析功能功能說明TVOC氣體傳感器采集功能通過Arm擴展模塊的TVOC傳感器采集氣體數據揚塵等級實時動態顯示功能通過擴展板的點陣屏、OLED屏以及LED等動態顯示等級變化web應用控制功能通過web應用程序對系統采集的氣體數據通過儀表盤、曲線圖以及地圖進行顯示城市環境采集Linux開發案例城市環境采集系統,其硬件主要邊緣計算網關、Arm擴展模塊構成。硬件結構框圖如下:網關連接Arm擴展模塊的TVOC傳感器實時采集氣體數據,PC端的WEB管理界面可實時查看傳感數據以及歷史數據,硬件結構框圖如圖所示。3.1.1系統總體設計分析

系統總體設計城市環境采集Linux開發案例城市環境采集系統,其軟件模塊主要由硬件驅動程序、Boa服務軟件、PC端Web管理軟件構成,軟件總體結構框圖如圖所示。3.1.1系統總體設計分析

系統總體設計城市環境采集Linux開發案例LighttpdLibHttpd是一個開源輕量級嵌入式Webserver,提供一個專門針對高性能網站,安全、快速、兼容性好并且靈活的webserver環境。lighttpd適合靜態資源類的服務,比如圖片、資源文件,同時也適合簡單的CGI(CommonGatewayInterface)公共網關接口應用的場合。ShttpdShttpd,持CGI,SSL,cookie,MD5認證,由于shttpd可以輕松嵌入其他程序里,因此shttpd是較為理想的webserver開發素材,開發人員可以基于shttpd開發出自己的webserver。ThttpdThttpd是一種開源Web服務器,簡單、小巧、易移植、快速和安全的HTTP服務器。對于并發請求不使用fork()來派生子進程處理,而是采用多路復用技術來實現。BoaBoa服務器是一個小巧高效的Web服務器,支持CGI的、適合于嵌入式系統的單任務的http服務器,源代碼開放、性能高。作為一種單任務Web服務器,Boa只能依次完成用戶的請求,而不會fork出新的進程來處理并發連接請求。但Boa支持CGI,能夠為CGI程序fork出一個進程來執行。3.1.2嵌入式Web服務器應用

常見嵌入式Web服務器城市環境采集Linux開發案例Mini_httpdMini_httpd是一個小型的HTTP服務器,開源,適合于中小訪問量的站點。AppwebAppweb是一個快速、低內存使用量、標準庫、方便的服務器,最大特點就是功能多和高度的安全保障。GoAheadGoAhead是跨平臺的服務器軟件,可以穩定地運行在Windows,Linux和MacOSX操作系統之上。3.1.2嵌入式Web服務器應用

常見嵌入式Web服務器城市環境采集Linux開發案例Boa是一種單任務的Web服務器,當有連接請求到來時,它并不為每個連接單獨創建進程,也不通過復制自身進程來處理多連接,而是通過建立HTTP請求列表來處理多路HTTP連接請求,同時它只為CGI程序創建新進程,因此,Boa具有很高的HTTP請求處理速度和效率。嵌入式Web服務器Boa和普通Web服務器一樣,能夠完成接收客戶端請求、分析請求、響應請求、向客戶端返回請求結果等任務,它的工作過程主要包括:3.1.2嵌入式Web服務器應用Boa服務器(1)完成Web服務器的初始化工作,如創建環境變量、創建TCP套接字、綁定端口、開始偵聽、進入循環結構,以及等待接收客戶瀏覽器的連接請求;(2)當有客戶端連接請求時,Web服務器負責接收客戶端請求,并保存相關請求信息;(3)在接收到客戶端的連接請求之后,分析客戶端請求,解析出請求的方法、URL目標、可選的查詢信息及表單信息,同時根據請求做出相應的處理;(4)Web服務器完成相應處理后,向客戶端瀏覽器發送響應信息,關閉與客戶機的TCP連接。城市環境采集Linux開發案例(1)移植Boa服務器過程

解壓文件,并進入./boa/src目錄

執行./configure配置編譯環境

make編譯源代碼,修改錯誤

創建boa安裝目錄/boa

修改defines.h文件中的SERVER_ROOT,使其指向改動后的配置文件路徑

復制必要的文件到安裝目錄

修改boa配置文件

實現HTML頁面文件(2)移植到嵌入式開發板

在源代碼編譯的時候,指定交叉編譯工具鏈

編譯目標文件并復制到安裝目錄

將整個/boa目錄復制到nfs共享根目錄下面3.1.3Boa服務器移植Boa服務器移植(方法與流程、配置)城市環境采集Linux開發案例HTML源文件3.1.3Boa服務器移植Boa服務器測試<html><head><title>CGITEST</title></head><body><h1>TestPage<h1><h2>CGIC<h2></body></html>2)HTML對應的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出現如圖所示,說明cgi功能可以使用。城市環境采集Linux開發案例3.1.3Boa服務器移植Boa服務器測試3)實現嵌入式web遠程控制功能點擊hello~之后服務器跳轉,頁面顯示的內容如圖所示。(詳細源碼詳細請查看文檔)城市環境采集Linux開發案例服務器端與客戶端進行交互的常見方式多,CGI是其中之一。CGI是外部擴展應用程序與Web服務器交互的一個標準接口。根據CGI標準,編寫外部擴展應用程序,可以對客戶端瀏覽器輸入的數據進行處理,完成客戶端與服務器的交互操作。CGI規范定義了Web服務器如何向擴展應用程序發送消息,在收到擴展應用程序的信息后又如何進行處理等內容。對于許多靜態的HTML網頁無法實現的功能,通過CGI可以實現表單的處理、對數據庫的訪問、搜索引擎、基于Web的數據庫訪問等等。3.1.4CGI開發技術CGI簡介城市環境采集Linux開發案例1)CGI接口CGI程序可以用任何程序設計語言編寫,如Shell腳本語言、C語言等。CGI接口標準包括標準輸入、環境變量、標準輸出三部分。1.標準輸入CGI程序像其他可執行程序一樣,可通過標準輸入從Web服務器得到輸入信息,如Form中的數據,這是向CGI程序傳遞數據的POST方法。在操作系統命令行狀態可執行CGI程序,對CGI程序進行調試。2.環境變量Web服務器和CGI接口另外設置了一些環境變量,用來向CGI程序傳遞一些重要的參數。CGI的GET方法還通過環境變量QUERY-STRING向CGI程序傳遞Form中的數據。3.標準輸出CGI程序通過標準輸出將輸出信息傳送給Web服務器,傳送給Web服務器的信息可以用各種格式,以在命令行狀態調試CGI程序。3.1.4CGI開發技術CGI工作原理城市環境采集Linux開發案例2)CGI程序實例3.1.4CGI開發技術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程序的工作過程總結如下

1.求出環境變量長度;

2.循環使用getchar()或者其他文件讀函數得到所有的輸入;

3.將輸出信息的格式告訴Web服務器;

4.通過使用printf()或其他的文件寫函數,將輸出傳送給Web服務器。

CGI程序從Web服務器得到輸入信息,進行處理,然后將輸出結果再送回給Web服務器。城市環境采集Linux開發案例用戶通過網頁客戶端(瀏覽器)實現對服務器端(嵌入式系統)的查詢訪問和下發數據命令,如圖所示。3.1.5開發實踐:嵌入式Web服務器應用Boa開發框架與移植GW3399開發板CGIBOA服務器Web網頁客戶端數據顯示圖像顯示套接字虛擬文件SOCKET-likeGET方法POST方法每個網頁上的不同模塊對應不同的CGI基于客戶機/服務器計算模型協議HTTP超文本傳輸協議傳輸單元:Web網頁城市環境采集Linux開發案例

Boa服務器的源代碼修改與編譯步驟如下:1)將boa文件通過共享文件夾拷貝到PC虛擬機的/home/目錄;2)然后在/home/boa目錄下面輸入命令進行解壓;3)輸入命令配置boa生成Makefile;4)建立交叉編譯開發環境,設置環境變量5)返回開發目錄/home/boa/boa-0.94.13,修改CC和GCC對應的選項6)修改文件boa/boa-0.94.13/src中compat.h、boa.c和log.c;7)修改完源代碼文件后輸入命令開始編譯源代碼8)通過編譯信息修改錯誤;3.1.5開發實踐:嵌入式Web服務器應用Boa開發框架與移植城

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論