




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2024/3/11達(dá)芬奇培訓(xùn)資料一、概述第2頁(yè)一、概述攝像頭視頻輸出到具有自動(dòng)取景功能的系統(tǒng)中
第3頁(yè)將目標(biāo)的特征圖片預(yù)存到U盤(pán)中
根據(jù)監(jiān)控場(chǎng)所不同可以對(duì)每次保存圖片的個(gè)數(shù)m,保存圖片的間隔n秒進(jìn)行設(shè)置
在攝像頭監(jiān)控視角范圍內(nèi)特征出現(xiàn)時(shí),則按照設(shè)置內(nèi)容對(duì)圖片進(jìn)行保存,且發(fā)出報(bào)警信號(hào)保存在U盤(pán)中的圖片可以在監(jiān)視器上瀏覽、放大且保證一定的清晰度特征查找實(shí)時(shí)性高
通過(guò)按鍵實(shí)現(xiàn)預(yù)存特征圖片,在監(jiān)視器上瀏覽、放大保存的圖片增加OSD顯示
一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第4頁(yè)芯片:DM6446?評(píng)估板:DVEVM?內(nèi)核:MontaVistaLinux?主機(jī):RedhatLinux?仿真器:XDS510USB?軟件:CCS3.2?工具鏈:CodecEngine1.02?C64x+:DSP內(nèi)核,執(zhí)行算法?ARM926EJ‐S:ARM內(nèi)核,主控整個(gè)系統(tǒng)?VPSS:由VPFE和VPBE組成?VICP:視頻圖象協(xié)處理器一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第5頁(yè)DM6446一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第6頁(yè)DM6446一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第7頁(yè)DSPCore?內(nèi)核:C64x升級(jí)到C64x+?指令集:新增ADDSUB2,MAX2,MIN2,DDOTP4,CMPY,DPACK2等指令?片內(nèi)RAM:L1和L2是各自獨(dú)立的,而C64x內(nèi)核中,L1是包含在L2中的?DMA:IDMA+EDMA,支持3D傳輸,QDMA成為EDMA的一部分,PaRAM長(zhǎng)度增加為8個(gè)字長(zhǎng)一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第8頁(yè)ARMCore?內(nèi)核:ARM926EJ‐S?主存:32‐bit,DDR2‐400?EMIF:NorFlash,NandFlash?ATA:HDD,CompactFlash?SDIO:MMC,SD?USB:USB2.0FullSpeed480Mbps?EMAC:10/100MbpsEthernetMACARM一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第9頁(yè)VPSS?VPSS:VideoProcessSub‐System?VPFE:VideoProcessFront‐End?CCDC:用于視頻和圖象的采集,可以直接和CMOS或者CCD傳感器模組相連?H:直方圖統(tǒng)計(jì)?3A:自動(dòng)曝光,自動(dòng)白平衡,自動(dòng)聚焦?Preview:快視預(yù)覽?Resizer:1/4x‐4x的縮放倍數(shù),實(shí)現(xiàn)ZOOM一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第10頁(yè)VPSS?VPSS:VideoProcessSub‐System?VPFE:VideoProcessFront‐End?CCDC:用于視頻和圖象的采集,可以直接和CMOS或者CCD傳感器模組相連?H:直方圖統(tǒng)計(jì)?3A:自動(dòng)曝光,自動(dòng)白平衡,自動(dòng)聚焦?Preview:快視預(yù)覽?Resizer:1/4x‐4x的縮放倍數(shù),實(shí)現(xiàn)ZOOM?VPBE:VideoProcessBack‐End?OSD:用于制作菜單?DAC:4路DAC輸出,支持CVBS格式和S‐Video格式?數(shù)字視頻輸出:支持8‐16bitYUV格式和24bitRGB格式一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第11頁(yè)評(píng)估板:DVEVM?評(píng)估板:DVEVM?附帶攝像頭,模擬屏,紅外遙控器,評(píng)估板各種接口十分齊全?DVEVM上有三個(gè)可編程器件?做為軟硬件協(xié)同開(kāi)發(fā)的分界平臺(tái)?快速評(píng)估軟件和算法的性能一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第12頁(yè)評(píng)估板:DVEVM一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第13頁(yè)內(nèi)核:MontaVistaLinux?MontaVistaLinuxPro?內(nèi)核?文件系統(tǒng)?工具鏈?DVEVM包含三個(gè)組件的評(píng)估版?集成開(kāi)發(fā)環(huán)境-DevRocket(MontaVistaDevRocket圖形開(kāi)發(fā)環(huán)境
)?DVSDK包含四個(gè)組件的企業(yè)版一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第14頁(yè)主機(jī)配置?TFTPServer?NFSServer?Minicom?安裝的時(shí)候禁用防火墻和SELinux一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第15頁(yè)仿真器:XDS560PCI?算法開(kāi)發(fā)流程中的Emulator?算法的功能驗(yàn)證必須通過(guò)仿真器和目標(biāo)板進(jìn)行,一般的,Simulator驗(yàn)證通過(guò)的代碼,Emulator大都正確?底層開(kāi)發(fā)使用,調(diào)試硬件,燒寫(xiě)Flash一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第16頁(yè)軟件:CCS3.2?老版本的CCS不支持C64x+的內(nèi)核?老版本的CCS不支持更高版本的BIOS?我們推薦使用的CCS版本:?CodeComposerStudioVersion?相關(guān)的組件有:?DSPBIOS?CodeGenerateTools?XDCToolsCCS一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第17頁(yè)工具鏈:CodecEngine1.02?CodecEngine簡(jiǎn)稱(chēng)CE?CE是什么??CE能干什么??CE由什么組成??CE怎么使用??沒(méi)有CE能不能開(kāi)發(fā)算法?一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第18頁(yè)工具鏈:CodecEngine1.02?CE是TI提供的一個(gè)軟件架構(gòu)?應(yīng)用軟件通過(guò)CE提供的接口調(diào)用算法?CE同時(shí)支持單核模式和雙核模式?CE可以實(shí)現(xiàn)雙核通信?CE由dsplink,cmem,fc,xdais四個(gè)組件和一組VISA的例程構(gòu)成?沒(méi)有CE,也可以實(shí)現(xiàn)雙核系統(tǒng)的開(kāi)發(fā)一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第19頁(yè)工具鏈:CodecEngine1.02一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第20頁(yè)工具鏈:CodecEngine1.02一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第21頁(yè)工具鏈:CodecEngine1.02一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第22頁(yè)工具鏈:CodecEngine1.02一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第23頁(yè)工具鏈:CodecEngine1.02一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第24頁(yè)工具鏈:CodecEngine1.02一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第25頁(yè)工具鏈:CodecEngine1.02一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第26頁(yè)工具鏈:CodecEngine1.02一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第27頁(yè)工具鏈:CodecEngine1.02一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第28頁(yè)工具鏈:CodecEngine1.02一、達(dá)芬奇簡(jiǎn)介-項(xiàng)目資源第29頁(yè)工具鏈:CodecEngine1.02一、達(dá)芬奇簡(jiǎn)介-完整設(shè)計(jì)流程第30頁(yè)?獲取算法C模型?獲取測(cè)試序列?VC或GCC下編譯算法C模型,并且根據(jù)測(cè)試序列生成輸出標(biāo)準(zhǔn)序列?算法C模型的優(yōu)化?移植到CCS下?算法DSP模型的優(yōu)化一、達(dá)芬奇簡(jiǎn)介-完整設(shè)計(jì)流程第31頁(yè)?獲取算法C模型?獲取測(cè)試序列?VC或GCC下編譯算法C模型,并且根據(jù)測(cè)試序列生成輸出標(biāo)準(zhǔn)序列?算法C模型的優(yōu)化?移植到CCS下?算法DSP模型的優(yōu)化?CCS下用Simulator進(jìn)行仿真?CCS下用Emulator進(jìn)行功能驗(yàn)證?Linux下用CE工具鏈進(jìn)行算法封裝?Linux下用DVEVM進(jìn)行算法功能驗(yàn)證?Linux下進(jìn)行算法可重入的功能驗(yàn)證?Linux下制作算法演示Demo一、達(dá)芬奇簡(jiǎn)介-完整工具鏈第32頁(yè)?DSPBIOS?CodeGenerateTools?XDCTools?FrameworkComponent?Cmem?DSPLink?XDAIS?CodecEngine二、程序架構(gòu)第33頁(yè)三、應(yīng)用程序設(shè)計(jì)第34頁(yè)主線程(main.c)。主線程在初始化完數(shù)據(jù)后就變成控制線程。
程序包含6個(gè)單獨(dú)的POSIX線程
控制線程(ctrl.c)。完成控制功能,主要是遙控器。視頻線程(video.c)。視頻采集線程。視頻顯示線程(display.c)。聲音線程(audio_thread.c)。完成語(yǔ)音報(bào)警功能。其中,video,display,capture,audio線程由main線程在其變?yōu)閏ontrol線程之前創(chuàng)建。在程序執(zhí)行起來(lái)之后,一共有5個(gè)單獨(dú)的線程在運(yùn)行。三、應(yīng)用程序設(shè)計(jì)-目錄第35頁(yè)優(yōu)先級(jí)說(shuō)明
線程初始化清理同步說(shuō)明
各個(gè)線程說(shuō)明
Main線程
Video線程
Control線程Capture線程
Display線程
Audio線程
三、應(yīng)用程序設(shè)計(jì)-優(yōu)先級(jí)說(shuō)明第36頁(yè)三、應(yīng)用程序設(shè)計(jì)-優(yōu)先級(jí)說(shuō)明第37頁(yè)除了main和control線程之外的線程都配置為優(yōu)先的且優(yōu)先策略是(SCHED_FIFO)。SCHED_FIFO(先進(jìn)先出)策略按線程在執(zhí)行前在列表上存在的時(shí)間對(duì)列表上的線程進(jìn)行排序。處于列表首位的線程通常為在列表上存在時(shí)間最長(zhǎng)的線程,而處于末尾的線程在列表上存在的時(shí)間最短。此策略允許一個(gè)線程一直運(yùn)行,直到具有較高優(yōu)先級(jí)的另一個(gè)線程已準(zhǔn)備好運(yùn)行,或者直到當(dāng)前線程自動(dòng)阻止。如果此線程被占據(jù),它就繼續(xù)處于其線程優(yōu)先級(jí)列表的首位;如果此線程阻止,當(dāng)它再次成為一個(gè)可運(yùn)行的線程時(shí),將被添加到此線程所在的優(yōu)先級(jí)列表的末尾。在本工程中,video,capture,display,audio線程分享最高優(yōu)先級(jí),而control線程具有最低優(yōu)先級(jí)。三、應(yīng)用程序設(shè)計(jì)-線程初始化清理同步說(shuō)明第38頁(yè)線程的初始化和清理同步在本程序中使POSIX條件量來(lái)完成。這個(gè)在main線程中初始化。在Rendezvous模塊中:typedefstructRendezvous_Obj{intcount;pthread_mutex_tmutex;pthread_cond_tcond;}Rendezvous_Obj;用count來(lái)表示線程的總數(shù),每初始化完一個(gè)線程的時(shí)候都使count減1表明本線程初始化完畢且等待其他線程。為了避免沖突,使用互斥量來(lái)保護(hù)對(duì)count的操作。三、應(yīng)用程序設(shè)計(jì)-線程初始化清理同步說(shuō)明第39頁(yè)staticinlinevoidRendezvous_meet(Rendezvous_HandlehRv){pthread_mutex_lock(&hRv->mutex);hRv->count--;if(hRv->count>0){pthread_cond_wait(&hRv->cond,&hRv->mutex);}else{pthread_cond_broadcast(&hRv->cond);}pthread_mutex_unlock(&hRv->mutex);}當(dāng)所有線程都初始化完畢后,所有線程同時(shí)解鎖并開(kāi)始執(zhí)行各自的主循環(huán)。對(duì)于線程完成后的清理工作也類(lèi)似。這種對(duì)緩存共享的方法就不會(huì)出現(xiàn)一個(gè)線程對(duì)緩存操作沒(méi)有完成的情況下被其他線程訪問(wèn)。三、應(yīng)用程序設(shè)計(jì)-Main線程第40頁(yè)Main線程主要的任務(wù)是執(zhí)行必要初始化工作,接收命令行參數(shù)并傳遞給其他線程。如圖所示,一開(kāi)始要檢測(cè)視頻標(biāo)準(zhǔn),這個(gè)是在板子上的撥碼開(kāi)關(guān)S3第10個(gè)開(kāi)關(guān),通過(guò)FBDev顯示設(shè)備驅(qū)動(dòng)的FBIO_GETSTDioctl來(lái)得到。令行傳遞語(yǔ)法參數(shù)來(lái)設(shè)置線程環(huán)境。CodecEngine和它的TraceUtil模塊初始化來(lái)跟蹤。Pause模塊用來(lái)處理過(guò)程中的暫停,Rendezvous模塊用來(lái)同步線程的初始化和清理。最后,控制線程controlthread)ctrlThrFxn()被調(diào)用,主要main線程變成control線程。三、應(yīng)用程序設(shè)計(jì)-Control線程第41頁(yè)控制線程負(fù)責(zé)用戶(hù)接口:紅外、OSD顯示菜單、OSD顯示jpeg圖片及jpeg壓縮??刂凭€程也負(fù)責(zé)更新和顯示OSD菜單。在達(dá)芬奇平臺(tái)上,OSD窗口(/dev/fb/0)在視頻顯示(/dev/fb/3)窗口的前端。而控制顯示OSD窗口透明度的是使用屬性窗口(/dev/fb/2)。在屬性窗口中,每個(gè)像素的透明度由一個(gè)元組(4bit)和它的值(0-7)來(lái)控制。控制線程就可以通過(guò)函數(shù)setOsdTransparency()來(lái)設(shè)置OSD窗口的透明度。Control線程的優(yōu)先級(jí)最低三、應(yīng)用程序設(shè)計(jì)-Video線程第42頁(yè)該線程是算法的核心線程,完成檢測(cè)目標(biāo)的任務(wù)。Video線程接收來(lái)自采集線程的每一幀緩沖區(qū),完成目標(biāo)檢測(cè)后把緩沖區(qū)交給display線程的顯示設(shè)備(VPSS后端)來(lái)顯示。
三、應(yīng)用程序設(shè)計(jì)-Video線程第43頁(yè)如圖10所示,video線程的初始化主要完成:創(chuàng)建CodecEngine實(shí)例(Engine_open())。這個(gè)函數(shù)返回一個(gè)句柄,算法實(shí)例化時(shí)使用這個(gè)句柄。創(chuàng)建算法用vdieoEncodeAlgCreate()。該函數(shù)調(diào)用了CCS下編寫(xiě)的算法,在工具鏈(后邊詳細(xì)敘述)封裝好目標(biāo)識(shí)別算法后,vdieoEncodeAlgCreate()函數(shù)中創(chuàng)建算法實(shí)例。該實(shí)例由VIDENC_create()調(diào)用。hEncode=VIDENC_create(hEngine,encoderName,¶ms);其中的參數(shù)params包含了采集視頻的一些參數(shù)。算法使用的數(shù)據(jù)暫存區(qū)和顯示使用的暫存區(qū)使用Memeory_contigAlloc()函數(shù)來(lái)申請(qǐng)。Capture線程使用CAP_BUFFERS個(gè)暫存區(qū)來(lái)采集數(shù)據(jù)并暫存。先使用Memeory_contigAlloc()函數(shù)來(lái)申請(qǐng)內(nèi)存,然后把它們發(fā)送給capture線程來(lái)采集FifoUtil_put()。當(dāng)video線程完成初始化后,就使用Rendezvous模塊跟其它幾個(gè)線程同步。故而,只有當(dāng)所有線程都完成初始化后,video線程才會(huì)進(jìn)入主循環(huán)。三、應(yīng)用程序設(shè)計(jì)-Display線程第44頁(yè)單獨(dú)的顯示線程的目的是為了增加把處理和顯示分開(kāi),它主要負(fù)責(zé)把完成算法后的幀復(fù)制到FBDev顯示設(shè)備的緩沖區(qū)。它允許DSP處理和顯示同步。該線程開(kāi)始執(zhí)行是通過(guò)初始化FBDev顯示設(shè)備驅(qū)動(dòng)(在initDisplayDevice()函數(shù)中)。在這個(gè)函數(shù)中,顯示的分辨率(D1)和每像素比特?cái)?shù)(16)通過(guò)FBIOPUT_VSCREENINFOioctl設(shè)置。在設(shè)置之前,三個(gè)緩沖區(qū)通過(guò)mmap()函數(shù)使它們用戶(hù)空間有效。這些緩沖區(qū)初始化為黑色,因?yàn)橐曨l不一定是滿(mǎn)的D1分辨率。然后一個(gè)Rszcopy工作要?jiǎng)?chuàng)建。Rszcopy模塊使用VPSSresizer模塊來(lái)圖像從源拷貝到目的地而不占用CPU時(shí)間。當(dāng)display線程完成初始化后,就使用Rendezvous模塊跟其它幾個(gè)線程同步。故而,只有當(dāng)所有線程都完成初始化后,display線程才會(huì)進(jìn)入主循環(huán)。三、應(yīng)用程序設(shè)計(jì)-Capture線程第45頁(yè)程序里可以在算法之前使用VPSSresizer模塊來(lái)除去交錯(cuò)現(xiàn)象(blog詳述)。為了讓移除交錯(cuò)現(xiàn)象和DSP處理同步,使用單獨(dú)的capture線程。在video線程處理算法之前,由capture線程來(lái)移除交錯(cuò)現(xiàn)象。首先,由于平滑模塊因?yàn)椴逯档脑蛐枰嗟拇怪毙袛?shù)(EXTRA_ROWS),所以采集的行數(shù)就增加了。可是如果大于480(NTSC)或者576(PAL)是不可能的,因?yàn)?80和576是最大高度,因而最定上的幾行一般在D1顯示屏上不可見(jiàn)。視頻采集設(shè)備通過(guò)initCaptureDevice()函數(shù)初始化。這里的視頻采集設(shè)備是Video4Linux2(v4l2)設(shè)備驅(qū)動(dòng)。在這個(gè)函數(shù)里,用戶(hù)選擇輸入接頭,可以用VIDIOC_S_INPUTioctl來(lái)設(shè)置。同時(shí)視頻采集設(shè)備的能力可以通過(guò)VIDIOC_QUERYCAPioctl來(lái)改正。三、應(yīng)用程序設(shè)計(jì)-Capture線程第46頁(yè)標(biāo)準(zhǔn)視頻(NTSC或PAL)通過(guò)采集設(shè)備被自動(dòng)檢測(cè)。這里格式設(shè)置為D1分辨率,并且通知采集設(shè)備用VIDIOC_S_FMTioctl把兩場(chǎng)合成一幀(V4L2_FIELD_INTERLACED)。然后通過(guò)VIDIOC_S_CROPioctl,采集設(shè)備驅(qū)動(dòng)就被設(shè)置為裁剪D1格式的圖片為用戶(hù)通過(guò)命令行輸入的分辨率。之后,通過(guò)VIDIOC_REQBUFSioctl在采集設(shè)備驅(qū)動(dòng)里分配三個(gè)視頻采集緩沖區(qū),然后通過(guò)mmap()這些緩沖區(qū)就被映射到用戶(hù)處理空間。最后使用VIDIOC_STREAMONioctl來(lái)啟動(dòng)采集。
三、應(yīng)用程序設(shè)計(jì)-Audio線程第47頁(yè)該線程的任務(wù)是在某些情況下發(fā)出聲音。在程序中,聲音是通過(guò)讀取語(yǔ)音文件,之后把讀取的數(shù)據(jù)發(fā)送到聲音設(shè)備驅(qū)動(dòng)。讀取聲音文件是通過(guò)fd=open(“data/alertsound.wav”,O_RDWR)完成,把讀到的數(shù)據(jù)放到inputBuffer中(m=(int)read(fd,inputBuffer,blksize);)把讀到的數(shù)據(jù)寫(xiě)入聲音設(shè)備write(outputFd,outputBuffer,blksize)即可。是否發(fā)出聲音通過(guò)gblGetAudioPlay()來(lái)判斷。三、應(yīng)用程序設(shè)計(jì)-線程間交互第48頁(yè)在開(kāi)始主循環(huán)前,display線程占先視頻緩沖區(qū)。這保證當(dāng)主循環(huán)開(kāi)始的時(shí)候,所有的顯示緩沖區(qū)被display線程占用。結(jié)果就是,DSP的處理可以跟復(fù)制到顯示幀緩沖同步工作,并且系統(tǒng)可以從偶爾的耗時(shí)的幀恢復(fù)。幀被算法檢測(cè)后,隨后就放到顯示緩沖區(qū),并通過(guò)FifoUtil_put()發(fā)送到顯示線程。Display線程的占用通過(guò)Rendezvous來(lái)同步。三、應(yīng)用程序設(shè)計(jì)-線程間交互第49頁(yè)Capture線程的主循環(huán)在一幀數(shù)據(jù)從采集設(shè)備中出列時(shí)開(kāi)始,出列使用VIDIOC_DQBUFioctl,目的是video線程中的緩沖區(qū),它使用FifoUtil_get()。采集幀緩存然后根據(jù)命令行來(lái)選擇是否在把目的緩沖發(fā)送到video線程前除去交錯(cuò)現(xiàn)象。Capture線程然后把采集視頻緩存通過(guò)VIDIOC_QBUFioctl返回給采集設(shè)備驅(qū)動(dòng)。三、應(yīng)用程序設(shè)計(jì)-線程間交互第50頁(yè)Video線程從capture線程接收到一幀數(shù)據(jù)并通過(guò)FifoUtil_get()從display線程得到顯示緩存。采集的幀緩存通過(guò)VIDENC_process()讓DSP處理,然后把這個(gè)緩存用FifoUtil_put()返回給capture線程。經(jīng)過(guò)處理后的緩存就通過(guò)FifoUtol_put()被發(fā)送到display線程來(lái)顯示。三、應(yīng)用程序設(shè)計(jì)-線程間交互第51頁(yè)Display線程通過(guò)FifoUtil_get()接收到處理過(guò)的數(shù)據(jù),并使用VPSSresizer模塊和Rszcopy_execute()把它復(fù)制到FBDev顯示設(shè)備驅(qū)動(dòng)幀緩存。當(dāng)display線程完成復(fù)制緩存,它通過(guò)FBIOPAN_DISPLAYioctl在垂直同步信號(hào)來(lái)時(shí)使新的幀緩存為新的顯示緩存。然后就的帶下一個(gè)垂直同步信號(hào)(FBIO_WAITFORVSYNCioctl)。當(dāng)display線程完成這些,video線程就可以處理下一幀了,這樣就使得ARM和DSP能充分利用。四、工具鏈的建立第52頁(yè)工具鏈?zhǔn)侵傅腖inux下對(duì)程序的編譯環(huán)境。在這里通過(guò)codec_engine_1_02\examples\codecs下的videnc_copy工程封裝CCS下調(diào)試好的程序并生成videnc_copy.a64P,再通過(guò)codec_engine_1_02\examples\servers\video_copy工程把videnc_copy.a64P封裝成all.x64P。最后通過(guò)應(yīng)用程序encodedecode工程調(diào)用all.x64P。
四、工具鏈的建立-步驟第53頁(yè)把ccs下編寫(xiě)好的文件復(fù)制到Linuxcodec_engine_1_02\examples\codecs下的videnc_copy工程中。修改該工程中的package.bld文件,修改varSRCS=[“videnc_copy”,“objectrecognition”];中括號(hào)里只選擇工程下的C文件。修改該文件選擇DSP端只用cgtool來(lái)編譯。
for(vari=0;i<1/*Build.targets.length*/;i++)修改codec_engine_1_02\examples下的user.bld,把linux86注掉,選擇用C64P,跟第二步中對(duì)應(yīng)。Build.targets=[//Linux86,C64P,MVArm9,四、工具鏈的建立-步驟第54頁(yè)
修改DSP算法占用的空間,修改server/all.tcf文件
修改loadmodules.shinsmoddsplinkk.koddr_start=0x8f400000ddr_size=0xA00000在videnc_copy工程文件中調(diào)用算法編譯videnc_copy生成videnc_copy.a64P修改server,編譯生成all.x64P
編譯encodedecode調(diào)用all.x64P五、Jpeg壓縮與解壓縮第55頁(yè)在本工程中用到了Jpeg的壓縮與解壓縮。這里主要使用了jpeglib庫(kù)來(lái)完成壓縮與解壓縮的任務(wù)。具體編程請(qǐng)參考庫(kù)的使用手冊(cè)。
六、視頻格式轉(zhuǎn)換第56頁(yè)在工程中采集的視頻是YUV422格式,Jpeg壓縮時(shí)需要RGB888格式,Jpeg解壓縮完后的格式是RGB565格式,視頻顯示的格式是YUV422,OSD顯示的格式是RGB565格式。而算法處理的數(shù)據(jù)是YCbCr格式且需要抽取單個(gè)顏色空間。所以這里需要多次的格式轉(zhuǎn)換。
(參考轉(zhuǎn)換代碼)六、視頻格式轉(zhuǎn)換-格式介紹第57頁(yè)YUV422。UYVY格式
U00Y00V00Y01U02Y02V02Y02U10Y10V10Y11U12Y12V12Y12U20Y20V20Y21U22Y22V22Y22U30Y30V30Y31U32Y32V32Y32六、視頻格式轉(zhuǎn)換-格式介紹第58頁(yè)RGB888
每格一個(gè)字節(jié).R00G00B00R01G01B01R02G02B02R03G03B03R10G10B10R11G11B11R12G12B12R13G13B13R20G20B20R21G21B21R22G22B22R23G23B23R30G30B30R31G31B31R22G32B32R33G33B33六、視頻格式轉(zhuǎn)換-格式介紹第59頁(yè)RGB565RGB5-6-5bit76543210pG2G1G0R4R3R2R1R0qB4B3B2B1B0G5G4G3六、視頻格式轉(zhuǎn)換-格式介紹第60頁(yè)4L2_PIX_FMT_RGB565
每格一個(gè)字節(jié).p00q00p01q01p02q02p03q03p10q10p11q11p12q12p13q13p20q20p21q21p22q22p23q23p30q30p31q31p32q32p33q33七、達(dá)芬奇OSD第61頁(yè)TMS320DM6446支持背景窗顏色,兩個(gè)視頻窗口,兩個(gè)OSD窗口,一個(gè)指針(cursor)窗口。它們以遞增的順序排列如圖:七、達(dá)芬奇OSD第62頁(yè)一個(gè)特有的第二個(gè)OSD窗口(OSDWIN1)可以用來(lái)配置成屬性窗口來(lái)控制視頻窗口和第一個(gè)OSD窗口(OSDWIN0)的混合(如透明度)。因?yàn)椤癮lpha”混合功能是OSDWIN1最通用的功能,所以以下就主要討論第一個(gè)OSD窗口(OSDWIN0)用來(lái)顯示OSD圖片,以及第二個(gè)OSD窗口(OSDWIN1)用作屬性窗口來(lái)控制混合。
OSD窗口可以配置成接收RGB565或者bitmap數(shù)據(jù)。在這里把第二個(gè)OSD窗口用作屬性窗口,第一個(gè)OSD窗口使用RGB565模式
七、達(dá)芬奇OSD-菜單建立第63頁(yè)根據(jù)要求的菜單樣式,使用一個(gè)鏈表把整個(gè)菜單連接起來(lái),在遙控器的控制通過(guò)OSD繪制當(dāng)前的菜單。對(duì)任何一個(gè)菜單項(xiàng)來(lái)說(shuō),都有一個(gè)鏈表節(jié)點(diǎn)對(duì)應(yīng)。鏈表的結(jié)構(gòu)如下:typedefstructnode{ Intbtindex;structnode*llink,*rlink,*ulink,*dlink,*mlink;}keynode;八、插值算法第64頁(yè)工程中用到了三種插值算法,分別是最近鄰域法、線性插值法和雙立方插值算法。其中最近鄰法速度最快效果最差,線性插值法綜合效果居中,雙立方插值算法效果最好但是速度最慢。這三種算法的使用要根據(jù)算法消耗時(shí)間和效果之間取得平衡。八、插值算法-最近鄰域法第65頁(yè)最臨近插值的思想很簡(jiǎn)單。對(duì)于通過(guò)反向變換得到的一個(gè)浮點(diǎn)坐標(biāo),對(duì)其進(jìn)行簡(jiǎn)單的取整,得到一個(gè)整數(shù)型坐標(biāo),這個(gè)整數(shù)型坐標(biāo)對(duì)應(yīng)的像素值就是目的像素的像素值,也就是說(shuō),取浮點(diǎn)坐標(biāo)最鄰近的左上角點(diǎn)對(duì)應(yīng)的像素值??梢?jiàn),最鄰近插值簡(jiǎn)單且直觀,但得到的圖像質(zhì)量不高。
八、插值算法-雙線性?xún)?nèi)插值第66頁(yè)對(duì)于一個(gè)目的像素,設(shè)置坐標(biāo)通過(guò)反向變換得到的浮點(diǎn)坐標(biāo)為(i+u,j+v),其中i、j均為非負(fù)整數(shù),u、v為[0,1)區(qū)間的浮點(diǎn)數(shù),則這個(gè)像素得值f(i+u,j+v)可由原圖像中坐標(biāo)為(i,j)、(i+1,j)、(i,j+1)、(i+1,j+1)所對(duì)應(yīng)的周?chē)膫€(gè)像素的值決定,即:f(i+u,j+v)=(1-u)(1-v)f(i,j)+(1-u)vf(i,j+1)+u(1-v)f(i+1,j)+uvf(i+1,j+1)其中f(i,j)表示源圖像(i,j)處的的像素值,以此類(lèi)推。這就是雙線性?xún)?nèi)插值法。雙線性?xún)?nèi)插值法計(jì)算量大,但縮放后圖像質(zhì)量高,不會(huì)出現(xiàn)像素值不連續(xù)的的情況。由于雙線性插值具有低通濾波器的性質(zhì),使高頻分量受損,所以可能會(huì)使圖像輪廓在一定程度上變得模糊。八、插值算法-雙三次插值算法第67頁(yè)雙立方插值算法是在水平、垂直和對(duì)角線方向?qū)ο袼厝?,然后使用總顏色的加?quán)平均值建立新像素,它是三者中運(yùn)算速度最慢,但效果最佳的一種。公式如:
九、InterlacedArtifacts第68頁(yè)NTSC/PAL標(biāo)準(zhǔn)定義后,一個(gè)視頻幀分成奇偶兩場(chǎng),每一場(chǎng)采集奇偶行。之后兩場(chǎng)合并形成一幀。NTSC標(biāo)準(zhǔn),視頻幀的采集速率是30f/s,兩場(chǎng)之間的開(kāi)始時(shí)間是16.67ms。PAL標(biāo)準(zhǔn)對(duì)應(yīng)的間隔是20ms。當(dāng)有快速運(yùn)動(dòng)的物體在場(chǎng)景中時(shí),這樣的解決方法導(dǎo)致了隔行掃描偽像。隔行掃描包含對(duì)圖像的兩次掃描,一次掃描捕獲偶數(shù)行,另一次掃描捕獲奇數(shù)行。兩次捕獲以很小時(shí)差分隔開(kāi),然后再合在一起形成一個(gè)完整的幀。在合并這兩部分時(shí),可能會(huì)形成隔行掃描偽信號(hào)。例如,矩形框的垂直邊緣將導(dǎo)致鋸齒效應(yīng)。在不同時(shí)間捕獲一個(gè)運(yùn)動(dòng)視頻目標(biāo)而產(chǎn)生的這種偽信號(hào)被稱(chēng)為隔行掃描偽像。公式如:
隔行偽像不僅降低視覺(jué)效果,而且含有高頻噪聲,它們是逐行掃描編碼器的一個(gè)挑戰(zhàn)。九、InterlacedArtifacts第69頁(yè)如何解決隔行掃描這個(gè)缺點(diǎn)?一個(gè)簡(jiǎn)單的辦法就是把原始圖像中奇場(chǎng)去除,并重新插值得到。這個(gè)方法的一個(gè)缺點(diǎn)是移除奇場(chǎng)導(dǎo)致數(shù)據(jù)量丟失,但是確很容易做到。
輸入的圖像幀數(shù)據(jù)設(shè)置為4:2:2隔行掃描格式如下圖。輸入的視頻格式是NTSCSD或者720*576每幀。輸出格式一致。
UYVY隔行掃描數(shù)據(jù)格式九、InterlacedArtifacts第70頁(yè)基本的想法是丟棄所有奇場(chǎng)的數(shù)據(jù)并插值它們
de-interlace九、InterlacedArtifacts第71頁(yè)使用達(dá)芬奇的Resize功能完成
VPSSresizer是達(dá)芬奇上的一個(gè)硬件,執(zhí)行多相濾波來(lái)完成圖像縮放。它可以完成1/4X到4X的縮放功能。它可以完成隔行掃描的Y/Cb/Cr4:2:2數(shù)據(jù)或者單獨(dú)的一個(gè)顏色平面,如灰度數(shù)據(jù),單獨(dú)的RGB8:8:8數(shù)據(jù)或者Y/Cb/Cr數(shù)據(jù)。如果使用4:2:2隔行掃描格式(由UYVY格式構(gòu)成)的輸入幀,分辨率為每幀720×480像素(NTSCSD)。在去隔行處理中,縮放器首先被告知輸入幀的寬度為724像素,而非實(shí)際的720像素。這是由于為準(zhǔn)確實(shí)現(xiàn)1:1的縮放,DM6446處理器的水平輸入大小必須被調(diào)節(jié)為720+delta,delta由縮放器中的公式計(jì)算求得。接著,縮放器獲知間距是實(shí)際間距的兩倍寬,這樣它就可以把第一組兩個(gè)水平掃描行當(dāng)作一個(gè)來(lái)接收。這使得縮放器可以在偶數(shù)行上實(shí)現(xiàn)1:1的水平縮放,并將奇數(shù)行丟棄(右上角)。輸入和輸出在垂直方向上尺寸分別被設(shè)定為244和480,因此縮放器執(zhí)行1:2的垂直放大以插入被丟棄的奇數(shù)行。然后縮放器被告知輸出幀的寬度是720像素,輸出間距是1440[720+(360×2)]字節(jié),從而形成一個(gè)輸出幀。十、Boot第72頁(yè)Standalone需要的工作
1.燒寫(xiě)u-Boot(什么是u-boot)
2.編譯內(nèi)核
3.創(chuàng)建文件系統(tǒng)(介紹文件系統(tǒng))4.燒寫(xiě)Flash
1.使用ramdisk,燒寫(xiě)到norflash,文件格式ext2
2.Norboot+nandfilesystem
十、Boot-uboot第73頁(yè)U-boot
在目標(biāo)板上先運(yùn)行一個(gè)程序(程序在Flash中),通過(guò)這個(gè)程序以某種交互的方式從HOST將IMAGE下載到RAM中。如通過(guò)串口、USB接口、網(wǎng)絡(luò)接口等方式。這種方式就是bootloader的方式。十、Boot-u-boot第74頁(yè)燒寫(xiě)u-BootTheflashwriter.outfileshouldberunninginTICodeComposerStudio(CCS)SoftwareRequired-U-Bootimage(e.g.file“u-boot.bin”)File“flashwriter.out”in“FlashWrite”directoryinyoursoftwaredisk-CodeComposerStudio(CCS)versionornewer-DaVinciEVMcompatibleemulatordriverforCCSSerialterminalapplicationsuchasHyperTerminal,TeraTermforMSWindows?andMinicomorC-KermitforLinux.十、Boot-u-boot第75頁(yè)燒寫(xiě)u-Boot需要的硬件準(zhǔn)備:-JTAGEmulatorconnectedtoDaVinciEVM-ConnectincludedRS323serialcableto“COM1”portofthePCworkstationand“UART0”portoftheEVM.Theterminalemulationsoftwaresetupis57600baud,8-bitdata,noparity,onestopbitandnoflowcontrol-InspectjumperJ4labeled“CS2SELECT”andmakesure“FLASH”isselected-MakesuretheredS3switchDIPposition1and2arebothsettoOFF十、Boot-u-boot第76頁(yè)燒寫(xiě)u-Boot燒寫(xiě)指令:1)StartCCSandloadflashwriter.out:OpentheARM-sideCCSdebugger.Fromthemenu,clickonFile->LoadProgramandopentheflashwriter.outimageasinthefollowingfigure:十、Boot-u-boot第77頁(yè)燒寫(xiě)u-Boot燒寫(xiě)指令:2)Loadu-boot:
-Runflashwriter.outbyeitherclickingDebug->RunorhittheF5key.Adialogboxwillshowtoaskfortheu-bootfilename.-EnterthelocalWindowspathtotheu-bootfile,suchas“c:\temp\u-boot.bin”.Itwillnowaskyouforasecondparameter,theoffset.Enter0andpressreturn.Theprocessmaytakeseveralminutes.Toverify,here’sCCSscreenaftersuccessfulcompletion:十、Boot-u-boot第78頁(yè)燒寫(xiě)u-Boot十、Boot-u-boot第79頁(yè)燒寫(xiě)u-Boot3)VerifythatU-Bootisworking
YoucannowturnofftheboardandremovetheJTAGcable.MakesureaRS232cableisattachedfromtheboardtoCOM1ofaPCwithaterminalemulationprogramsuchasMicrosoftWindowsXP?HyperTerminalorTeraTerm.Theterminalapplicationsettingsshouldbesetfor57600baudrate,8-bitdata,onestopbit,noparityandnoflowcontrol.Makesurethattheboardisnotturnedon.Settheredswitchinthemiddleoftheboard(S3)to1011111110(1=ON,0=OFF),checktomakesureJ4isselectingFLASHandturnontheboard.Youshouldnowbegreetedwithau-bootpromptonyourserialterminalconsoleasbelow.十、Boot-u-boot第80頁(yè)燒寫(xiě)u-Boot3)VerifythatU-Bootisworking
十、Boot-編譯內(nèi)核第81頁(yè)編譯內(nèi)核
使用:host$makeARCH=armCROSS_COMPILE=arm_v5t_le-davinci_dm644x_defconfig命令可還原默認(rèn)配置。使用makemenuconfig、host$makeARCH=armCROSS_COMPILE=arm_v5t_le-xconfig或者h(yuǎn)ost$makeARCH=armCROSS_COMPILE=arm_v5t_le-gconfig來(lái)進(jìn)行驅(qū)動(dòng)配置。注:resizer驅(qū)動(dòng)的位置在devicedrivers->characterdevices中。用root用戶(hù)進(jìn)行內(nèi)核編譯:host$makeARCH=armCROSS_COMPILE=arm_v5t_le-uImage,可生成uImage文件,其文件路徑為:home/avs/workdir/lsp/ti_davinci/arch/arm/boot/uImage將其拷貝到主機(jī)的/tftpboot目錄下,并使用chmoda+r/tftpboot/uImage命令修改其權(quán)限。十、Boot-編譯內(nèi)核第82頁(yè)編譯一個(gè)支持NAND的新內(nèi)核步驟如下:1、轉(zhuǎn)到linux內(nèi)核所在目錄(LSP):cd/opt/mv_pro_4.0/montavista/pro/devkit/lsp/ti-davinci/加載linux內(nèi)核配置工具:makeARCH=armCROSS_COMPILE=arm_v5t_le-xconfig2、在這個(gè)圖形工具中,可以配置需要的內(nèi)核驅(qū)動(dòng)。比如我們不需要硬盤(pán)支持,那就在DeviceDrivers中,3、選擇“ATA/ATAPI/MFM/RLLSupport”,不選擇主框,把該選項(xiàng)去掉就使得系統(tǒng)不包含硬盤(pán)支持而選擇支持NAND。如圖:十、Boot-編譯內(nèi)核第83頁(yè)十、Boot-編譯內(nèi)核第84頁(yè)4、在MemoryTechnologyDevices(MTD)選項(xiàng)中,找到NANDFlashDeviceDrivers選項(xiàng)。十、Boot-編譯內(nèi)核第85頁(yè)5、保證NANDFlashDevice的選項(xiàng)是一個(gè)對(duì)號(hào)而不是一個(gè)點(diǎn),同時(shí)選擇BootloaderupgradeonNANDDevice十、Boot-編譯內(nèi)核第86頁(yè)6、在root用戶(hù)下編譯新內(nèi)核:makeARCH=armCROSS_COMPILE=arm_v5t_le-uImage十、Boot-創(chuàng)建文件系統(tǒng)第87頁(yè)文件系統(tǒng)類(lèi)型:Linux支持的文件系統(tǒng)為數(shù)眾多,如ext2、vfat、proc、nfs、iso9660等,在嵌入式領(lǐng)域中有Romfs、Cramfs、jffs、jffs2等。十、創(chuàng)建文件系統(tǒng)-RAMdisk第88頁(yè)Ramdisk就是將內(nèi)存的一部分分配為一個(gè)分區(qū)并作為硬盤(pán)來(lái)使用。對(duì)于系統(tǒng)運(yùn)行時(shí)不斷使用的程序,將它們放在Ramdisk中將加快計(jì)算機(jī)的操作,如大數(shù)據(jù)量的網(wǎng)絡(luò)服務(wù)器、無(wú)盤(pán)工作站等。一個(gè)初始化好的RAMdisk依賴(lài)于bootloader(u-boot)在啟動(dòng)時(shí)把它從非易失性存儲(chǔ)器(如NORflash)下載到易失性存儲(chǔ)器中(如DDR)。在RAMdisk中的文件系統(tǒng)是一個(gè)初始化的RAM文件系統(tǒng),或者initrd。這個(gè)文件系統(tǒng)可以掛載為跟文件系統(tǒng)并且應(yīng)用程序可以從它這里執(zhí)行。為了節(jié)省時(shí)間,可以使用DVEVM提供的RAMdisk。它在/opt/mv_pro_4.0/montavista/pro/devkit/arm/v5t_le/images下。在這里,RAMdisk文件是ramdisk.gz(大約2.1MB)。運(yùn)行時(shí),占用DDR大約6.3MB。
十、創(chuàng)建文件系統(tǒng)-RAMdisk第89頁(yè)創(chuàng)建Ramdisk步驟:1、進(jìn)入/mnt工作目錄,建立需要的目錄 $mkdirrdmnt
//新ramdisk掛載的目錄
$mkdirrdimg
//產(chǎn)生的鏡像文件的目錄
$mkdirrdold
//ramdisk舊文件目錄
$mkdirrdold/tmp
//掛載舊ramdisk的目錄2、掛載舊的ramdisk $mount-olooprdold/ramdisk
rdold/tmp3、建立新的ramdisk,并初始化 $ddif=/dev/zeroof=rdimg/ramdisk.imgbs=1kcount=15360
//建立了一個(gè)15M的ramdisk鏡像文件,并用/dev/zero設(shè)備初始化4、為鏡像文件建立文件系統(tǒng) $mke2fs-F-v-m0rdimg/ramdisk.img5、掛載新的ramdisk,如果有文件ramdisk.gz先解壓 $mount-olooprdimg/ramdisk.imgrdmnt6、拷貝需要的文件進(jìn)入新的ramdisk $cp-avrdold/tmp/*rdmnt十、創(chuàng)建文件系統(tǒng)-RAMdisk第90頁(yè)6、拷貝需要的文件進(jìn)入新的ramdisk$cp-avrdold/tmp/*rdmnt7、卸載舊的ramdisk$umountrdold/tmp8、卸載新的ramdisk$umountrdmnt9、把新的ramdisk制成壓縮包$gzip-9rdimg/ramdisk.imgramdisk.gz在此ramdisk.gz即為新建立的ramdisk鏡像十、創(chuàng)建文件系統(tǒng)-RAMdisk第91頁(yè)6、拷貝需要的文件進(jìn)入新的ramdisk$cp-avrdold/tmp/*rdmnt7、卸載舊的ramdisk$umountrdold/tmp8、卸載新的ramdisk$umountrdmnt9、把新的ramdisk制成壓縮包$gzip-9rdimg/ramdisk.imgramdisk.gz在此ramdisk.gz即為新建立的ramdisk鏡像十、創(chuàng)建文件系統(tǒng)-制作jffs2鏡像第92頁(yè)JFFS2是瑞典Axis公司開(kāi)發(fā)的一種基于Flash的日志文件系統(tǒng)。它也是可壓縮的,但壓縮比不及Cramfs的高。但是,它相比于Cramfs的明顯優(yōu)勢(shì)是可讀寫(xiě)。另外JFFS2具有碎片收集功能,并提供崩潰/掉電安全保護(hù),所有這些特點(diǎn)使它成為目前Flash設(shè)備上最流行的文件系統(tǒng)格式。它的缺點(diǎn)是當(dāng)文件系統(tǒng)已滿(mǎn)或接近滿(mǎn)時(shí),JFFS2運(yùn)行會(huì)變慢,這是因?yàn)樗槠占膯?wèn)題。十、創(chuàng)建文件系統(tǒng)-制作jffs2鏡像第93頁(yè)制作jffs2鏡像步驟:mkfs.jffs2–rfilename–oimage.img–-eraseblock=0x8000–size=0x0200–pad=0x1400000實(shí)際用到了:mkfs.jffs2–rram1–oimage.img-e0x8000-s0x0200
十、boot方式第94頁(yè)方案一:使用ramdisk,燒寫(xiě)到norflash,文件格式ext2方案二:Norboot+nandfilesystem十、boot方式-方案一第95頁(yè)說(shuō)明:跳線選擇12連通其它都不連接
Copythekernelimagein/tftpbootdirectory:
host$cp~workdir/lsp/ti-davinci/arch/arm/boot/uImage/tftpbootCopytheinitialRAMdiskfilesystemin/tftpbootdirectory:
host$cp/mnt/def_cd/ramdisk.gz/tftpboot/DownloadtheLinuxkernelviaTFTP:
DVEVM#setenvserverip<tftpserveripaddress>DVEVM#setenvbootfileuImageDVEVM#dhcpDownloadtheRAMdiskfilesystemviaTFTP:
DVEVM#tftp0x85000000ramdisk.gzDeterminethelocationinflashtostoreimage:
EVM#flinfo十、boot方式-方案一第96頁(yè)Erasetheflash:
DVEVM#protectoff0x2050000+0x2FBCA3CopyfromRAMintoflash:
DVEVM#cp.b0x807000000x20500000xc9224
DVEVM#cp.b0x850000000x21192240x232a7fProtecttheflashfromwriting:
DVEVM#protecton0x2050000+0x2FBCA39.SettheU-BootCommandandLinuxKernelCommandLine:DVEVM#setenvbootargsconsole=ttyS0,115200n8ip=dhcproot=/dev/ram0rwinitrd=0x85000000,6MDVEVM#setenvbootcmd‘cp.b0x21192240x850000000x232a7f;bootm0x20500000’10.Now,thesystemisreadytoboot,sosavetheu-bootenvironmentvariable:DVEVM#saveenvDVEVM#boot十、boot方式-方案一第97頁(yè)Linux現(xiàn)在就可以從flash上啟動(dòng),并且根文件系統(tǒng)被掛載到/dev/ram0上。在16MNORflash存儲(chǔ)器上,u-boot、rootfilesystem和壓縮的RAMdisk如表分布。十、boot方式-方案二第98頁(yè)Norboot+nandfilesystem
1、硬件環(huán)境:跳線要正確2、軟件環(huán)境內(nèi)核路徑:主機(jī)上的/home/wangxw/montavista/pro/devkit/lsp/ti-davinci下encodedecoded程序相應(yīng)的程序和工具: 自啟動(dòng)文件系統(tǒng)映像:jffs2_auto.img3、內(nèi)核配置十、boot方式-方案二第99頁(yè)DHCP配置支持自啟動(dòng)的內(nèi)核需要關(guān)閉DHCP相關(guān)選項(xiàng),以實(shí)現(xiàn)在內(nèi)核啟動(dòng)時(shí)不自動(dòng)發(fā)出DHCP請(qǐng)求,選項(xiàng)如圖所示:十、boot方式-方案二第100頁(yè)NFS配置支持JFFS2文件系統(tǒng)自啟動(dòng)的內(nèi)核,需要關(guān)閉NFS相關(guān)選項(xiàng),選項(xiàng)如下圖所示:如果需要打開(kāi)NFS,選項(xiàng)如下圖所示:十、boot方式-方案二第101頁(yè)4、文件系統(tǒng)網(wǎng)絡(luò)配置修改/etc/network/interfaces腳本,如下,設(shè)置的IP地址為
autoeth0ifaceeth0inetstaticaddressnetmasknetwork#optionalbroadcast55#optionalgateway9十、boot方式-方案二第102頁(yè)移植encodedecoded可執(zhí)行環(huán)境到j(luò)ffs2文件系統(tǒng)中:建立/opt/demo文件夾添加/opt/demo需要的文件
all.x64P,data文件夾(alertsound.wav),dsplinkk.ko,loadmodules.sh,unloadmodules.sh,cmemk.ko,davinci_rsz_driver.koencodedecoded,文件(附測(cè)試文件:loopbackCombo.x64P,videoloopd)建立一個(gè)startmy.sh文件,內(nèi)容如下:#!/bin/sh#scripttostartmyprogram:encodedecodedecho"Startencodedecodeprogram..."LD_LIBRARY_PATH=/opt/demomount-tvfat/dev/sda1/mnt/usbcd/opt/demo./loadmodules.sh./encodedecoded十、boot方式-方案二第103頁(yè)把startmy.sh文件復(fù)制到
cpstartmy.sh/mnt/def_cd/ram0/etc/init.d修改屬性:
chmod+x/mnt/def_cd/ram0/etc/init.d/startmy.sh為該文件建立鏈接
host$cd/mnt/def_cd/ram0/etc/rc.d/rcS.dhost$ln–s../init.d/startweb.shS42startweb7.添加需要的庫(kù)文件以及鏈接libfreetype.so.6.3.7libjpeg.so.62.0.0libpng.so.3.0.0libpthread-0.10.solibz.so.等,并為它們建立鏈接
例如:ln–slibfreetype.so.6.3.7libfreetype.so.6根據(jù)encodedecoded文件需要的庫(kù)及鏈接都添加到/lib下十、boot方式-方案二第104頁(yè)5、配置encodedecoded自啟動(dòng)
將需要執(zhí)行的程序?qū)懭肽_本:/etc/rc.d/rc.local,能夠?qū)崿F(xiàn)linux啟動(dòng)之后自動(dòng)運(yùn)行所需程序注意:運(yùn)行程序中如果有讀文件寫(xiě)文件等涉及路徑的操作,需要給出根文件系統(tǒng)下的絕對(duì)路徑.十、boot方式-方案二第105頁(yè)6、制作jffs2鏡像進(jìn)入/home/wangxw/workdir/flash_fs/修改fs_source_pppoe/etc/network/interfaces和interfaces.static文件,將ip地址字段改為需要的數(shù)字(二者的ip地址要相同);制作鏡像: mkfs.jffs2–rfilename–oimage.img–-eraseblock=0x8000–size=0x0200–pad=0x1400000實(shí)際用到了: mkfs.jffs2–rram1–oimage.img-e0x8000–-s0x0200十、boot方式-方案二第106頁(yè)7、BootloaderUboot的啟動(dòng)參數(shù)配置如下:bootdelay=3baudrate=115200bootcmd=bootm02100000ethaddr=00:0E:99:FF:FF:AAbootfile=uImage_newboard_nfsbootargs=console=ttyS0,115200n8root=/dev/mtdblock0rwrootfstype=jffs2mem=34Meth=00:0E:FF:FF:FF:aastdin=serialstdout=serialstderr=serial實(shí)際配置啟動(dòng):setenvbootargsconsole=ttyS0,57600n8video=dm64xxfb:interface=composite:mode=palnoinitrdrwroot=/dev/mtdblock0rwrootfstype=jffs2mem=112Meth=00:0E:FF:FF:FF:85ip=9十、boot方式-方案二第107頁(yè)8、下載燒寫(xiě)內(nèi)核內(nèi)核(NORFlash)燒寫(xiě)過(guò)程:DaVinciEVM#tftpboot0x80700000uImage_newboardDaVinciEVM#erase0x02100000+X(注釋?zhuān)篨為uImage_newboard的大?。〥aVinciEVM#cp.b0x807000000x02100000X(注釋?zhuān)篨值同上)
十、boot方式-方案二第108頁(yè)9、NANDjffs2文件系統(tǒng)燒寫(xiě)過(guò)程方法一EVM板啟動(dòng)參數(shù)設(shè)為nfs啟動(dòng)方式,啟動(dòng)參數(shù)為:console=ttyS0,115200n8noinitrdrwip=dhcproot=/dev/nfsnfsroot=46:/home/wangxw/workdir/filesys,nolockmem=34M。用root登錄之后,出現(xiàn)命令輸入提示符:#cat/proc/mtd#flash_eraseall-j/dev/mtd0#nandwrite-j-p/dev/mtd0/opt/wugh/allen_jffs2.img方法二用uboot的命令燒寫(xiě),方法如同燒寫(xiě)內(nèi)核十一、聲音編程第109頁(yè)OSS(OpenSoundSystem),它由一套完整的內(nèi)核驅(qū)動(dòng)程序模塊組成,可以為絕大多數(shù)聲卡提供統(tǒng)一的編程接口。編程接口:如何對(duì)各種音頻設(shè)備進(jìn)行操作是在Linux上進(jìn)行音頻編程的關(guān)鍵,通過(guò)內(nèi)核提供的一組系統(tǒng)調(diào)用,應(yīng)用程序能夠訪問(wèn)聲卡驅(qū)動(dòng)程序提供的各種音頻設(shè)備接口,這是在Linux下進(jìn)行音頻編程最簡(jiǎn)單也是最直接的方法。十一、聲音編程-編程接口第110頁(yè)open系統(tǒng)調(diào)用訪問(wèn)音頻設(shè)備read系統(tǒng)調(diào)用系統(tǒng)調(diào)用open可以獲得對(duì)聲卡的訪問(wèn)權(quán),同時(shí)還能為隨后的系統(tǒng)調(diào)用做好準(zhǔn)備,其函數(shù)原型如下所示:intopen(constchar*pathname,intflags,intmode);系統(tǒng)調(diào)用read用來(lái)從聲卡讀取數(shù)據(jù),其函數(shù)原型如下所示:intread(intfd,char*buf,size_tcount);十一、聲音編程-編程接口第111頁(yè)write系統(tǒng)調(diào)用訪問(wèn)音頻設(shè)備ioctl系統(tǒng)調(diào)用系統(tǒng)調(diào)用write用來(lái)向聲卡寫(xiě)入數(shù)據(jù),其函數(shù)原型如下所示:size_twrite(intfd,constchar*buf,size_tcount);
系統(tǒng)調(diào)用ioctl可以對(duì)聲卡進(jìn)行控制,凡是對(duì)設(shè)備文件的操作不符合讀/寫(xiě)基本模式的,都是通過(guò)ioctl來(lái)完成的,它可以影響設(shè)備的行為,或者返回設(shè)備的狀態(tài),其函數(shù)原型如下所示:intioctl(intfd,intrequest,...);
十一、聲音編程-編程接口第112頁(yè)close系統(tǒng)調(diào)用訪問(wèn)音頻設(shè)備當(dāng)應(yīng)用程序使用完聲卡之后,需要用close系統(tǒng)調(diào)用將其關(guān)閉,以便及時(shí)釋放占用的硬件資源,其函數(shù)原型如下所示:intclose(intfd);
十一、聲音編程-編程接口第113頁(yè)音頻設(shè)備文件對(duì)于Linux應(yīng)用程序員來(lái)講,音頻編程接口實(shí)際上就是一組音頻設(shè)備文件,通過(guò)它們可以從聲卡讀取數(shù)據(jù),或者向聲卡寫(xiě)入數(shù)據(jù),并且能夠?qū)β暱ㄟM(jìn)行控制,設(shè)置采樣頻率和聲道數(shù)目等等。/dev/dsp
聲卡驅(qū)動(dòng)程序提供的/dev/dsp是用于數(shù)字采樣(sampling)和數(shù)字錄音(recording)的設(shè)備文件,它對(duì)于Linux下的音頻編程來(lái)講非常重要:向該設(shè)備寫(xiě)數(shù)據(jù)即意味著激活聲卡上的D/A轉(zhuǎn)換器進(jìn)行放音,而向該設(shè)備讀數(shù)據(jù)則意味著激活聲卡上的A/D轉(zhuǎn)換器進(jìn)行錄音。目前許多聲卡都提供有多個(gè)數(shù)字采樣設(shè)備,它們?cè)贚inux下可以通過(guò)/dev/dsp1等設(shè)備文件進(jìn)行訪問(wèn)。
十一、聲音編程-應(yīng)用框架第114頁(yè)DSP編程對(duì)聲卡進(jìn)行編程時(shí)首先要做的是打開(kāi)與之對(duì)應(yīng)的硬件設(shè)備,這是借助于open系統(tǒng)調(diào)用來(lái)完成的,并且一般情況下使用的是/dev/dsp文件。inthandle=open("/dev/dsp",O_WRONLY);if(handle=
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 高效團(tuán)隊(duì)合作策略研討會(huì)策劃案
- 9《從軍行》教學(xué)設(shè)計(jì)-2023-2024學(xué)年五年級(jí)下冊(cè)語(yǔ)文統(tǒng)編版
- 2024-2025學(xué)年新教材高中生物 第一章 走近細(xì)胞 第1節(jié) 細(xì)胞是生命活動(dòng)的基本單位(1)教學(xué)實(shí)錄 新人教版必修1
- 延續(xù)性護(hù)理干預(yù)在肺癌化療患者中的應(yīng)用效果觀察
- 8 同學(xué)相伴 教學(xué)設(shè)計(jì)-2024-2025學(xué)年道德與法治三年級(jí)上冊(cè)統(tǒng)編版
- DB3709-T 023-2023 公建民營(yíng)養(yǎng)老機(jī)構(gòu)績(jī)效評(píng)價(jià)規(guī)范
- 2023七年級(jí)數(shù)學(xué)下冊(cè) 第一章 整式的乘除6 完全平方公式第1課時(shí) 完全平方公式的認(rèn)識(shí)教學(xué)實(shí)錄 (新版)北師大版
- 4《梅花魂》教學(xué)設(shè)計(jì)-2023-2024學(xué)年五年級(jí)下冊(cè)語(yǔ)文統(tǒng)編版
- 9《題西林壁》(教學(xué)設(shè)計(jì))2024-2025學(xué)年統(tǒng)編版四年級(jí)語(yǔ)文上冊(cè)
- 5 守株待兔(教學(xué)設(shè)計(jì))-2023-2024學(xué)年語(yǔ)文三年級(jí)下冊(cè)統(tǒng)編版
- 2025年共青科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)完整版
- 2025年上半年潛江市城市建設(shè)發(fā)展集團(tuán)招聘工作人員【52人】易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 統(tǒng)編版語(yǔ)文二年級(jí)下冊(cè)15古詩(shī)二首 《曉出凈慈寺送林子方》公開(kāi)課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
- 旅游電子商務(wù)(第2版) 課件全套 周春林 項(xiàng)目1-8 電子商務(wù)概述-旅游電子商務(wù)數(shù)據(jù)挖掘
- 創(chuàng)新創(chuàng)業(yè)項(xiàng)目計(jì)劃書(shū)撰寫(xiě)
- 2024年上海市楊浦區(qū)復(fù)旦大學(xué)附中自主招生數(shù)學(xué)試卷
- 2025年安徽警官職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)帶答案
- 廣東廣東省錢(qián)幣學(xué)會(huì)招聘筆試歷年參考題庫(kù)附帶答案詳解
- 2025年福建省中職《英語(yǔ)》學(xué)業(yè)水平考試核心考點(diǎn)試題庫(kù)500題(重點(diǎn))
- 【課件】自然環(huán)境課件-2024-2025學(xué)年七年級(jí)地理下冊(cè)人教版
- 《汽車(chē)底盤(pán)構(gòu)造與維修》專(zhuān)業(yè)課程標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論