基于嵌入式Linux的視頻采集編碼系統(tǒng)實(shí)現(xiàn)二
Linux 系統(tǒng)通過URB實(shí)現(xiàn)USB 傳輸。為提高有效數(shù)據(jù)的傳輸速度可擴(kuò)大 URB的緩沖來降低每個(gè)USB 事務(wù)中握手信息所占比例。每次 USB 傳輸都需要在操作系統(tǒng)中進(jìn)行URB的建立、發(fā)出、回收和數(shù)據(jù)整理等階段。可建立兩個(gè)URB,當(dāng)?shù)却粋€(gè) URB被回收時(shí),也就是圖像正在被傳感器采集時(shí)同時(shí)處理、初始化另一個(gè) URB,并在回收后立刻將其發(fā)出。兩個(gè)URB交替使用,大大提高了系統(tǒng)處理的時(shí)間效率。
在編譯器部分將 Linux 下的攝像頭驅(qū)動(dòng)程序中Makefile 文件中相關(guān)行修改為CC=/opt/host/armv4l/bin/armv4l-unknown-gcc-linux,修改 Config.in 文件,這樣在配置內(nèi)核的時(shí)候才可以看見驅(qū)動(dòng)程序的名稱。同時(shí)對(duì)下列與處理器相關(guān)的部分進(jìn)行修改,即可實(shí)現(xiàn)對(duì)S3C2440 的USB 驅(qū)動(dòng)的移植。
?。?)PCI 接口處理
由于S3C2440 的USB 主機(jī)控制器不包含 PCI 接口,因此需要?jiǎng)h除 usb-ochi.c中與PCI接口相關(guān)的代碼。
?。?)寄存器地址設(shè)置
在usb-ochi.c中,使S3C2440 的USB 主機(jī)控制器寄存器的起始地址(0x49000000) 初始化ochi->regs。
?。?)主機(jī)控制器中斷設(shè)置
在usb-ochi.c中,使S3C2440 的USB 主機(jī)控制器寄存器的中斷向量初始化 ochi->irq 。
?。?)根HUB端口數(shù)目設(shè)置
在usb-ochi.c 中,定義根HUB的下行端口數(shù)目為 2(#define MAX_ROOT_PORTS
2),MAX_ ROOT_PORTS 的默認(rèn)值為150。
?。?)修改 Makefile和Config.in 文件
修改完成后執(zhí)行 make命令,即可生成所需要的帶有.o 后綴的驅(qū)動(dòng)文件。
驅(qū)動(dòng)程序設(shè)計(jì)完成并編譯成功后,使用動(dòng)態(tài)加載的方法添加到內(nèi)核中。首先在宿主機(jī)上交叉編譯好驅(qū)動(dòng)模塊,然后通過串口下載到開發(fā)板上,再使用 insmod 命令將驅(qū)動(dòng)掛載,攝像頭驅(qū)動(dòng)便可成功添加,通過 lsmod 命令可以查看當(dāng)前馭動(dòng)添加的情況。
4 視頻采集
系統(tǒng)軟件基于VFL 開發(fā),基本流程原理如圖3。其中最關(guān)鍵的步驟就是視頻數(shù)據(jù)的采集,一般有兩種實(shí)現(xiàn)方法,一是直接讀取,二是內(nèi)存映射的方法。
1) 定義數(shù)據(jù)結(jié)構(gòu)
評(píng)論