andriod之攝像頭驅動流程

2022-05-10 19:40:44 字數 1478 閱讀 8498

camera成像原理:

景物通過鏡頭生產光學影象投射到sensor表面上,然後轉為模擬電訊號,經過數模變成數字影象訊號,在經過dsp加工出來,然後在通過io介面傳輸到cpu處理。  

由於攝像頭滿足匯流排、驅動、裝置模型,那麼看看andorid是怎麼去實現攝像頭的流程。

1.  註冊camera的platform平台裝置

點選(此處)摺疊或開啟

camera_hw_i2c_init

platform_driver_register(&g_stcamera_hw_driver)

static struct platform_driver g_stcamera_hw_driver =

};2.  註冊camera的platform平台裝置驅動

點選(此處)摺疊或開啟

platform_device_register(&sensor_dev);

static struct platform_device sensor_dev = ;

在    在mt6575_board_init這個函式中註冊了很多平台裝置,包括上面的平台裝置。camera的平台裝置與平台驅動匹配後,就會呼叫drv的probe函式,其probe函式主要完成的是i2c平台驅動的註冊

點選(此處)摺疊或開啟

static int camera_hw_probe(struct platform_device *pdev)

struct i2c_driver camera_hw_i2c_driver = ;

怎麼去做i2c驅動與裝置的匹配呢?核心中對於這塊有詳細的講解,檔案為instantiating-devices,現在i2c的平台驅動已經註冊了,下面來分析下是怎麼註冊平台裝置的。應該使用核心的第3種方法,在核心註冊i2c驅動的時候,最終會遍歷匯流排裝置的driver成員,呼叫__attach_adapter函式。

點選(此處)摺疊或開啟

static int __attach_adapter(struct device *dev, void *data)

這個函式最主要的是呼叫了camera_hw_i2c_driver的detect函式,完成裝置與驅動的匹配,最終會呼叫camera_hw_i2c_probe。

點選(此處)摺疊或開啟

static int camera_hw_i2c_detect(struct i2c_client *client, int kind, struct i2c_board_info *info)

在probe函式中最只做了一件事件registercamera_hwchardrv,這個函式會註冊字元裝置,註冊裝置節點,並在裝置節點下建立類,重點的東西出現了

點選(此處)摺疊或開啟

static const struct file_operations g_stcamera_hw_fops =

;open只是初始化乙個原子變數留給系統呼叫,ioctrl才是核心,camera_hw_ioctl是上層檔案操作底層硬體的方法。以上是andorid上攝像頭i2c裝置的過程。

DirectShow驅動攝像頭

對於小攝像頭的驅動有幾種方法,通過使用directshow來驅動攝像頭靈活性比較好,有簡單的方法也有比較複雜但更有效的方法,本文只介紹簡單方法,希望與大家交流!用directshow來使用攝像頭,一般要求攝像頭的驅動是wdm格式的,當然,一些比較老的驅動格式directshow也可支援。direct...

第1 5節 攝像頭驅動 USB攝像頭驅動框架

1.寫乙個usb攝像頭驅動程式 當我們把usb裝置接到電腦或板子上去時,如果這個裝置能夠被usb driver所支援 id table吻合 probe函式就會被呼叫,在probe函式裡面就可以做我們想做的事了 對於攝像頭驅動程式來說,是1.分配乙個video device結構體 2.設定這個結構體 ...

使用DirectShow驅動攝像頭

對於小攝像頭的驅動有幾種方法,通過使用directshow來驅動攝像頭靈活性比較好,有簡單的方法也有比較複雜但更有效的方法,本文只介紹簡單方法,希望與大家交流!用directshow來使用攝像頭,一般要求攝像頭的驅動是wdm格式的,當然,一些比較老的驅動格式directshow也可支援。direct...