系統(tǒng)采用的是最普通的USB攝像頭,主芯片為中星微ZC0301P。這種攝象頭的一個特點是可以實現(xiàn)硬件JPEG編碼。其驅動程序的編寫重點包括下面的內容:提供基本的I/O 操作接口函數(shù)open、read、write、close的實現(xiàn)、對中斷的處理實現(xiàn)、內存映射功能以及對I/O 通道的控制接口函數(shù)ioctl的實現(xiàn)等,并把它們定義在struct file_operations中。這樣當應用程序對設備文件進行諸如open、close、read、write等系統(tǒng)調用操作時,Linux內核將通過file_operations結構訪問驅動程序提供的函數(shù)。
當然,現(xiàn)在網上已經有了這種攝象頭的通用驅動,可以從相關網站下載usb-2.4.31.patch.gz,然后將這個補丁打到內核對應的位置即可。但是對有些內核版本的linux系統(tǒng),在打補丁時,會產生 Config.in.rej和Makefile.rej。這時只需要將這兩個文件中修改失敗的部分手動添加到對應的Config.in和Makefile 中去就可以了。
對于已經做過基本移植的linux在配置內核的時有以下幾個方面是值得注意的:
1) 因為要用到內核中的Video4Linux編程接口函數(shù),所以在配置內核時首先必須選中Video for Linux并且最好是直接編譯進內核而不用編譯成模塊的形式再加載;
2) 要選中USB Support、OHCI、UHCI。并在USB Support下的USB Multimedia devices 中選中對應的攝象頭,對本系統(tǒng)來說,選擇USB SPCA5XX Sunplus Vimicro Sonix Cameras,并把它配置成Module。
3) 配置完內核后做make dep, make zImage, make module。則在對應的spca5xx目錄下會生成spc5xx..o,可以把spc5xx..o通過NFS mount到目標板上或者加到主文件系統(tǒng)ramdisk中的某個目錄下。然后在目標板上做 insmod spca5xx.o就會找到攝象頭。
BusyBox v1.00 (2004.10.18-05:07+0000) multi-call binary
Usage: insmod [OPTION]... MODULE [symbol=value]...
Loads the specified kernel modules into the kernel.
Options:
-f Force module to load into the wrong kernel version.
-k Make module autoclean-able.
-v verbose output
-q quiet output
-L Lock to prevent simultaneous loads of a module
-m Output load map to stdout
-o NAME Set internal module name to NAME
-x do not export externs
[root@(none) usr]# insmod spca5xx.o
Using spca5xx.o
insmod: cannot insert `spca5xx.o': Invalid module format (-1): Exec format error
原因:在燒寫之前spca5xx中的Makefile文件中的 “CC=gcc”沒有改成“CC=arm-linux-gcc”,故在目標板上不能運行,應該先改后再make,生成spca5xx.o文件才能燒進板子中。