原创 i2c 設備自動探測

最近在做camera和ts的自動識別。因爲平臺上各種品牌的camera和ts種類繁多,而且有的i2c地址有衝突,通常是在board-device裏面配置i2c設備,如果遇到不同機型有相同i2c地址則會造成設備創建失敗,只能在編譯的時候去改

原创 i2c 子系統分析

一、i2c驅動核心層分析 i2c驅動核心層主要爲設備驅動層提供設備註冊、通信、管理等接口,同時連接i2c控制器驅動。這裏首先分析i2c子系統中比較重要的幾個結構體: 1、driver struct i2c_driver { unsig

原创 memory 編程接口

在Linux系統中,一般有32位(4GB)的地址空間,進程的4GB內存空間被分爲兩個部分 — 用戶空間與內核空間,用戶空間地址一般分佈爲0 ~ 3GB(即PAGE_OFFSET,一般等於0xc0000000),剩下的3 ~ 4GB則爲內核

原创 framebuffer 子系統分析

一、常見結構體分析 1、fb_info struct fb_info { int node; int flags; struct mutex lock; /* 調用open/release/ioctl時的鎖 */ struct

原创 android 休眠喚醒機制分析(一) — wake_lock

Android的休眠喚醒主要基於wake_lock機制,只要系統中存在任一有效的wake_lock,系統就不能進入深度休眠,但可以進行設備的淺度休眠操作。wake_lock一般在關閉lcd、tp但系統仍然需要正常運行的情況下使用,比如聽歌

原创 i2c - gpio

處理器只支持3個i2c通道,常常會不夠用,最近寫了一個gpio模擬i2c的driver,把模擬的i2c通道加入了i2c-core中,作爲第 4 通道,調用接口與標準i2c一致,代碼如下: #define DELAY 2 #defi

原创 v4l2 編程接口(二) — driver

V4L2 驅動隨着硬件的變化也越來越複雜,現在大部分設備有裏面包含了多個IC, 在/dev目錄下不僅要建立 V4L2 的節點,而且還需要建立如:DVB、ALSA、FB、I2C、input等設備節點。事實上 V4L2 驅動需要支持音頻/視頻

原创 i2c 編程接口

1、通信接口 i2c發送或者接收一次數據都以數據包 struct i2c_msg 封裝 struct i2c_msg { __u16 addr; // 從機地址 __u16 flags; // 標誌 #define I

原创 android 休眠喚醒機制分析(三) — suspend

前面我們分析了休眠的第一個階段即淺度休眠,現在我們繼續看休眠的第二個階段 — 深度休眠。在深度休眠的過程中系統會首先凍結所有可以凍結的進程,然後依次掛起所有設備的電源,掛起順序與設備註冊的順序相反,這樣保證了設備之間電源的依賴性;直至最後

原创 camera 原理

1、Color Filter Array — CFA 隨着數碼相機、手機的普及,CCD/CMOS 圖像傳感器近年來得到廣泛的關注和應用。 圖像傳感器一般都採用一定的模式來採集圖像數據,常用的有 BGR 模式和 CFA 模式。BGR 模式是

原创 camera 應用

前段時間寫了一個測試 camera 的應用程序,很簡單的實現了在平臺上拍照和錄像的功能,bmp文件頭暫時只支持固定分辨率 640 x 480: #include <stdio.h> #include <errno.h> #include

原创 getevent/sendevent 使用說明

這兩天準備寫一下input子系統的分析,過程中發現了兩個好工具,呵呵,就是本文介紹的主角:getevent用於獲取當前系統input設備的一些參數和實時事件的數據;sendevent用於發送input事件,這樣在調試的時候遇到有的樣機按鍵

原创 i2c 協議解析

1、基本概念       主機            初始化發送,產生時鐘信號和終止發送的器件       從機            被主機尋址的器件       發送器        發送數據到總線的器件       接收器    

原创 v4l2 編程接口(一) — ioctl

在應用程序獲取視頻數據的流程中,都是通過 ioctl 命令與驅動程序進行交互,常見的 ioctl 命令有: VIDIOC_QUERYCAP /* 獲取設備支持的操作 */ VIDIOC_G_FMT /* 獲取設置支持

原创 notifier chain — 內核通知鏈

大多數內核子系統都是相互獨立的,因此某個子系統可能對其它子系統產生的事件感興趣。爲了滿足這個需求,也即是讓某個子系統在發生某個事件時通知其它的子系統