国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Cortex-A53的嵌入式圖像采集系統(tǒng)設計

2019-01-11 06:00畢遠偉
智能計算機與應用 2019年1期
關鍵詞:調用內核嵌入式

許 曉, 畢遠偉

(煙臺大學 計算機與控制工程學院, 山東 煙臺 264005)

0 引 言

計算機技術、嵌入式技術和圖像處理技術的日益進步,推動了嵌入式圖像采集系統(tǒng)朝著高速化、集成化、高分辨率、智能化[1]的方向發(fā)展。 目前,嵌入式圖像采集系統(tǒng)正廣泛應用于電子及半導體、包裝、汽車、交通、印刷等領域[2]。 嵌入式圖像采集系統(tǒng)[3]依托于計算機技術和圖像處理技術,為機器視覺的研究和應用提供高品質的本地視頻圖像采集和處理平臺。

傳統(tǒng)的圖像采集系統(tǒng)主要由攝像頭模組和上位機組成。 攝像頭模組只負責圖像采集,后續(xù)的圖像處理依賴上位機,系統(tǒng)的采集模塊和處理模塊相分離,給安裝和操作造成不便。 隨著圖像采集系統(tǒng)的廣泛應用,介紹嵌入式圖像采集系統(tǒng)的資料越來越多,但是相關研究資料中大多采用USB、DVP接口[4]的攝像頭,攝像頭的成像質量和抗干擾性較差。 在嵌入式平臺上, 對MIPI接口攝像頭[5]的開發(fā)工作缺乏相關論文指導。

本文圖像采集系統(tǒng)的處理器選用三星公司的S5P6818。 S5P6818是64位8核Cortex-A53架構的ARM處理器,可穩(wěn)定的運行在1.4 GHz主頻以上,同時具有MIPI和DVP圖像數據輸入接口。 圖像傳感器選用OmniVision公司推出的500萬像素CMOS感光芯片OV5645[6],支持MIPI接口。作者研究并實現了硬件電路設計,OV5645攝像頭驅動編寫[7],并在應用程序中成功通過調用V4L2提供的API實現圖像采集[8,10],完成了基于MIPI接口的嵌入式的圖像采集系統(tǒng)軟硬件實現的全過程。

1 系統(tǒng)硬件設計

1.1 系統(tǒng)硬件組成

嵌入式圖像采集系統(tǒng)按照功能可以劃分為圖像采集模塊、圖像數據處理模塊和通信接口模塊3個部分。 系統(tǒng)的硬件組成框圖如圖1所示。

系統(tǒng)正常工作時,由CMOS圖像傳感器OV5645將光學信號轉換成數字信號,然后利用camera接口將采集到的圖像數據傳至圖像處理模塊,在嵌入式系統(tǒng)上進行圖像處理,如格式轉換、壓縮、保存。 系統(tǒng)可以進一步利用通信接口模塊完成和上位機的數據傳輸。

圖1 系統(tǒng)硬件組成框圖

1.2 MIPI攝像頭接口設計

MIPI(Mobile Industry Processor Interface)是為移動應用處理器制定的開放標準和一個規(guī)范。 其 子協(xié)議CSI是針對攝像頭的高速串行接口應用。 同DVP接口相比較,MIPI接口需要的信號線很少,且信號成對存在。 MIPI接口采用一對同步的差分時鐘和1-4對差分數據線來進行數據傳輸。OV5645的MIPI接口電路如圖2所示。

OV5645支持 (MDP0,MDN0)和(MDP1,MDN1)2對差分數據線。 在傳輸圖像信號時,數據通道工作在高速模式下,此時通道狀態(tài)為差分的0或1。 (MCP,MCN)為OV5645傳輸時鐘的引腳。 SDA和SCL是OV5645的I2C控制信號,用來設置攝像頭的時鐘、圖像輸出格式、分辨率等。 由于MIPI采用差分信號高速傳輸,因此在進行PCB設計時要嚴格按照差分對走線要求,并實現阻抗匹配。

圖2 MIPI接口電路

2 嵌入式Linux開發(fā)環(huán)境搭建

由于本文的開發(fā)環(huán)境是在X86平臺上,而嵌入式Linux操作系統(tǒng)和應用程序最終運行在ARM架構處理器平臺上。因此需要為開發(fā)平臺搭建交叉編譯環(huán)境。 本次設計在虛擬機VMware Workstation上安裝了Ubuntu16.04操作系統(tǒng),所采用編譯器版本為arm-linux-gcc-4.5.1,下載對應版本的安裝包解壓,并添加系統(tǒng)環(huán)境變量就完成了基礎開發(fā)環(huán)境搭建。 嵌入式系統(tǒng)所需的Linux內核、根文件系統(tǒng)和應用程序,需要在該環(huán)境下編譯成功,再燒寫到嵌入式系統(tǒng)上。

3 MIPI攝像頭驅動設計

OV5645屬于視頻輸入設備,其驅動包括2部分的內容: 一是控制接口驅動。 從OV5645的硬件連接電路可知,攝像頭和處理器之間的通信是由I2C總線實現。 OV5645作為I2C從設備,在這一部分主要完成Linux I2C子系統(tǒng)的搭建,為S5P6818與OV5645攝像頭之間的數據交互提供管道。二是實現攝像頭自身功能的驅動部分。這一部分的工作主要圍繞V4L2驅動框架展開,完成video設備驅動,為應用程序提供控制接口。 OV5645攝像頭在Linux內核中的驅動框架如圖3所示。

3.1 I2C子系統(tǒng)搭建

I2C設備驅動是基于總線-設備-驅動模型。其實現過程可以劃分為設備注冊和驅動注冊2個步驟。 圖4為總線設備驅動模型。

I2C設備的注冊就是創(chuàng)建和注冊一個i2c_client的過程。在BSP文件device.c中對struct i2c_board_info填充從設備所需要的id、name、addr、adapter、driver等數據。 在板級初始化時,內核通過調用i2c_register_board_info函數將填充的I2c從設備OV5645的相關信息加入到設備鏈表__i2c_board_list中,調用i2c_get_adapter函數和i2c_new_device函數來指定設備相連的適配器和注冊一個新的I2C設備。

圖3 視頻采集驅動框架

圖4 總線-設備-驅動模型

I2C設備驅動注冊和設備注冊步驟類似,先分配、設置一個i2c_driver的數據結構,實現其成員函數probe、remove、id_table,利用i2c_add_driver函數注冊i2c_driver,最終把驅動程序添加到驅動列表中。

I2C設備注冊和驅動注冊完成后,系統(tǒng)調用I2C總線結構i2c_bus_type提供的match函數比較設備結構i2c_client和驅動結構i2c_driver結構的name是否相同,若相同則調用驅動程序中的probe函數。 I2C設備和I2C設備驅動注冊不分前后,二者的注冊函數都會嘗試進行驅動和設備的綁定。 圖5為I2C設備和驅動匹配的函數調用關系圖。

3.2 V4L2驅動模型

V4L2是Linux下視頻類設備處理模型,為訪問視頻設備提供了通用接口。 V4L2驅動中有3個核心結構體v4l2_device、v4l2_subdev、video_device。 v4l2_device是所有v4l2_subdev的父設備,負責管理注冊在其下面的子設備, v4l2_device通常被嵌入到一個特定的結構體中,在S5P6818中被嵌入到nxp_v4l2中。v4l2_subdev代表子設備,描述了子設備的相關屬性和操作。 video_device結構體用于生成設備節(jié)點。

(a) match過程 (b) probe過程

(a) match process (b) probe process

圖5I2C設備和驅動匹配過程

Fig.5I2Cdeviceanddrivermatchingprocess

驅動程序首先分配設置一個video_device結構體,并重點實現2個操作集:v4l2_file_operations和v4l2_ioctl_ops,然后調用video_register_device函數注冊video設備,最終OV5645以節(jié)點/dev/video1的形式暴露給應用層。

由圖3 Linux內核的視頻采集驅動框架可知,在實現攝像頭OV5645的驅動過程中,其既作為I2C子系統(tǒng)中的從設備i2c_client,又作為V4L2驅動模型中的子設備v4l2_sbudev。二者之間通過初始化函數v4l2_i2c_subdev_init(sd, client, &ov5645_subdev_ops)建立v4l2_subdev和i2c_client聯(lián)系,使得video通過用戶傳入的ioctl命令來對設備進行控制。

4 應用程序設計和測試結果

4.1 應用程序設計

在Linux下,攝像頭OV5645硬件已經被映射為設備文件”/dev/video1”,直接利用open()打開對應的設備文件,通過ioctl函數來控制攝像頭,如設置圖像分辨率、視頻數據格式、開始/結束視頻顯示等。調用V4L2接口進行視頻采集的流程如圖6所示。

在數據采集過程中,驅動程序將采集到的視頻數據存放在內核空間中,此時用戶無法直接訪問。為了獲取相機采集到的視頻數據,V4L2提供了2種方法: 一種是用直接read和write方式。 雖然這種直接把視頻數據從內核空間拷貝到用戶空間的方法比較簡單,但是視頻數據過多,造成了拷貝效率過低以及內核空間的過度占用等問題。 另一種是mmap的方式。 mmap是v4l2_file_operation結構體的成員函數,相機驅動文件通過對v4l2_file_operation數據結構中填充mmap函數,就可以利用mmap函數建立緩沖區(qū)和用戶空間的映射,直接在用戶空間讀取到視頻數據。 同直接讀寫方式相比,利用mmap的方式采集視頻數據不需要從內核拷貝大量的視頻數據,工作效率更高,因此本次設計采用內存映射的方式采集數據。

部分代碼如下:

Buffers[i].start=mmap(NULL,buffers[i].length,PROT_READ|PROT_WRITE,MAP_SHARED,fd_v4l,buffers. offset);

圖6 視頻采集流程圖

4.2 實驗結果

按照上述視頻采集流程,編寫應用程序,利用arm-linux-gcc-4.5.1編譯器交叉編譯后,通過FileZilla下載到飛凌嵌入式提供的開發(fā)板上進行實驗驗證。 最終將采集到的圖像數據壓縮成jpeg格式的圖片并保存為IMGresult. jpg,存放到同級目錄下。將實驗結果上傳到Ubuntu環(huán)境下進行查看結果。圖7為OV5645抓取的圖片效果圖。

圖7 OV5645采集的圖像

5 結束語

本文提出了在Cortex-A53平臺上構建嵌入式圖像采集系統(tǒng)的設計方案。 完成了MIPI接口攝像頭同S5P6818的硬件電路設計,介紹了嵌入式系統(tǒng)開發(fā)環(huán)境的搭建方法,并且詳細介紹基于V4L2驅動框架攝像頭驅動設計和相關工作,實現了調用V4L2提供的接口抓取圖像過程。 對在Linux下進行攝像頭驅動開發(fā)以及相關應用研究有一定指導作用。

猜你喜歡
調用內核嵌入式
基于IMX6ULL的嵌入式根文件系統(tǒng)構建
人民情懷:柳青為文為人的內核(評論)
Focal&Naim同框發(fā)布1000系列嵌入式揚聲器及全新Uniti Atmos流媒體一體機
活化非遺文化 承啟設計內核
微軟發(fā)布新Edge瀏覽器預覽版下載換裝Chrome內核
基于Android Broadcast的短信安全監(jiān)聽系統(tǒng)的設計和實現
利用RFC技術實現SAP系統(tǒng)接口通信
高校圖書館開展嵌入式信息素質教育的思考
C++語言中函數參數傳遞方式剖析
電子設計應用(2004年7期)2004-09-02