1. 程式人生 > >Android 的裝置節點

Android 的裝置節點

Android使用Linux2.6,對標準核心改動較少,但是增加了一些內容,如yaffs檔案系統

Android專用驅動

Ashmem匿名共享記憶體
節點名稱/dev/ashmem, 為使用者空間程式提供記憶體分配機制,實現類似malloc的功能
核心中程式碼路徑: kernelmm/ashmeme.c
C libutils庫對其進行了封裝:system/core/libcutils/ashmeme-*.c

Binder
節點名稱/dev/binder, 為使用者程式提供IPC支援,是Android中的主要IPC方式
使用者空間的libutils工具庫(framework/base/libs/utils)和Service Manager守護程序中呼叫Binder介面提供對整個系統的支援

Logger
三個裝置節點:/dev/log/main, /dev/log/event, /dev/log/radio
在核心中程式碼: kernel/drivers/misc/logger.c
在使用者空間logcat(system/core/logcat)呼叫Logger驅動

Android使用的裝置驅動

Framebuffer顯示驅動
對於嵌入式系統,Framebuffer通常作為LCD控制器驅動或者其他顯示裝置的驅動;
FB是一個字元裝置,通常其裝置節點為/dev/fbX,但在Android中使用/dev/graphic/fb0,該裝置節點由init程序自動建立,被libui庫呼叫
FB驅動在使用者空間多使用ioctl,mmap,write等檔案系統介面進行操作,ioctl用於獲得/設定資訊,mmap可以將Framebuffer的記憶體對映到使用者空間,write直接用寫的方式輸出顯示內容

Event輸入裝置驅動
Event驅動是通用的輸入裝置驅動,目前可支援滑鼠,鍵盤,觸控式螢幕等多種輸入裝置;
Event裝置在檔案系統中的裝置節點為:/dev/input/eventX,由init程序建立,公libui庫使用;
使用者空間使用read,ioctl,poll等檔案系統介面操作Event裝置

V4L2 Camera & Video驅動
V4L2驅動既可以支援視訊捕獲,也可以支援視訊輸出,但因為兩者硬體結構相差很大,因此一個系統中的兩種驅動程式需要分別實現;
Android中沒有直接使用V4L2驅動,而是通過Camera或者Overlay硬體抽象層來使用
使用者空間使用ioctl, mmap操作V4L2

OSS音訊驅動
Open Sound System是基於字元的音訊驅動, 使用者空間用ioctl/read/write操作/dev/mixer, /dev/dsp, /dev/xxx介面
Android中沒有直接使用OSS驅動,可基於OSS來實現Android Audio部分的硬體抽象層

ALSA音訊驅動
比OSS使用更方便的音訊驅動,除了OSS原來的ioctl等原始介面外,ALSA還提供了函式庫,以簡化應用程式;
建議使用使用者空間的ALSA庫介面,而不是直接操作ALSA驅動程式;
Android中沒有直接使用ALSA驅動,而是通過Android–>Audio硬體抽象層–>ALSA庫–>ALSA驅動

MTD驅動
Memory Technology Device,通常用於Linux中Flash驅動程式,包括字元裝置(/dev/mtdX)和塊裝置(/dev/block/mtdblockX
MTD驅動通常不在使用者空間直接呼叫,而是用於構建檔案系統,使用者空間只需要使用檔案系統即可

藍芽驅動
兩部分:藍芽協議 + 藍芽控制器驅動;
藍芽協議部分:包括HCI介面,SCO模組,L2CAP模組,BNEP模組等
藍芽控制器驅動部分:為基於SDIO/UART/USB介面的藍芽裝置提供驅動

Wlan驅動
使用者空間使用標準的socket介面進行控制
Wifi驅動在Android中一般編譯成module的方式,通過應用程式設定開關進行載入和解除安裝

相關推薦

Android 裝置節點查詢及裝置資訊讀取

前幾天,又開了一個新專案,發現讀取一個USB dongle的版本號資訊的時候讀取不出來,最後發現是一個新的dongle 於是需要修改native層的C++應用程式: 1.首先看/dev目錄下的hidraw裝置節點有哪些: fd = open(DEVICE_NFC_PATH

android如何手動生成裝置節點

init.rc裡所有可用的command都定義在system/core/init/keyword.h裡,預設是不包含mknod的。事實上,Android的init程序會通過kenel的uevent來自動建立裝置節點(見system/core/init/devices.c裡的

Android音訊驅動-ASOC之建立裝置節點

建立裝置檔案的方法: 第一種是使用mknod手工建立:mknod filename type major minor 第二種是自動建立裝置節點:利用udev(mdev)來實現裝置檔案的自動建立,首先應保證支援udev(mdev),由busybox配置。

Android 系統中裝置節點的建立

查了很多資料,有很多人錯誤地認為是kernel建立的/dev/yourdevice        在最近的kernel中這種說法是不對的, 其實是kernel僅負責在/sys/建立一大堆下目錄和檔案,        而真正的裝置節點是在使用者空間建立的, 在andro

Android裝置節點

Android使用Linux2.6,對標準核心改動較少,但是增加了一些內容,如yaffs檔案系統 Android專用驅動 Ashmem匿名共享記憶體 節點名稱/dev/ashmem, 為使用者空間程式提供記憶體分配機制,實現類似malloc的功能 核心中程式碼路徑: kernelmm/ashmeme.c C

android中建立裝置節點

init收到uevent後,對於action為add/remove的uevent,會建立或刪除節點。這在handle_device_event中處理:如果主裝置號或次裝置號無效(-1),則返回;否則會根據subsystem會在dev下不同的目錄中建立裝置節點。

Android如何生成裝置節點

在Android中,由於沒有mdev和udev,所以它沒有辦法動態的生成裝置節點,那麼它是如何做的呢? 我們可以在system/core/init/下的init.c和devices.c中找到答案: init.c中 int main(int argc, char **arg

Android 如何對/dev/log路徑裝置節點進行讀寫

/dev/log這個路徑直接操作是無法進行讀寫的,所以我在framework層對這個路徑進行關聯,然後三方應用就是對這個路徑進行讀寫了.閒話少說,直接上程式碼.首先自定義service,這個流程前面文章有所介紹,這裡我就只貼出service相關的程式碼, 首先是framew

android中usb裝置驅動不能自動建立裝置節點

除錯一個usb驅動,發現在android下無法自動建立裝置節點,手動建立裝置節點可以正常訪問硬體。後來發現是在init程序裡面對一些usb裝置進行了過濾。 在system/core/init/devices.c 中的下面函式中。 static void handle_gen

android裝置如何掛載sdcard(有些裝置是自動掛載的)

開發中部分裝置可能需要手動掛載sdcard,所以給出以下步驟: 1.使用adb命令將裝置獲取root許可權, 連線裝置 adb connect <裝置IP地址> adb root  重新連線裝置 adb connect <裝置IP地址> adb shell

通過wifi連線Android裝置進行除錯

方法: 先用usb資料線連線裝置,再在terminal下輸入以下命令 D:\LianXi\aaa>adb tcpip 9999 restarting in TCP mode port: 9999 D:\LianXi\aaa>adb connect 192.168.11.120:9999

MTK6737平臺匹配裝置節點的方法

在DeviceTree中需要匹配裝置節點,才可以獲取某一個節點的引數資訊。 /** * of_find_compatible_node - 通過compatible屬性查詢指定節點 * @from - 指向開始路徑的節點,如果為NULL,則從根節點開始 * @type - device_t

Linux驅動開發(5)——生成裝置節點

項裝置可以說是對一部分字元裝置的封裝,還有一部分不好歸類驅 動也歸到雜項裝置 雜項裝置初始化部分原始檔“drivers/char/ misc.c”,這一部分通過 Makefile可知,是強制編譯的。 雜項設備註冊標頭檔案include/linux/miscdevice

Android裝置支援USB轉RJ45有線網絡卡( 沐陽網絡卡JP1081B/9700)

Android裝置支援USB轉RJ45有線網絡卡( 沐陽網絡卡JP1081B9700) 網絡卡裝置: 沐陽網絡卡JP1081B/9700 系統平臺: HISI3798MV100  Android : 4.2 1、分析網絡卡驅動在ubuntu系統上通過lsusb命令檢視網絡卡的驅動資訊

[方法提煉] 獲取Android裝置序列號方法

通過這個方法可以檢測裝置是否連線成功,如果有一臺或者多臺裝置,可以將所有裝置序列號全部輸出 1 # -*- coding:utf-8 -*- 2 import os 3 4 def attachDeviceList(): 5 device_list = [] 6 cmd_

cdev_init和cdev_add之後在/dev目錄下沒有長出裝置節點原因

因為在linux裡面有兩種裝置檔案系統,devfs和sysfs  devfs  1) 需要手動建立裝置節點mknod fasync_dev c 250 0  2) 或者在fasync_dev_init函式中新增:  #ifdef CONFIG_DEVFS_FS

[專案實踐] 在專案實戰中提升程式碼效率的的一次應用實踐-----使用列表解析式輸出當前android裝置的CPU核數

1、先按照初學者思維程式碼應該是這樣的 1 #coding:utf-8 2 import os 3 text = os.popen("adb shell command cat /proc/cpuinfo",'r').read().split("\n") 4 i = 0 5 for j i

安裝PdaNet以連線Android裝置

什麼是PdaNet + PdaNet是一款免費應用程式(適用於iPhone,Android,BlackBerry和其他移動平臺),您可以使用它將智慧手機變成膝上型電腦的調變解調器,或者您可以說它可以實現網路共享。但我們不需要此軟體來啟用網路共享,但此應用程式將幫助我們使用USB電纜將計算機與移動

Android裝置命令開啟adb

android studio 遠端除錯android裝置 不允許連線 unable to connect to 192.168.6.109:5555: cannot connect to 192.168.6.109:5555: 由於目標計算機積極拒絕,無法連線。 (10061) 開啟s

Android開發 - 獲取Android裝置的唯一標識碼(Android 6.0或更高)

在我們的APP開發中,通常需要獲取到裝置的唯一標識。在Android6.0之前,有很多方法我們可以方便獲取到硬體的唯一標識,但是在Android6.0之後,Android系統大幅限制了我們獲取裝置的硬體資訊。 Android6.0之前的方法(已過時) DEVICE_ID通getSyste