spca5xx驅(qū)動加載進S3C2410板上
系統(tǒng)采用的是最普通的USB攝像頭,主芯片為中星微ZC0301P。這種攝象頭的一個特點是可以實現(xiàn)硬件JPEG編碼。其驅(qū)動程序的編寫重點包括下面的內(nèi)容:提供基本的I/O 操作接口函數(shù)open、read、write、close的實現(xiàn)、對中斷的處理實現(xiàn)、內(nèi)存映射功能以及對I/O 通道的控制接口函數(shù)ioctl的實現(xiàn)等,并把它們定義在struct file_operations中。這樣當(dāng)應(yīng)用程序?qū)υO(shè)備文件進行諸如open、close、read、write等系統(tǒng)調(diào)用操作時,Linux內(nèi)核將通過file_operations結(jié)構(gòu)訪問驅(qū)動程序提供的函數(shù)。
當(dāng)然,現(xiàn)在網(wǎng)上已經(jīng)有了這種攝象頭的通用驅(qū)動,可以從相關(guān)網(wǎng)站下載usb-2.4.31.patch.gz,然后將這個補丁打到內(nèi)核對應(yīng)的位置即可。但是對有些內(nèi)核版本的linux系統(tǒng),在打補丁時,會產(chǎn)生 Config.in.rej和Makefile.rej。這時只需要將這兩個文件中修改失敗的部分手動添加到對應(yīng)的Config.in和Makefile 中去就可以了。
對于已經(jīng)做過基本移植的linux在配置內(nèi)核的時有以下幾個方面是值得注意的:
1) 因為要用到內(nèi)核中的Video4Linux編程接口函數(shù),所以在配置內(nèi)核時首先必須選中Video for Linux并且最好是直接編譯進內(nèi)核而不用編譯成模塊的形式再加載;
2) 要選中USB Support、OHCI、UHCI。并在USB Support下的USB Multimedia devices 中選中對應(yīng)的攝象頭,對本系統(tǒng)來說,選擇USB SPCA5XX Sunplus Vimicro Sonix Cameras,并把它配置成Module。
3) 配置完內(nèi)核后做make dep, make zImage, make module。則在對應(yīng)的spca5xx目錄下會生成spc5xx..o,可以把spc5xx..o通過NFS mount到目標(biāo)板上或者加到主文件系統(tǒng)ramdisk中的某個目錄下。然后在目標(biāo)板上做 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”,故在目標(biāo)板上不能運行,應(yīng)該先改后再make,生成spca5xx.o文件才能燒進板子中。