Android14 基于Configfs的USB動態配置init.usb.configfs.rc

1?Android14 USB子系統啟動以及動態切換的init.usb.rc

2?Android14 基于Configfs的USB動態配置init.usb.configfs.rc

3?Android14 高通平臺的USB子系統啟動和動態配置init.qcom.usb.rc


1. 什么是ConfigFS

  • ConfigFS?是 Linux 內核提供的一種用戶空間可配置的偽文件系統
  • 在Linux內核中一個設備(如手機)作為USB從設備時,成為一個“Gadget”。
  • 路徑:/config/usb_gadget/,g1表示系統重第一個USB Gadget的配置實例。
  • 允許用戶空間(如?init)動態創建和配置 USB 設備功能
  • 取代了舊時代的?android_usb.ko?驅動

2. 屬性解釋

屬性一句話解釋
sys.usb.config“我要什么 USB 功能”(如 MTP+ADB)
sys.usb.configfs“是否用 ConfigFS 方式配置”(1=是,0是傳統模式)
init.svc.adbd“ADB 進程當前狀態”(running/stopped)
sys.usb.ffs.ready“ADB 的底層準備好了嗎”(1=可以掛載)

3. 關閉USB功能,進入未配置狀態

場景:拔掉USB線、重啟、關閉USB調試、進入關機模式

on property:sys.usb.config=none && property:sys.usb.configfs=1write /config/usb_gadget/g1/UDC "none"stop adbdsetprop sys.usb.ffs.ready 0write /config/usb_gadget/g1/bDeviceClass 0write /config/usb_gadget/g1/bDeviceSubClass 0write /config/usb_gadget/g1/bDeviceProtocol 0rm /config/usb_gadget/g1/configs/b.1/f1rm /config/usb_gadget/g1/configs/b.1/f2rm /config/usb_gadget/g1/configs/b.1/f3rmdir /config/usb_gadget/g1/functions/rndis.gs4setprop sys.usb.state ${sys.usb.config}
  • write /config/usb_gadget/g1/UDC "none":表示內核停用USB控制器UDC(USB Device Controller),即內核層面關閉了USB設備功能,斷開了該gadget與硬件控制器的連接,效果就是電腦會顯示設備已斷開。
  • stop adbd:停止adbd進程,釋放其占用的資源。
  • setprop?sys.usb.ffs.ready 0: 表示當前不能使用adb功能。當adbd啟動并初始化成功后,會自己設置sys.usb.ffs.ready=1。
  • write?/config/usb_gadget/g1/bDeviceClass、bDeviceSubClass、bDeviceProtocol這三組值是USB協議中定義的設備類型描述符,用來告訴主機我是什么設備。
    0表示“未指定設備類”。
  • rm??/config/usb_gadget/g1/configs/b.1/f1、f2、f3表示刪除配置功能中功能鏈接(symlink)。b.1表示配置#1,f1, f2, f3表示該配置中的功能槽位,它實際上一個符號鏈接,指向functions/下真實的功能。
    eg: f1 -> ../functions/ffs.adb
  • rmdir /config/usb_gadget/g1/functions/rndis.gs4 刪除RNDIS(USB網絡)的功能配置。因為該目錄是動態創建的。
  • setprop sys.usb.state ${sys.usb.config}:同步USB狀態屬性為當前配置,用于通知上層USB狀態。

4. sys.usb.ffs.ready屬性的更新的三大場景

4.1 當adbd服務stopped時,設置為0

on property:init.svc.adbd=stoppedsetprop sys.usb.ffs.ready 0

4.2 當sys.usb.config=“none”時,設置為0

on property:sys.usb.config=none && property:sys.usb.configfs=1...stop adbdsetprop sys.usb.ffs.ready 0...

4.3 adbd服務啟動并完成初始化時,設備為1

// path: android/packages/modules/adb/daemon/usb_ffs.cpp
bool open_functionfs(android::base::unique_fd* out_control, android::base::unique_fd* out_bulk_out,android::base::unique_fd* out_bulk_in) {...android::base::SetProperty("sys.usb.ffs.ready", "1");...
}

5. sys.usb.config的各種配置

usb配置為adb、mtp、ptp、accessory、audio_source、midi、rndis以及其組合時,會將對應配置通過寫入內核路徑/config/usb_gadget/g1/configs/b.1/strings/0x409/configuration中,多種組合以下劃線連接,例如accessory_audiosource_adb,并通過symlink創建對應f1、f2、f3與functions之間的軟鏈。

5.1 sys.usb.config取值

取值含義典型場景用戶可見行為
none無功能拔線、關機電腦無反應
adbADB 調試開發調試僅顯示“充電”
mtpMedia Transfer Protocol,多媒體傳輸
使用mtp.gs0功能,通過USB實現文件系統的訪問
1. 默認模式
2. 支持照片、音樂、文件等
彈出“傳輸文件”
ptp

Picture Transfer Protocol

圖片傳輸協議

使用ptp.gs1,專為相機設計的協議

1.?連接電腦導出圖片
2.?相機直接訪問
彈出“傳輸照片”
rndisRemote NDIS,遠程網絡驅動接口
使用rndis.gs4,手機作為USB網卡,共享網絡給電腦
1. 手機作為網絡設備,共享網絡給PC
2. 設置-網絡-USB共享網絡
電腦識別為“以太網適配器”
accessory

Android Open Accessory,外設模式

使用Accessory.gs2,手機作為外設

錄音、直播

不彈窗,直接進入配件模式
audio_source

音頻輸入

使用audio_source.gs3,手機的音頻作為USB音頻輸入

1. 手機作為USB 麥克風,用于專業錄音場景
2.設置-音頻源
電腦設備為“USB麥克風”
midi

Musical Instrument Digital Interface,MIDI 設備

使用midi.gs5功能,手機作為MIDI輸入/輸出設備

1. 連接電子琴、DJ控制器作為 MIDI 輸入
mtp,adb文件+調試開發者模式“文件傳輸 + ADB”
ptp,adb照片+調試攝影+調試“照片傳輸 + ADB”
rndis,adb網絡+調試網絡調試“USB 網絡 + ADB”
accessory,adb外設+調試AOA 調試配件模式 + ADB
audio_source,adb麥克風+調試音頻開發麥克風 + ADB
accessory, audio_source外設+麥克風
accessory, audio_source,adb外設+麥克風+adb

5.2 切換USB配置

  • init.usb.configfs.rc中的USB配置中要求sys.usb.configfs=1的前提,而init.usb.rc的USB配置中要求sys.usb.configfs=0。
  • 如果USB配置中有adb的話,需要額外的條件sys.usb.ffs.ready=1的條件,因為adb配置需要創建指向ffs.adb的軟鏈,因此需要其先Ready,否則會報錯。
    ffs.adb目錄是由adbd在啟動時創建,則需要做前提動作:當滿足該usb配置和configfs=1外,要start adbd(adbd在啟動完成后才會將sys.usb.ffs.ready置為1)。
  • 以usb.config=mtp, adb為例
on property:sys.usb.config=mtp,adb && property:sys.usb.configfs=1start adbdon property:sys.usb.ffs.ready=1 && property:sys.usb.config=mtp,adb && property:sys.usb.configfs=1write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "mtp_adb"symlink /config/usb_gadget/g1/functions/mtp.gs0 /config/usb_gadget/g1/configs/b.1/f1symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2write /config/usb_gadget/g1/UDC ${sys.usb.controller}setprop sys.usb.state ${sys.usb.config}

5.2.1設置USB描述符

write /config/usb_gadget/g1/configs/b.1/strings/0x409/configuration "mtp_adb"詳解

  • 作用:設置USB配置描述符的字符串
  • /configs/b.1:表示配置#1
  • strings/0x409:表示語言ID是0x409,即英語(美國)
  • configuration:這是USB協議中定義的配置名稱,mtp_adb是配置的值。

5.2.2 創建指向對應配置功能的符號鏈接

symlink /config/usb_gadget/g1/functions/mtp.gs0 /config/usb_gadget/g1/configs/b.1/f1和
symlink /config/usb_gadget/g1/functions/ffs.adb /config/usb_gadget/g1/configs/b.1/f2詳解

  • 作用:將MTP功能加入配置
  • fucntions/mtp.gs0:MTP 功能的實現目錄(由內核驅動創建)
  • functions/ffs.adb:ADB功能目錄(基于FunctionFS,FFS,基于用戶空間實現USB功能的機制,adbd服務通過/dev)
  • configs/b.1/f1:配置 #1 的第一個功能槽位
  • configs/b.1/f2:配置 #1 的第二個功能槽位
  • symlink用于創建符號鏈接 ,將 MTP 功能綁定到該配置

5.2.3 啟用USB控制器(UDC)

write /config/usb_gadget/g1/UDC ${sys.usb.controller}詳解

  • 作用:將 Gadget g1 綁定到實際的 USB 硬件控制器,觸發 USB 枚舉過程
  • UDC:USB Device Controller
  • ${sys.usb.controller}取值常見的有fe800000.dwc3,a600000.dwc3等,其中fe800000是內存映射地址,常見于高通驍龍8系列;dwc3是驅動名稱,dwc3?=?DesignWare Core USB3,是Synopsys公司設計的USB3.0控制器的IP核。
    eg:
    fe800000常見于?高通驍龍 8 系列(如 msm8998、sdm845)
    a600000常見于?高通驍龍 6/7 系列?或舊平臺
    12c00000三星 Exynos
    1e000000聯發科 MT 系列
    驅動名含義常見平臺
    dwc3DesignWare Core USB3高通、三星、MTK
    dwc2DesignWare USB2舊設備、嵌入式
    ci_hdrcChipIdea HDRC恩智浦 i.MX
    musb-hdrcMentor Graphics USB老高通、TI
    snps,dwc3設備樹兼容名同 dwc3

5.2.4更新系統sys.usb.state的值

setprop sys.usb.state ${sys.usb.config}詳解

  • 作用:更新USB狀態,屬性sys.usb.state表示最終成功啟動的模式。
  • 該屬性一般由UsbDeviceManager和BatteryService監聽。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/95126.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95126.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95126.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025年KBS SCI1區TOP,矩陣差分進化算法+移動網絡視覺覆蓋無人機軌跡優化,深度解析+性能實測

目錄1.摘要2.系統模型和問題表述3.矩陣差分進化算法4.結果展示5.參考文獻6.算法輔導應用定制讀者交流1.摘要 本文提出了一種面向無人機(UAV)新型軌跡優化方法,以實現對地面移動節點的高效視覺覆蓋。與傳統方法不同,該方法顯式考慮…

Python OpenCV圖像處理與深度學習:Python OpenCV圖像幾何變換入門

圖像變換:掌握OpenCV中的幾何變換 學習目標 通過本課程,學員們將能夠理解圖像的幾何變換原理,包括縮放、旋轉和平移,并能夠使用Python和OpenCV庫實現這些變換。本課程將通過理論講解與實踐操作相結合的方式,幫助學員們…

Redis Windows 7.0.5 安裝教程(附exe/msi下載+環境配置+命令測試)

?第一步:下安裝包? 打開瀏覽器(比如 Edge 或 Chrome),復制這個鏈接到地址欄敲回車: https://pan.quark.cn/s/31912e0d0443 進去后往下翻,找名字帶 ?**redis-7.0.5? 的文件,?選那個 .exe 結…

數據結構(單鏈表)

目錄 1.鏈表的概念及結構 2.單鏈表的應用 2.1 打印鏈表 2.2申請新節點 2.3插入(尾刪和頭刪) 2.4刪除(尾刪和頭刪) 2.5查找 2.6任意位置插入 2.7刪除指定位置的元素 2.8 銷毀鏈表 3.總結 1.鏈表的概念及結構 &#xff…

電腦沒加域卻能獲取到IP地址

企業網絡管理的核心邏輯!電腦沒加域卻能獲取到IP地址,這完全是一種刻意為之的安全設計,而不是網絡故障。 簡單來說就是:“給你IP,但不給你權限。” 這背后是一套完整的 網絡準入控制(NAC) 策略。…

Go語言入門學習筆記

📚 前言 歡迎學習Go語言!這份教材假設您是編程零基礎,從最基本的概念開始講解。Go語言(也稱為Golang)由Google開發,簡單、高效、并發能力強,適合后端開發、系統編程和云計算。 學習建議&#xf…

gradle安裝、配置環境變量、配置阿里源及idea 中配置gradle

下載gradle https://services.gradle.org/distributions/ 配置系統環境變量 新增GRADLE_HOME D:\Information_Technology\App\gradle-8.14.3-bin\gradle-8.14.3 新增GRADLE_USER_HOME D:\Information_Technology\App\gradleHouse 設置 path,新增一行 %GRADLE_…

C# FlaUI win 自動化框架,介紹

一、簡潔介紹 FlaUI 是一套基于 .NET 的 Windows 桌面應用自動化測試庫,支持 Win32、WinForms、WPF、UWP 等多種類型的應用。它基于微軟原生 UI Automation 庫,提供了更現代、易用的 API,適合自動化測試工程師和開發者實現高效、可維護的 UI …

命名空間級別應用 Pod 安全標準

🎯 命名空間級別應用 Pod 安全標準 一、創建 Kubernetes 集群(使用 kind) 使用 kind (Kubernetes IN Docker)快速創建一個本地集群: kind create cluster --name my-cluster驗證集群是否運行正常&#xff1…

Ubuntu 25.10 Snapshot4 發布。

Ubuntu 25.10 的第四個快照(Snapshot 4)已于 2025 年 8 月 28 日發布,供開發者和測試人員進行驗證。這是 Ubuntu 25.10 正式發布前的最后一個月度快照,標志著該版本已進入功能凍結階段,預計將在 10 月發布正式版。 Ca…

STM32F2/F4系列單片機解密和芯片應用介紹

STM32F2/F4系列單片機解密和芯片應用介紹STM32F2和STM32F4系列微控制器憑借其出色的性能、豐富的外設接口和強大的連接能力,在很多對計算能力和實時性有要求的領域都有應用。同時,芯片解密的價格因其型號、加密技術等因素差異較大。🧭 重要提…

250901-BookStack跨服務器從Rootless-Docker到Rootful-Docker的備份遷移及服務啟動

下面給你一套「可離線、最小停機」的遷移步驟,從 A(rootless)搬到 B(rootful)。思路是:停 A → 打包數據卷 → 傳到 B → 還原 → 用同版本鏡像啟動 → 驗證。整套操作不依賴公網,只用你已有的離…

(Redis)Redis 分布式鎖及改進策略詳解

一、為什么需要分布式鎖在單機應用中,synchronized 或 ReentrantLock 足以解決并發問題。但在 分布式系統 中,多臺服務器之間共享同一個資源時,如果沒有鎖,很可能出現 超賣、重復扣減、數據不一致 等問題。 因此,分布式…

Linux應用開發-windows,linux環境下相關工具

VS Code Remote - SSH 虛擬機部分的操作 sudo systemctl status sshsudo apt update sudo apt install openssh-server sudo systemctl start ssh sudo systemctl enable ssh # 設置開機自啟hostname -IVS Code部分的操作 安裝 Remote - SSH 插件 vscode右下角出現&#xff…

Java泛型通配符詳解:搞懂?/extends/super用法,避開集合操作踩坑點

上次跟你們聊了泛型的基礎用法,今天接著往下說 —— 泛型里還有個挺重要的概念叫 “通配符”,就是那個問號 “?”,很多人第一次見都懵:這玩意兒跟普通泛型有啥區別?為啥有時候非得用它不可?小索奇當初也卡…

EXCEL開發之路(二)跨表交互模擬—仙盟創夢IDE

在車輛租賃行業,數據的高效管理與分析對于企業的運營決策、資源調配及客戶服務優化至關重要。自建 Excel 實現多表統計交互,如同為行業裝上了效能驅動引擎,助力企業在復雜多變的市場環境中穩健前行。一、精準資源管理,優化車輛調配…

醫療AI時代的生物醫學Go編程:高性能計算與精準醫療的案例分析(八)

5.4 性能測試與結果分析 為了評估GoEHRStream的性能,我們設計測試模擬真實的醫院數據流場景,并測量關鍵指標。 5.4.1 實驗環境 硬件: CPU: Intel Xeon E-2288G (8 cores, 16 threads) RAM: 32 GB DDR4 Storage: 512 GB NVMe SSD (用于GoEHRStream和BadgerDB) Network: 1 G…

開關電源設計“反饋回路”部分器件分析

目錄 主要分析問題如下: 一、問題1 二、問題二 分析電路如下: 主要分析問題如下: 1、分析TL431芯片1、2兩引腳間并聯電阻和電容(RC電路)的作用? 2、PC817A光耦輸入兩個引腳間并聯電阻的作用?…

AI 編程新玩法:用 yunqi-saas-kit 框架制作小游戲,看廣告變現輕松賺錢?

AI 編程新玩法:用 yunqi-saas-kit 框架制作小游戲,看廣告變現輕松賺錢 在數字經濟快速發展的當下,AI 技術正不斷滲透到各個領域,其中 **#AI 編程憑借高效、便捷的優勢,成為不少開發者和創業者的新選擇。尤其是在小游戲…

Kafka 架構原理

一個kafka集群中包含一個或多個Producer、一個或多個broker、一個或多個ConsumerGrop以及一個Zookeeper集群。kafka通過Zookeeper管理kafka集群配置、leader副本的選舉、生產者的負載均衡等。Producer使用push模式將消息發布到broker,Consumer使用pull模式從broker訂閱并消費消…