新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式硬件平臺(tái)的劃片機(jī)視覺系統(tǒng)設(shè)計(jì)

基于嵌入式硬件平臺(tái)的劃片機(jī)視覺系統(tǒng)設(shè)計(jì)

作者: 時(shí)間:2016-12-02 來源:網(wǎng)絡(luò) 收藏

3.2 ARM Linux設(shè)備驅(qū)動(dòng)編寫

Linux的內(nèi)核是由設(shè)備管理、進(jìn)程管理、文件系統(tǒng)和內(nèi)存管理一起組成,Linux設(shè)備驅(qū)動(dòng)可以分為字符類設(shè)備,網(wǎng)絡(luò)接口類設(shè)備,塊類設(shè)備和其他非標(biāo)準(zhǔn)驅(qū)動(dòng)。PCI設(shè)備被看作是字符型設(shè)備。每個(gè)PCI外設(shè)都由一個(gè)總線號(hào)、一個(gè)設(shè)備號(hào)和一個(gè)功能號(hào)來標(biāo)示,共有3個(gè)訪問空間,即I/O端口、內(nèi)存空間和配置寄存器。PCI配置空間由256個(gè)字節(jié)組成,且每個(gè)設(shè)備功能都有一個(gè)配置空間,用于決定PCI器件的工作方式和映射到系統(tǒng)中的地址。

添加系統(tǒng)的PCI設(shè)備驅(qū)動(dòng)主要步驟:

(1)創(chuàng)建1個(gè)PCI設(shè)備,命令:mknod pci_dev c247 0,其中c表示字符設(shè)備,247表示主設(shè)備號(hào),0代表次設(shè)備號(hào)。

(2)初始化外部設(shè)備,將函數(shù)pci_ dev_ init()添加到ARMlinux/linux/drivers/chal/mem.c文件的chr _dev_ init()中,chr _dev _init()將在系統(tǒng)啟動(dòng)時(shí)被調(diào)用,會(huì)完成設(shè)備驅(qū)動(dòng)的初始化工作:

(3)設(shè)備驅(qū)動(dòng)文件pci__dev.c的編寫。設(shè)備注冊(cè)接口函數(shù),中斷處理函數(shù)等構(gòu)成了PCI設(shè)備驅(qū)動(dòng)主要代碼。即file_operationgs根據(jù)S3C2510的PCI配置寄存器所給定的基址來讀寫數(shù)據(jù)。PCI定義的I/O空間是32位地址空間,內(nèi)存和I/O可使用相同的配置接口。

(4)PCI設(shè)備的加載。ARMlinux不支持設(shè)備驅(qū)動(dòng)的動(dòng)態(tài)加載,因此需要把驅(qū)動(dòng)編譯到ARM Linux內(nèi)核中,首先需修改makefile文件,添加下行:obj_$(CONFIG_ PCI_ DEV)+=pci _dev.o接著修改config.in, 添 加 :boolpci _dev installCONFIGPCI DEV,添加這行的目的是為了在配置目標(biāo)板Linux系統(tǒng)內(nèi)核時(shí)以便對(duì)這個(gè)設(shè)備進(jìn)行選擇。最后在目標(biāo)系統(tǒng)的makefile中添加設(shè)備節(jié)點(diǎn):pci _dev,C,247,0這樣在配置Linux內(nèi)核時(shí)就可以選擇pci_dev install,然后進(jìn)行編譯,這樣PCI設(shè)備驅(qū)動(dòng)就加載到了ARM Linux系統(tǒng)中。

4 主控單元圖像采集編程

內(nèi)核針對(duì)數(shù)碼攝像頭等視頻設(shè)備提供V4L函數(shù)接口,V4L提供針對(duì)視頻設(shè)備進(jìn)行基本的I/O操作的接口函數(shù)如:open、read、write、close,中斷處理,內(nèi)存映射及I/O通道的控制ioctl等,并定義在struct file_operations數(shù)據(jù)結(jié)構(gòu)體中。當(dāng)應(yīng)用程序?qū)υO(shè)備進(jìn)行諸如open、read、Write、close等系統(tǒng)調(diào)用操作時(shí),內(nèi)核將通過file_operation結(jié)構(gòu)訪問驅(qū)動(dòng)程序提供的函數(shù)接口.具體的采集程序如下:

PCI接口視頻采集流程如圖5所示。

V4L為視頻采集圖像提供兩種方案①:read()直接讀取,②:mmap()內(nèi)存映射。read()通過內(nèi)存緩沖區(qū)


上一頁 1 2 3 下一頁

評(píng)論


技術(shù)專區(qū)

關(guān)閉